ときどきの雑記帖 めぐりあい電脳空間編

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

一つ前へ 2010年10月(中旬)
一つ後へ 2010年11月(上旬)

ホームへ

2010年10月31日

■_

・しょぼーんクッション
日曜日に売っているという情報を得て、即座に秋葉原に向かったものの間に合わず ○| ̄|_ コトブキヤ店頭に「ショボーン クッション」 1コ1050円 - アキバBlog つか予約取ってたのか… Twitter / @コトブキヤはちこ: 【ラジ館】大人気(´・ω・`)ショボーンクッション ... 月曜日午後にも販売するとあるけど、終業後に行っても間に合いそうにないしなあ (さすがに有給とってはいけんw)

・DECの興亡
Amazon さんで扱ってないのでアサマシ貼れないのがとっても残念w DEC というと Togetter - 「X/Open DTPモデルと、DECって何ですか?ってググったら、おじさんたちが爆発した件」 ある年代以上の人たちにとっては特別の響きを持つものだと思います。 今も DEC 発の、あるいは深く関与した技術が数多あるわけですが そんな会社がなぜ、滅びの道(Compaqに買収される。そのComppaqはさらにHPに) を歩んでしまったのでしょうか? ってまあ steps to phantasien(2009-04-18) ですでに書評があるので細かくは書きません。



DECの興亡
目 次

 日本語版に寄せて/序 文/謝 辞
 第1章 本書の目的と全体像
 第2章 技術・組織・文化の3 つの流れ:DEC 史の教訓を解読する図式

第1部 イノヴェーション文化の創造:技術・組織・文化の流れが一体となっていた時期
 第3章 科学者・技術者としてのケン・オルセン
 第4章 指導者・経営者としてのケン・オルセン
 第5章 セールスマン・マーケターとしてのケン・オルセン
 第6章 DEC の文化的パラダイム
 第7章 DEC の「その他」の遺産:リーダーの育成
 第8章 組織開発(OD )の進歩に寄与したDEC

第2部 技術・組織・文化の流れが分岐し、組織に危機がつくられていった中年期
 第9章 変化する技術のインパクト
 第10章 成功と、その後の成長、そして経年変化
 第11章 学習努力にみる文化面の強さと硬直性
 第12章 混沌の1980 年代:頂点から下り坂へ
 第13章 終焉の始まり:ケン・オルセンのDEC を救う最後の努力

第3部 教訓と遺産
 第14章 明示的教訓と暗示的教訓
 第15章 DEC の残した永続的な遺産

付録A DEC の技術的遺産/ 付録B DEC 製造活動/ 付録C DEC 、初めての知識基盤組織
付録D DEC :戦略的失敗/付録E 何が起こったのか?:後書きに代えて

参考文献/著者について
インターフェース・サイコロジストとしてのProf.Ed Shein
監訳者あとがき
索 引/訳者一覧

わたしは紀伊国屋書店の新宿本店で買ったのですが、 一応通販でも扱ってはいるみたいですね。取り寄せみたいですが。


亀田ブックサービス 商品一覧: 紀伊國屋書店BookWeb

DECの興亡 ― IT先端企業の栄光と挫折
エドガ-・H・シャイン/ピ-タ-・S.ディリシ- / 亀田ブックサ-ビス
2007/05
¥3,801 (税込)
ポイント: 36 pt
在庫がありません。お取り寄せになります。
(品切絶版等により入手できない場合もあります。予めご了承願います。)
この商品は、国内送料無料でお届けします。

衰亡の軌跡というものは企業によりさまざまでしょうが、 今全盛を迎えているところであっても衰亡への道をたどり始めているのかもしれません。

■_

昨日の 数値解析(C言語) - Yahoo!知恵袋 ですが、気になったので Python でごにょごにょしてみました。

# -*- coding: sjis -*-
import math

eps = math.pi * 0.00001

#1) (1/1x3) + (1/2x4) + (1/3x5) + (1/4x6) + ... = 3/4
#
def fun2():
    print("#2) 8{(1/1x3) + (1/5x7) + (1/9x11) + (1/13x15) + ...} = π")
    n = 1
    ans = 0.0
    while (True):
        xn = 1 / ((4 * n - 3) * (4 * n -1))
        #print(n, ans+xn)
        if math.pi - 8*ans < eps:
            break
        n += 1
        ans+=xn
    print("answer: ", n-1, 8*ans)

def fun3():
    print("#3) 2(2x2/1x3 x 4x4/3x5 x 6x6/5x7 x 8x8/7x9 ...) = π")
    n = 1
    ans = 1.0
    while (True):
        xn1 = (n*2)**2
        xn2 = (2 * n - 1) * (2 * n + 1)
        xn = xn1 / xn2
        #print(n, ans*xn)
        ans = ans*xn
        if math.pi - 2*ans < eps:
            break
        n += 1
    print("answer: ", n-1, 2*ans)
    
def fun4():
    print("#4) 3(6x6/5x7 x 12x12/11x13 x 18x18/17x19 ...) = π")
    n = 1
    ans = 1.0
    while (True):
        xn1 = (n*6)**2
        xn2 = ((6 * n) - 1) * ((6 * n) + 1)
        xn = xn1 / xn2
        #print(n, ans*xn)
        ans = ans*xn
        if math.pi - 3*ans < eps:
            break
        n += 1
    print("answer: ", n-1, 3*ans)

def fun5():
    print("#5) 4(1 - 1/3 + 1/5 - 1/7 + 1/9 - ...) = π")
    n=1
    sign = 1
    ans = 0.0
    while (True):
        xn = sign * (1 / n)
        ans += xn
        if abs(math.pi - 4*ans) < eps:
            break
        n += 2
        sign *= -1
    print("answer:", n-1, 4*ans)


def expr2(n):
    """#2) 8{(1/1x3) + (1/5x7) + (1/9x11) + (1/13x15) + ...} = π"""
    return 8 * (1 / ((4 * n - 3) * (4 * n -1)))

def expr3(n):
    """#3) 2(2x2/1x3 x 4x4/3x5 x 6x6/5x7 x 8x8/7x9 ...) = π"""
    xn1 = (n*2)**2
    xn2 = (2 * n - 1) * (2 * n + 1)
    return 2 * (xn1 / xn2)

def expr4(n):
    """#4) 3(6x6/5x7 x 12x12/11x13 x 18x18/17x19 ...) = π"""
    xn1 = (n*6)**2
    xn2 = ((6 * n) - 1) * ((6 * n) + 1)
    return 3 * (xn1 / xn2)

def expr5(n):
    """#5) 4(1 - 1/3 + 1/5 - 1/7 + 1/9 - ...) = π"""
    sign = 1 if n % 2 == 1 else -1
    return sign * 4 * (1 / ((2 * n) - 1))


print("pi = ", math.pi)
fun2()
fun3()
fun4()
fun5()

print("#####")

import operator

for (f1, f2) in [(operator.add, expr2), (operator.add, expr5)]:
    ans = 0.0
    n = 1
    while True:
        ans = f1(ans, f2(n))
        n += 1
        #print(ans)
        if abs(math.pi - ans) < eps:
            break
    print("answer: ", n-1, ans)

なんか同じような部分があるのでくくりだそうと思ったのですが、 和ではなく積を取るほうをうまくまとめ切れませんでした。 各項を n 倍したのを掛けてっちゃあだめだよなあ ○| ̄|_

pi =  3.14159265359
#2) 8{(1/1x3) + (1/5x7) + (1/9x11) + (1/13x15) + ...} = π
answer:  15916 3.14156123866
#3) 2(2x2/1x3 x 4x4/3x5 x 6x6/5x7 x 8x8/7x9 ...) = π
answer:  24999 3.14156123845
#4) 3(6x6/5x7 x 12x12/11x13 x 18x18/17x19 ...) = π
answer:  2777 3.14156124599
#5) 4(1 - 1/3 + 1/5 - 1/7 + 1/9 - ...) = π
answer: 63660 3.14162406951
#####
answer:  15916 3.14156123866
answer:  31831 3.14162406951

2) とか 4) とかって結構早く収束してますね。へー。 5) の arctan(1) は加算と減算が交互に出てくるから収束が遅いとはいえ 4) は一桁違うものなあ。 しかし2) 3) 4) の式はどこから出てきたものなんだろう?

Haskell あたりだとこれをどう書くのかはまあ想像がつくけど(効率その他は置いといて)、 APL やら Mathematica なんかだととんでもなく短く書けそうな気がする。 Mathematica 欲しいなあ。使うあてないけどw

■_

■_


スレ立てるまでもない質問はここで 108匹目 
141 746 [] 2010/10/31(日) 15:02:28 ID: Be:
    プログラムの勉強がしたくなりましたが、
    市販のプログラムソフトは高いので、
    オープンソースのプログラム言語はないでしょうか。
    できれば、C言語かJava言語がいいのですが。 

142 デフォルトの名無しさん [sage] 2010/10/31(日) 15:06:00 ID: Be:
    Microsoft Visual Studio Express 

143 デフォルトの名無しさん [sage] 2010/10/31(日) 15:06:44 ID: Be:
    >>141
    GNU Cコンパイラ がオープンソースですが、プログラムの勉強のためにコンパイラのソースを読むのは
    難易度が高すぎると思います。 

144 デフォルトの名無しさん [sage] 2010/10/31(日) 15:06:57 ID: Be:
    >>141
    C言語かJava言語 

145 デフォルトの名無しさん [sage] 2010/10/31(日) 15:07:13 ID: Be:
    >>142
    それ、オープンソースのプログラム言語 ではないぞ 

146 デフォルトの名無しさん [sage] 2010/10/31(日) 15:09:10 ID: Be:
    オープンソースのプログラム言語とか言葉の意味がちゃんと分かって使ってるとは思えない 

147 デフォルトの名無しさん [sage] 2010/10/31(日) 15:15:37 ID: Be:
    >>141
    mingw 

148 デフォルトの名無しさん [sage] 2010/10/31(日) 15:18:14 ID: Be:
    mingwって環境だろ。>>143でガイシュツ。 

149 デフォルトの名無しさん [sage] 2010/10/31(日) 15:21:29 ID: Be:
    意訳するとフリーで使える環境が無いかきいてるだけだろ 

150 デフォルトの名無しさん [sage] 2010/10/31(日) 15:22:47 ID: Be:
    ここはやはり、文書を真摯に受け取って対応する遊びを(ry 

151 デフォルトの名無しさん [sage] 2010/10/31(日) 15:24:35 ID: Be:
    その辺は本人次第だな 

152 デフォルトの名無しさん [sage] 2010/10/31(日) 15:36:12 ID: Be:
    TinyBASICなんかどうだ、東大版のソースがあちこちにある 

153 デフォルトの名無しさん [sage] 2010/10/31(日) 15:38:32 ID: Be:
    >>141
    C言語かJava言語 

154 デフォルトの名無しさん [sage] 2010/10/31(日) 15:40:27 ID: Be:
    >>141
    > できれば、C言語かJava言語がいいのですが。

    じゃあ、C言語かJava言語。 

155 デフォルトの名無しさん [sage] 2010/10/31(日) 15:43:25 ID: Be:
    参考情報だけど、ソースコードが開示されている、Cコンパイラに
    Small-C というC言語のサブセットがある。今ぐぐったらまだ
    ダウンロードできるみたい。
    この、ダウンロードした中身をみてないから本当にソースコードが
    含まれているかはなんとも言えないが、昔遊んだときは面白かった。
    LSI-C だっけ、ああいうのが出てきてからは遊ばなくなった。 

156 デフォルトの名無しさん [sage] 2010/10/31(日) 15:45:10 ID: Be:
    Small C はコンパイラ含めて全部のソースコードが含まれてるよ 

157 141 [] 2010/10/31(日) 15:52:12 ID: Be:
    ごめんなさい、よく意味がわかっていませんでした。
    昔、Microsoft Visual Studioを買って(XP非対応)挫折したことがあったのですが、
    そのときから、プログラム言語=プログラグソフトと思っていました。
    149さんがいうように、フリーで使えるソフトがないのかなと思いました。 

158 デフォルトの名無しさん [sage] 2010/10/31(日) 15:53:06 ID: Be:
    >>152
    東大版TinyBASICのソースってどこにある? 

159 デフォルトの名無しさん [sage] 2010/10/31(日) 15:57:44 ID: Be:
    >>141
    Microsoft Visual Studio の何処で?何で?挫折したのか?
    それによっては、すすめる内容も違うと思われ。 

160 デフォルトの名無しさん [sage] 2010/10/31(日) 16:00:30 ID: Be:
    言語で挫折したんじゃなくて環境の使い方が分からなくて挫折したんだろ?
    VCでダメなら何でやってもダメだと思われ 

161 デフォルトの名無しさん [sage] 2010/10/31(日) 16:08:46 ID: Be:
    >>160
    いやいや、それなら、IDEの元祖、TurboPascal からやり直すって手があるぞ
    ttps://downloads.embarcadero.com/free/turbopascal

162 デフォルトの名無しさん [sage] 2010/10/31(日) 16:12:46 ID: Be:
    東大版tinyBASICの原本は Palo Alto TinyBASICであって
    例えばここにある。
    http://www.nicholson.com/rhn/basic/

163 デフォルトの名無しさん [sage] 2010/10/31(日) 16:15:10 ID: Be:
    Turbo Pascal 3.02 が扱いやすいと思う。 英語モードに切替える 

164 デフォルトの名無しさん [sage] 2010/10/31(日) 16:23:56 ID: Be:
    pascalでいいならrubyやpythonやperlでもいいような 

165 デフォルトの名無しさん [sage] 2010/10/31(日) 16:26:15 ID: Be:
    スクリプト言語じゃねえか(ぷ 

166 デフォルトの名無しさん [sage] 2010/10/31(日) 16:30:08 ID: Be:
    プログラムの勉強をするのにインタプリタかコンパイラかは関係ない 

167 141 [] 2010/10/31(日) 16:31:04 ID: Be:
    VCの6.0です。再度勉強しようにもWindows98に対応しているので、
    いま使っているのがXPだからそもそもパソコンがインストールに応じてくれない。
    挫折した理由はゲームが作りたいのに、勉強した実感がもてなかったから、
    そのまま埃被ってしまったのと、受験でプログラムの勉強できる時間がなくなったから、
    そのまま惰性でやらなくなってしまいました。
    端的にいって、勉強したところの実感がもてなかった。
    再度勉強しようにもソフトが受け付けなくなったという点で挫折しました。 

168 デフォルトの名無しさん [sage] 2010/10/31(日) 16:34:41 ID: Be:
    >>167
    14歳からはじめる
    C言語 わくわくゲームプログラミング教室
    Visual Studio 2008編
    http://www.rutles.net/books/217.html

    最初に、この本を買って来い。 

169 デフォルトの名無しさん [sage] 2010/10/31(日) 16:36:26 ID: Be:
    >>167
    目標:ゲームが作りたい
    挫折理由:勉強したところの実感がもてなかった。
    VC EEを使った場合の予測:挫折理由の「勉強したところの実感がもてなかった。」
      は、無にも解消されないため再度挫折。
    他の言語を使った場合も同様の予測が立つ。
    強いて上げるなら、簡単なゲームなら作れるHSPをすすめるが、たぶん無理だろう。 

170 デフォルトの名無しさん [sage] 2010/10/31(日) 16:36:45 ID: Be:
    >>166
    そう思うのは素人の発想
    まじめに技術を身に付けたいならプリミティブなところからはじめるべき 

171 デフォルトの名無しさん [sage] 2010/10/31(日) 16:42:28 ID: Be:
    >>170
    素人じゃないけどはじめるのはどこからでも同じ。主観の押し付け合いしても仕方ないけど。 

172 デフォルトの名無しさん [sage] 2010/10/31(日) 16:44:09 ID: Be:
    HSPは低級で小学校までだな。 ちゃんとした言語を学んだ方が良い。 

173 141 [] 2010/10/31(日) 16:47:13 ID: Be:
    >>152
    TinyBASICですか、ありがとうございます。
    まずそこから勉強してみます。
    スレ荒らしてしまい、申し訳ありませんでした。

174 デフォルトの名無しさん [sage] 2010/10/31(日) 16:47:49 ID: Be:
    小学生のうちから Haskell に慣れておくべきだと思う 


162 を見て早速Tiny BASICのソースをげっとw

東大版のもあるのかなあ。探してないけど。

■_ で

Tiny Basic Info


BASIC Programming and Chipmunk Basic Home Page
(略)
      Tiny

    * Tom Pittman's original Tiny Basic rewritten in C for Dr Dobbs portal, circa 2004
    * uBasic a Tiny Basic in C (BSD-style license, by Adam Dunkels, 2007)
    * Integer Tiny Basic in C (by Herbert Schildt, 1988)
    * Tiny Pascal Basic - Basic-S, Tiny Basic interpreter in Pascal source code (by S. A. Moore samiam@moorecad.com , 1980)
    * Tiny Basic in Basic (an iziBasic sample program)
    * Tiny Basic in SmallBasic by Nicholas Christopoulos
    * Tiny_BASIC_in_Forth - Forth source for a Tiny Basic interpreter, 1984

    * Palo Alto Tiny Basic 8080 asm source code (Bruce Sherry's disk version 3.1 of Lichen Wang's Tiny Basic)
      and the tiny basic code archive (164 Basic programs, zip file)
    * 68000 Tiny Basic version 1.2 (68k asm source code) (mirror). By G. Brandly
    * SWTPC Tiny Basic (6800 asm source code), by Robert Uiterwyk
    * A Z80 Tiny Basic (asm source code)
    * Poly-88 Basic (8080 source code for a TinyBASIC)

    * GE TeleBasic in GE-235 Assembly - Source code for one of the very first implementations of Basic for the Dartmouth Time Sharing System, 1965
    * DEC TSS/8 Basic for the PDP-8 - another early (1969-1971) implementation of Basic for DEC minicomputers in assembly language (tokenizing compiler+interpreter)
    * NASCOM ROM Basic in Z80 asm for NASCOM computer kits
    * Basic in 8085 asm - by David Dunfield
    * EhBASIC - Enhanced Basic interpreter for 68000 systems, by Lee Davison
    * EhBASIC - Enhanced Basic interpreter in 6502 asm
      TCP/IP stack and Web Server in EhBASIC
    * Basic52 80C52 asm source code (zip file) Intel 1986.

    * Cheesecake BASIC V3 - a Basic interpreter written in QBasic (source code for version 0.1 here)
    * CellularBASIC Open-Source BASIC Interpreter for Java-Enabled Handhelds, CLDC 1.1/MIDP 2.0 J2ME.
    * JBasic - Basic Interpreter for Java JVM
    * JavaBasic - Includes Java Source Code. A Java Applet Contest Entry. By Forest Ye
    * MINI-BASIC - minimal Basic interpreter written in MASM32 assembly language for MSWindows
    * MoonRock - a Basic to x86asm compiler written in QBasic. Author: Rowan Crowe
    * qbtiny - a tiny language compiler + tutorial written in QBasic. By J. Crenshaw and rick@tip.nl
    * MicroBasic (dead link) - a tiny Basic compiler written in QBasic/FutureBasic
    * Small Basic Interpreter - written in MicroSoft VB4 (a Basic written in Basic).
      SBI source code is included with the June 97 issue of Dr. Dobb's Journal. By Polar Engineering and Consulting.
    * Perl Module to interpret BASIC

結構あるもんだなあ。

かなり古い環境用のものへのリンクがあったのだけど(オリジナルにかなり近い?)、 アクセスできなかった。しょんぼりんぐ。

■_ DVD-BOX



「伝説巨神イデオン」を再びDVD-BOX化、安価で購入可能に :おた☆スケ -おたくのスケジュール帳-

富野由悠季(当時は富野喜幸)監督作品として、1980年から1981年にかけて放送されたロボット
アニメ「伝説巨神イデオン」を再びDVD-BOX化。「伝説巨神イデオン DVD-BOX」と「伝説巨神イ
デオン DVD-BOX PART 2」が12月15日に同時発売される。

「伝説巨神イデオン」は2000年にもDVD-BOX化されているが、現在は入手困難で、Amazonではマ
ーケットプレイス出品者により10万円を超す価格が付けられている。今回は2万790円(Amazon価
格は1万5385円)での販売となる。

なお、キャラクターデザインを手掛けた湖川友謙さんのブログによると、劇場版が来年3月に
Blu-ray化されることが予定されている。

劇場版のBOXは買ったんだけど、TVシリーズのは抑えなかったんだよな。 ちょっとお高めだったし。で、これにしてもBOX 1と BOX 2 で4万かあ。 なんだかなあという気も。

■_

2010年10月30日

■_

・台風
特に勉強会に参加とかもなかったので一日家でぐだぐだ。 って、TAPL読書会の予習をするはずではなかったのかっ

・なんか面白そうな本発見
オライリーだから翻訳本出るかなあ。 出版社: Oreilly & Associates Inc (2010/10/29) ペーパーバック: 624ページ げ、結構厚いぢゃん。


Amazon.co.jp: Making Software: What Really Works, and Why We Believe It: Andy Oram, Greg Wilson: 洋書
内容説明

No doubt, you've heard many claims about how some tool, technology, or practice 
improves software development. But which claims are verifiable, and which are merely 
wishful thinking? In this book, leading thinkers such as Steve McConnell, Barry Boehm, 
and Barbara Kitchenham offer essays that uncover the truth and unmask myths commonly 
held among the software development community. Do different programming languages 
really make people more productive? Is copy-and-paste programming a bad practice? And 
why do some people find it so hard to learn how to program? By understanding what 
facts are real and which claims are pure hype, you'll be better equipped to determine 
the tools, technologies, and best practices that will best address your needs. 

■_ 例外


Exceptional — Article — The Nerdary

Exceptional

By Kenny Meyers October, 25th 2010

If you ever encounter a problem with a piece of software, chances are you'll see an 
exception. Exceptions are one of those vague programming practices that seem to have 
no hard-and-fast rules (like all great programming practices). How to use exceptions 
and when to use them is a struggle for me. Here's what I've learned, and my thoughts.

Wikipedia defines exception handling as “a programming language construct or computer 
hardware mechanism designed to handle the occurrence of exceptions, special conditions 
that change the normal flow of program execution.” Source This as detailed a 
definition as you'll ever get, so in practice how do you determine when to throw and 
handle exceptions?

Here are my general rules of thumb to throw an exception. None of these are laws.

I throw exceptions if:
わたしは次のような場合に例外を送出します:

   1. I don't have control of the resource I'm using and it's very likely going to 
      fail at some point in the project's history (e.g. database, third-party library)

      わたしは自分の使っているリソースのコントロールを持っていません。、それは
      プロジェクトのヒストリのあるポイントで失敗することに非常に直結しやすいものです
      (データベースやサードパーティ製のライブラリなど)

   2. Some component or piece is missing that I need to load the software (e.g. config file)
      ソフトウェアをロードするのに必要となるなんらかのコンポーネントもしくは piece
      (設定ファイルなど) が失われる

   3. In exceptional cases.

In my exceptions I make sure that:
例外処理では次のことを確実に行います:

   1. They have a very clear message in regards to what the error is. I used to write 
      terrible messages: “Something went wrong”. Now I want to be very descriptive after 
      staring at too many browser windows with a single tear streaming down my face. Here's 
      an example “We're unable to connect to the database to save the record”.

      例外は何がエラーであったのかに関する非常に明確なメッセージを保持しています。
      わたしは terrible なメッセージ “何かがおかしい” を出すために使っています。

   2. That this is the last possible way to handle this problem.
      この問題の処理ができる最後の手段

I handle exceptions by:
わたしはイカの手段によって例外を処理します:

   1. Making sure the resource catching exceptions isn't too far removed from the throw
      call. I want to make sure we don't go three layers deep into dreamworld before 
      finding the specific throw.

      resource cathing exceptions を確実に行うことは、例外の送出からそうかけ離れたもの
      ではありません。

   2. They output a line number to the screen. This is incredibly important for PHP work.
      スクリーンに行番号を出力しますが、これはPHPでの作業において icredibly に重要です。

   3. Trying to limit the amount of exception handling, meaning there's only a couple 
      places that handle types of exceptions for a group of code.

      例外処理の量を制限しようとすることは、あるコードのグループのための
      例外の型を処理する場所が二、三箇所しかないことを意味します。

Exceptions in languages are dangerously flexible. Usually, they're just a class that 
you can extend and throw all you want. This makes it easy to throw exceptions for just 
about anything. I've used exceptions for a messaging system. I've worked on projects 
that don't use them. I believe they are necessary and informative, and are for 
exceptional situations.


プログラミング言語における例外は危険なまでに融通性があります。
通常それは単なるextend したりあなたの望むすべてを送出できるようなクラスです。
これはjust about anything なための例外の送出を簡単にします。
わたしはあるメッセージシステムのために例外を使っていました。
例外を使わないプロジェクトで働いたこともありますが、例外は必要なものでありかつ
informative なものであり、exceptional situations (例外的状況?) のためのものである
と確信しています。


What about you?


Copyright © 2010 to each respective writer.

■_

複雑な条件判定で、if がネストしてしまうのをどうにかしたいというお悩み。


Better pattern to handle nested code conditions? - Stack Overflow

I have a webpage that needs to selectively show or hide a substantial number of 
controls. Each control's visibility is determined based on which of 3 conditions are 
true.

わたしはい表示するかしないかを選択する必要のあるたくさんの control がある
web ページを持っています。
それぞれの control の visiblility は真である三つの条件に基づいて決定されます。


So, for example, given the conditions A, B, and C;
たとえば A B C の条件が与えられたとして

    * Control1 needs to be visible only when A and B are true and C is false.
      Control1 は A とB が true で、C が false のときにだけ表示する必要がある
      
    * Control2 needs to be visible only when B and C are true and A is false.
      Control2 は B と C が true で、A が false のときにだけ表示する必要がある

    * Control3 needs to be visible only when A and C are true and it doesn't care what B is.
      Control3 は B の状態には関係なく A と C が true であるときにのみ表示する
      必要がある

    * and so on...
      以下同様

If each control looked at every condition, the control logic would be ugly, but doable.

もしそれぞれの control をすべての条件でロードしていたら、その制御ロジックは
醜いものになりますが、行うことは可能です。

If A Then
    If B Then
        If C Then

        Else

        End If
    Else
        If C Then

        Else

        End If
    End If
Else
    If B Then
        If C Then

        Else

        End If
    Else
        If C Then

        Else

        End If
    End If
End If

But unfortunately, when you mix in the fact that many controls only care about 1 or 2 
of the 3 conditions, the code starts to grow into a maintenance nightmare. Here are 
all 26 of the possible conditions:

しかし不運なことに、

そのコードはメンテナンスの悪夢への坂を転がり始めることになります。
以下に可能な組み合わせ26通りすべてを挙げます:

A   False   B   Any     C   Any  
A   True    B   Any     C   Any  
A   Any     B   Any     C   False
A   False   B   Any     C   False
A   True    B   Any     C   False
A   Any     B   Any     C   True 
A   False   B   Any     C   True 
A   True    B   Any     C   True 
A   Any     B   False   C   Any  
A   False   B   False   C   Any  
A   True    B   False   C   Any  
A   Any     B   False   C   False
A   False   B   False   C   False
A   True    B   False   C   False
A   Any     B   False   C   True 
A   False   B   False   C   True 
A   True    B   False   C   True 
A   Any     B   True    C   Any  
A   False   B   True    C   Any  
A   True    B   True    C   Any  
A   Any     B   True    C   False
A   False   B   True    C   False
A   True    B   True    C   False
A   Any     B   True    C   True 
A   False   B   True    C   True 
A   True    B   True    C   True 

Is there a better pattern to handle checking for multiple conditions?

multiple condtions のチェックを行うもっと良いパターンはないでしょうか?

Edit: I had started going down the road that Marcelo Cantos suggested, but my A, B, 
and C conditions are quite long. So I made a helper function:

Dim isMatch = Function(A As Boolean?, B As Boolean?, C As Boolean?) As Boolean
        Return (Not A.HasValue OrElse A.Value = SomeLongConditionA) _
        AndAlso (Not B.HasValue OrElse B.Value = SomeLongConditionB) _
        AndAlso (Not C.HasValue OrElse C.Value = SomeLongConditionC)
    End Function

Control1.Visible = isMatch(True, True, False)
Control2.Visible = isMatch(False, True, True)
Control3.Visible = isMatch(True, Nothing, True)

Are there only three state flags that you are concerned with that determine control 
visibility? – Dave White yesterday

@Dave White, yes - a maximum of 3. – adam0101 13 hours ago 1 	 

Why not just make three bool values for each condition and then combine those? That 
would make your code more maintainable and readable. Like : bool isA, isB, isC; isA = 
(Test for condition A); and then Control1.Visible = isA And isB; Con2.Visible = Not 
isA And isB and isC; Con3.Visible = isA And isC; (apologies for hybrid language there, 
I'm used to C# but I tried to use the VB boolean ops) – CodexArcanum 10 hours ago

Oh, and I say its easier to read because you'd separate out the logic for what 
satisfies each condition and then further separate out the logic why each controls is 
visible. Its more maintainable because if you ever need to add a conditionD or a 
control4, its very easy to just add more onto this. How easy would it be to add more 
conditions or controls to your isMatch function? – CodexArcanum 10 hours ago

@CodexArcanum, I started thinking the same thing. :) – adam0101 8 hours ago

Control1.Visible = A And B And Not C
Control2.Visible = Not A And B And C
Control3.Visible = A And C
...

Note that this form looks like the description of the rules you provided. This is a 
good way to think about most problems: "How can I make the code look like my 
description of the problem?"

EDIT: If A, B and C represent long-winded expressions, you don't have to copy-paste 
those expressions onto every line, or write a helper function. Just pre-compute the 
values:

Dim A As Boolean = SomeLongConditionA
Dim B As Boolean = SomeLongConditionB
Dim C As Boolean = SomeLongConditionC

Control1.Visible = A And B And Not C
...

Also note that this will be much faster than the helper function, which saves on 
typing but still evaluates the conditions many times over.
+1. It doesn't need to be any more complicated than this. At least not if the OP has 
specified his requirements correctly... – Nailuj yesterday

Possible improvement: Line up the inputs with each other vertically. YMMV, though.
– Christian Mann yesterday

@Christian: I originally did, but it gave a misleading impression, given that B was 
lining with C, and forcing variable names to line up looked weird, as there was no 
natural place for the single And. – Marcelo Cantos yesterday

If @adam0101 has 8 states, and a substantial (??) number of controls to deal with, 
you'll get a lot of duplication of the bitwise operations. @MainMa's example will be 
more readable, if you have more controls than state combinations. If you have more 
state combinations than controls, then this example is better. – Dave White yesterday

@Dave: If M and N are large, then MxN is going to be huge, no matter what. Besides, 
@MainMa's solution is structurally the same as mine and will thus exhibit exactly the 
same kind of growth in complexity. It just uses if X then Y = True instead of Y = X. – 
Marcelo Cantos yesterday
Wouldn't it be easier to group the conditions by control:

If A And B And Not C Then
    Control1.Visible = True
End If

If Not A And B And C Then
    Control2.Visible = True
End If

If A And C Then
    Control3.Visible = True
End If

Edit: or, in this particular case where you deal with boolean properties of controls, 
Marcelo Cantos answer provides even a shorter and easier to read way to do the same 
thing.
I like this approach to this problem if he only has 3 states to worry about. If the 
number of states grow, this will become problematic. – Dave White yesterday

You have to be careful in-case you need to make sure that each control is set to False 
if their conditions are not met. Although this is not made clear from the question, I 
would think in most cases it is implied. – Akusete yesterday

@Dave White: agree. If the number of states grow, and there are no similarities, than 
yes, both my and Marcelo Cantos approaches will become problematic. But I don't think 
there is something to do with this. – MainMa yesterday

@Akusete: oh, yes, you're right. So obviously Marcelo Cantos answer IS more readable, 
since in mine, it would require to add the Else branch, making the code two times 
longer. – MainMa yesterday 1 	 

EDIT: Ack, should probably make clear that this only works because ASP.NET reloads the 
page each time and I don't store enabled state in the viewstate. Essentially the whole 
page is a big async loop. – CodexArcanum 7 hours ago
]
In the case that there are a lot of states to check against, one could always use 
bitmasks. For up to 8 conditions it might look something like:

//Bit positions:   HGFEDCBA
CONTROL_1_MASK = 0b11111000
CONTROL_2_MASK = 0b11111000
...

control1.visible = ((flags | CONTROL_1_MASK) == 251)
control2.visible = ((flags | CONTROL_2_MASK) == 254)
...

Not the most attractive or most intuitive, but it is able to handle very large amounts 
of conditionals. Note that CONTROL_1_MASK and CONTROL_2_MASK do not (and likely will 
not, in the real world) have to be the same. Also, proper programming practice would 
also be to put the constants in defines of their own. This, however, is an example 
(and a quick one at that).

Anyways, hope this helps.
I think your = should be == – Akusete yesterday

-1. @phobos: Sorry, but your solution will only work on a subset of logical conditions, 
for example you could not satisfy an XOR condition. And you will limit the number of 
operands to the word size. It is not easily readable by looking at a single line, and 
I dont see what benefit at all it will give. – Akusete yesterday

== is indeed correct. Like I said, it was a quick example. Also, I never said it would 
win any points in the readability department. The main benefit that this offers is 
that it is able to handle a lot of conditions at once. How much more readable do you 
think the other solutions would be if that number was increased from 3 to 16? Or 32? 
This could very easily be the case on a web form where the user selects from a large 
list of checkboxes (think the power search at newegg.com). No solution is perfect. 
This was just another option. – phobos51594 10 hours ago

@phobos51594: Granted that this is generally a viable option in many situations, but 
it is unequivocally the wrong solution for this particular question, since it doesn't 
handle negated conditions without additional complexity (and even lower readability). 
– Marcelo Cantos 3 hours ago

@phobos51594: Also, the CONTROL_*_MASK variables will make it very frustrating to 
anyone trying to read the code. Imagine all the page-up/page-down activity and 
eye-movement as a user tries to study the logic for 50 or 100 controls. I would omit 
the variables and just embed constants in each expression. – Marcelo Cantos 3 hours 
ago


site design / logo © 2010 stack overflow internet services, inc; user contributions 
licensed under cc-wiki with attribution required

条件の数にもよるけど、 まず関数にくくりだすのはやるし、あとは判定用のテーブル作るかなあ。 テーブル作成も自動化したいところだけど。

■_ Cython

なんかいろいろでるなあ。


Using the Cython Compiler to write fast Python code

What is Cython?

    Cython is the missing link
    between the simplicity of Python
    and the speed of C / C++ / Fortran.

What is Cython?

Cython is

    * an Open-Source project
          o http://cython.org
          o http://pypi.python.org/pypi/Cython
    * a Python compiler (almost)
          o an enhanced, optimising fork of Pyrex
    * an extended Python language for
          o writing fast Python extension modules
          o interfacing Python with C libraries

■_ π

どう書いていても丸投げっぽい。


数値解析(C言語) - Yahoo!知恵袋

C言語を始めて半年程度の初心者です。

今回は数値解析があまり良く分からないので質問しました。

以下の問の級数について、収束値との違いが±0.001%未満になる近似値と、
それを導きだすために繰り返した回数を表示するプログラムをつくりたいのですが分からないので教えていただきたいです。

お願い
for文を使用して下さい
宣言は int double 縛りで


1) (1/1x3) + (1/2x4) + (1/3x5) + (1/4x6) + ... = 3/4

2) 8{(1/1x3) + (1/5x7) + (1/9x11) + (1/13x15) + ...} = π

3) 2(2x2/1x3 x 4x4/3x5 x 6x6/5x7 x 8x8/7x9 ...) = π

4) 3(6x6/5x7 x 12x12/11x13 x 18x18/17x19 ...) = π

5) 4(1 - 1/3 + 1/5 - 1/7 + 1/9 - ...) = π 

& 5) はπ/4 = arctan(1) をテイラー展開した結果だと思うけど、 2) から 4) はなんだろう? ガウスの公式やストーマーの公式は複数の arctan(x) の組み合わせだから こんな単純な形にならないだろうし、 2) は第一項でπ超えてない? 円周率の歴史 - Wikipedia

■_ 桁が違う

シェルスクリプトの引数 | OKWave
シェルスクリプトの引数

linuxのシェルスクリプトの引数に関しての質問です。引数の数が一桁くらいならいいのですが、
200万個の引数を使うとなると、いちいち引数を手で書くわけにはいきません。引数をテキス
トから直接読み込むことはできませんか?

何でそんな数に。 なんとなく200万個の数値をごにょごにょして何かを求めるプログラムだろうかと思ったり。

■_ 本日の巡回から

2010年10月29日

■_

・やふおく
とあるサントラCDを落札。

・読んだ
ファミコンの驚くべき発想力 -限界を突破する技術に学べ- (PCポケットカルチャー)
結構知っている内容が多かったけど(当時のその筋の本も結構読んでたのよ)、 この手の本は割と好き。 まあスタックの大きさが256「バイト」とかは想像できない人も多かろう。

■_

プログラミング言語 Scala 4冊目 
736 デフォルトの名無しさん [sage] 2010/10/27(水) 23:34:16 ID: Be:
    2.8系をこれからさわり始めようと思うんだけど、IDE使わない場合の
    ビルドツールのおすすめってなにかな?

    sbtは2.8だと使えないみたいな話もあるけど・・・ 

737 デフォルトの名無しさん [sage] 2010/10/27(水) 23:38:06 ID: Be:
    『sbt?そんなビルドツールで大丈夫か?』

    『David Pollakは言っている、Mavenを使えと!』 

738 デフォルトの名無しさん [sage] 2010/10/27(水) 23:49:13 ID: Be:
    >>736
    普通に使えるから大丈夫 

739 736 [sage] 2010/10/28(木) 00:04:49 ID: Be:
    >>737
    Mavenはあの長大なpom.xmlを見るだけで敬遠しちゃうんだよなー

    >>738
    とすると使えない云々は昔の話なのか。

    ところで、sbt使って開発したとして、完成したプログラムはどうやって実行するのが普通?
    「sbt run」だとごちゃごちゃとメッセージが出力されてうっとうしいんだけど
    代替手段がよく分からない。scalaコマンドも引数指定面倒だし。

740 デフォルトの名無しさん [sage] 2010/10/28(木) 01:38:16 ID: Be:
    0 to Int.MaxValue
    ってやると空のRangeが返って来るんだけどなんでなん?バグ? 

741 デフォルトの名無しさん [sage] 2010/10/28(木) 13:56:07 ID: Be:
    ほんとだ、(0 to Int.MaxValue).lengthで-2147483648が返ってくる
    Range.scalaの74行目
    >def length = fullLength.toInt
    でオーバーフローしてるっぽい(scala2.8.1RC4) 

■_


スレ立てるまでもない質問はここで 108匹目 
85 デフォルトの名無しさん [] 2010/10/29(金) 13:38:14 ID: Be:
    外部イテレータと内部イテレータに関して疑問があります。
    wikipediaの例によると、
    pythonやphpのforeachも内部イテレータに分類されるということですが
    foreachは外からループ制御してないですか?
    rubyのブロックなら、オブジェクト自身がイテレートしているので、
    内部イテレータと言われて納得出来ますが。
    hoge.next()等を呼んで判定しながらループすることと、
    foreachなどでループすることに
    本質的な違いはないように思えます。
    このあたりどう考えればいいのでしょうか? 

86 デフォルトの名無しさん [sage] 2010/10/29(金) 13:58:03 ID: Be:
    ウィキペディアがおかしい 

87 デフォルトの名無しさん [sage] 2010/10/29(金) 14:57:34 ID: Be:
    大昔のプログラミングって、テープみたいのに穴あけてたって聞いたんですけど、
    何てググれば、そのテープの画像見れますか? 

88 デフォルトの名無しさん [sage] 2010/10/29(金) 14:59:15 ID: Be:
    テレホンカード 

89 デフォルトの名無しさん [sage] 2010/10/29(金) 14:59:20 ID: Be:
    >>87 

90 デフォルトの名無しさん [sage] 2010/10/29(金) 14:59:23 ID: Be:
    パンチカード? 

91 デフォルトの名無しさん [sage] 2010/10/29(金) 15:00:02 ID: Be:
    http://ja.wikipedia.org/wiki/%E7%B4%99%E3%83%86%E3%83%BC%E3%83%97 

92 デフォルトの名無しさん [sage] 2010/10/29(金) 15:08:25 ID: Be:
    >>91
    これのようです。
    かつて駄菓子屋で売っていたという話を聞いたので、
    どんなものか気になっていました。
    謎が解けてすっきりしました。ありがとうございます。

    >>88-90
    の皆さんもありがとうございました。
    あれ、>>90以外は煽りか。 

93 デフォルトの名無しさん [sage] 2010/10/29(金) 15:11:28 ID: Be:
    流星号は30世紀のメカなのに紙テープで会話するんだぜ。
    しかも20世紀人も紙テープを自分の目で見て読めるし。 

94 デフォルトの名無しさん [sage] 2010/10/29(金) 15:43:51 ID: Be:
    パンチカードは紙テープとは違うぞ。
    もっとコシの強い紙で、ドル紙幣と同じ大きさで、和訳すると国際事務機械という会社の象徴で、
    1枚に1行80桁だ。 

95 デフォルトの名無しさん [sage] 2010/10/29(金) 16:11:18 ID: Be:
    ドル紙幣よりは大きかったなぁ。VHSのカセットくらい。 

96 デフォルトの名無しさん [sage] 2010/10/29(金) 17:34:39 ID: Be:
    今でも研究所(光子力研究所とか)は紙テープだね
    穴→2進→ASCII文字→英文→翻訳→読み上げを
    滞りなくやるのは熟練が必要 

97 デフォルトの名無しさん [sage] 2010/10/29(金) 18:51:05 ID: Be:
    そんな場所にこそ仕訳が必要 

パンチカードというか、 同じ形式でマークシートみたいに鉛筆で塗りつぶすのを使ったことがあるけど あれどのくらいの大きさだったけか。VHSのカセットよりは小さかったような気がするんだけど。 というか今現物の新品入手できる?

■_ The Myths of Object-Orientation

神話。ですか。


The Myths of Object-Orientation | Lambda the Ultimate

The Myths of Object-Orientation

The Myths of Object-Orientation, presented by James Noble (whose work has been 
discussed here before) at ECOOP'09, is a post-Marxist analysis that examines object 
orientation from a number of angles. From the abstract:

    Object-Orientation is now over forty years old. In that time, Object-Oriented 
    programming has moved from a Scandinavian cult to a world-wide standard. In this talk 
    I'll revisit the essential principles — myths — of object-orientation, and discuss 
    their role in the evolution of languages from SIMULA to Smalltalk to C++ to Java and 
    beyond. Only by keeping the object-oriented faith can we ensure full-spectrum 
    object-oriented dominance for the next forty years in the project for a new 
    object-oriented century! 

(略)


To get you started, he offers the following examples:

                                     History     Tragedy     Farce     
    Object-orientation               Simula      Smalltalk   Java      
    Nested object languages          Simula      BETA        Scala     
    Smalltalk languages              Smalltalk   Self        Newspeak  
    Systems languages                BCPL        C           C++       
    Wirth languages                  Pascal      Modula      Oberon    
    Lisp languages                   LISP        Scheme      CommonLisp
    ML languages                     ML          O'CAML      F♯        
    Languages beginning with “C”   C           ANSI C      C++       
    C++ languages                    C++         C+@         C♯        
    C♯ languages                    C♯1.0      C♯2.0      C♯ 3.0    
    BASIC languages                  BASIC       VB          VB.net    
    Orthogonal languages             Algol-68    PL/I        Scala     
    Computer Companies               DEC         Sun         Oracle    
    Haskell                          Haskell     Haskell     Haskell   

Haskell…w

■_

(リンク先を)あとで読む


C++Next Suggests: What Does Haskell Have To Do With C++? « C++Next

Here at C++Next, we're big advocates of knowing many programming languages and many 
paradigms. Often, they intersect in interesting ways. Here is a choice post by Bartosz 
Milewski that shows the interesting overlap between C++ Template Metaprogramming and 
Functional Programming by comparing compile-time computation in C++ with Haskell, a 
purely functional programming language.

What Does Haskell Have To Do With C++?
http://bartoszmilewski.wordpress.com/2009/10/21/what-does-haskell-have-to-do-with-c/

This should be of particular interest to those who have followed David Sankel's 
series on algebraic data types in C++, and my series on embedded domain-specific 
programming languages.

Enjoy!

■_ どう書く

stack overflowから。


In Perl, how can I join elements of an array after enclosing each element in brackets? - Stack Overflow

I was trying to join elements of a Perl array.

@array=('a','b','c','d','e');
$string=join(']',@array);

will give me

$string="a]b]c]d]e";

Is there anyway I can quickly get

$string="[a][b][c][d][e]";

Another way to do it, using sprintf.

my $str = sprintf '[%s]' x @array, @array;


interesting, please explain why there's @array, @array 

First array - due to being a second operand of "x" operator - is evaluated 
in scalar context and is thus # of elements in the array. The first expression them 
becomes: "[%s]" repeated N times (the meaning of string "x" 
operator". The second @array is just a list of parameters passed to sprintf

Here are two options:

#!/usr/bin/perl

use strict;
use warnings;

my @array = 'a' .. 'e';
my $string = join('', map { "[$_]" } @array);
my $string1 = '[' . join('][', @array) . ']';

Perhaps:

{
  local $" = "][";
  my @array = qw/a b c d e/;
  print "[@array]";
}

Although you should probably just:

print "[" . join("][", @array) . "]";

Happy coding :-)

sprintf のやつはうまいなあ。@array が二回出てくるのはあれだけど。

■_ 本日の巡回から

2010年10月28日

■_

・ドラフト会議
指名されたほうも大変だなあ。

■_

C のポインターの話。回答編。

stack overflow の方はスレスト?くらったぽい。


What do people find difficult about C pointers? : programming


Speaking as someone who did Java first and then had to go pore through some C code to 
figure out file formats...

90% of the pain doesn't involve pointers as a high-level concept at all, but instead 
revolves around language choices for how pointers are represented and managed.

    * Implementation details: Like the array/pointer crossover

    * Syntax: Like the proper ordering for using the * operator in certain cases and 
      in declarations. a.b versus a->b versus a->*b, and many other examples mentioned
      in the stackoverflow responses.

    * Keeping track of variable types: Tracking what's a pointer and what's a raw 
      address and keeping it clear in your head. Is that a "real" pointer
      over there, or is that just an int that happens to have a number stored in it
      that looks like a memory address?

By the time anybody is ready to teach about pointers, they've got all that syntax 
internalized, so it seems easy to them because they're not forced to consciously 
consider all the annoying language plumbing that's getting in the way of the concepts.

Edit: Consider the following hypothetical language. It's more verbose, but I'm certain 
it would be far easier to teach people about pointers using it.

Integer foo = 1234;
Pointer p1 = Pointer.create(foo);
assert(p1.getVal() == foo);
assert(p1.getAddr() > 0);

Pointer p2 = Pointer.create(p1);
assert(p2.getVal().getVal() == foo);

Integer address = 0x5678;
Pointer p3 = Pointer.fromAddr(address);
p3.getVal(); // Retrieves whatever is at the memory address

Of course, it doesn't yet address the problem of typing or casting, or knowing that 
you have a pointer-to-pointer-to-pointer.


The problem with your hypothetical language is that your pointers hold no information 
about what they point to, effectively making the language dynamically typed.

e.g.

Integer foo=1234;
String bar="bar";
Pointer p=Pointer.create(foo); //p is pointer to Integer
assert(p.getVal()==foo);
p=Pointer.create(bar);           //p is pointer to String!
assert(p.getVal()==bar);

The return type of Pointer::getVal() depends on the last assignment. If you changed 
the syntax to e.g. Pointer<Integer> p1 then this problem goes away and your 
hypothetical language becomes entirely plausible C++. (Assuming somebody defined 
Pointer and Integer correctly.)

It also becomes extremely verbose (granted, the OP's solution was also). I think the 
OP's side comment about internalizing concepts is important. I can see the value of 
this kind of syntax in a teaching language, but once you've internalized the concepts, 
what's the point of making you type out all those extra characters? It's a trade-off, 
and I think the cost is higher than most people think. It's the reason I'm not very 
productive in Java despite it being one of the languages I know best.

    what's the point of making you type out all those extra characters?

I'm not opposed to a shorter representation, I'm just trying to emphasize that a lot 
of people say "they have problems understanding pointers" when the actual 
problem is "they have problems with the terse and arguably-inconsistent syntax 
for managing pointers".

In C/C++, the representation has to be short because once people get involved they use 
it all the dang time. If someone added raw pointers to, say, Java, then I suspect a 
middle-ground would be better because the benefit of clarity would be stronger than 
the benefit of brevity.

    It also becomes extremely verbose

not with local type inference:

var foo = 1234; // foo is an Integer
var p1 = Pointer.create(foo); // foo is a Pointer<Integer>
assert(p1.getVal() == foo);
assert(p1.getAddr() > 0);

var p2 = Pointer.create(p1); // foo is a Pointer<Pointer<Integer>>
assert(p2.getVal().getVal() == foo);

var address = 0x5678;
var p3 = Pointer.fromAddr(address); // good question, either a raw Pointer or a Pointer<bytes> I would guess
p3.getVal(); // Retrieves whatever is at the memory address


This (albeit with very different syntax) is indeed how Haskell approaches pointers.


    The problem with your hypothetical language is that your pointers hold no 
    information about what they point to, effectively making the language dynamically 
    typed.

Yeah, this bothered me as well, and the original version used similar syntax to how 
Java handles generics, but I decided to just sidestep the whole thing ("doesn't 
yet address...") because it distracts from my argument that syntax is a major 
pain-point.

You could certainly do something like this:

Pointer<Blarg> p1 = Pointer.fromObject(foo); // Exception if foo is not a Blarg type

But this case is a bit harder if you have a "hybrid" system with GC:

Pointer<Blarg> p2 = Pointer.fromAddr(0x1234,Blarg.class); 

What if that address points to a Blarg object which is already handled by the 
garbage-collection system? (What does the GC do?) Worse, what if it points to a Foog 
object instead?

Another problem (not-GC-related , and largely in terms of verbosity) is chaining.

Pointer<Pointer<Pointer<Pointer<Blarg>>>> indirectPointer = ...


    Another problem (not-GC-related , and largely in terms of verbosity) is chaining.

not much of a problem if you have local TI. And it prevents you from returning that 
kind of garbage from your functions/methods too.

    The problem with your hypothetical language is that your pointers hold no 
    information about what they point to, effectively making the language dynamically 
    typed.

I think that idea should be pounded into the heads of C students until they start 
bleeding out their ears.

このあとも続いていますが略。

■_

■_ バイトコード版 gawk

c:\home\prog\gawk-3.1.8-bt>gawk --ver
GNU Awk 3.1.8-bc-b(Oct 28 2010)
Copyright (C) 1989, 1991-2010 Free Software Foundation.

本プログラムはフリー・ソフトウエアです。Free Software Foundation 公表の
GNU General Public License(バージョン2、または、これ以後のバージョン)
に従い再配布、及び/または、変更を加えることができます。

本プログラムは、利用価値があることを期待して配布されていますが、
これは、特定目的に使用可能であること、及び、商用目的に使用できる
ことを暗示するものではなく、いかなる保証も一切ありません。
詳しくは、GNU General Public License を参照してください。

本プログラムには、GNU General Public License が添付されているはずです。
もし、本プログラムと一緒に GNU General Public License を入手しなかった
場合には、
http://www.gnu.org/licenses/ にアクセスしてください。

最初の感触よりは修正箇所多かった。 とりあえずコンパイル通すために適当にいじったところがいくつかあるので、 見直さないといけない。

パフォーマンス測定とかめんどくせー

■_

↑こういうことは好きでやってるし、別に隠すものでもないからオープンにしてるんだけど、 何かあったときに修正するのが義務のように思われるのはちとねえ。 かなり頭にきたのでアレとかアレとかアレとか消した。

2010年10月27日

■_

・欲しい
東芝、プロ野球12球団オリジナルデザインのノートPCを限定発売 | パソコン | マイコミジャーナル 東芝は、10月28日に開催されるプロ野球ドラフト会議に合わせ、12球団のオリジナルデザインを施したノートPC「dynabookドラフトスペシャルモデル」 を発売する。販売は同社の直販Webサイト「東芝ダイレクトPC by Shop 1048」のみ。各球団ごとに100台の限定販売で、10月28日18時から申し込み受付を開始する。
ベイスターズモデルは貴重になりそうだし(笑) とはいえ dynabook Qosmio T750 ドラフトスペシャルモデル ご購入ページ |東芝ダイレクトPC を見ると20万オーバーか。んー(スペックもいいけどさ)。

しかしTBSもぐだぐだだなあ。

■_ to_splat

ツッコミいただきました。


Just another Ruby porter, 2010-10-c
あれ?each_with_indexでいいような。

% irb
>> x = [*"A".."Z"].shuffle
=> ["H", "K", "T", "N", "O", "I", "J", "Z", "Y", "U", "P", "B", "R", "E", "Q", "S", "X", "L", "A", "F", "C", "M", "W", "V", "G", "D"]
>> x.each_with_index.max[1]
=> 7
>> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]"

確かに。ブロックなしの each_with_index が enumerator 返すところで何か勘違い してしまったようです(リストを取れないと max に渡せないと思ってた)。

irb(main):001:0> [*"A".."Z"]
=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
irb(main):002:0> x=[*"A".."Z"]
=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
irb(main):003:0> x
=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
irb(main):004:0> x.shuffle!
=> ["M", "C", "R", "O", "L", "T", "Q", "B", "J", "H", "S", "Z", "U", "N", "V",
"Y", "F", "D", "W", "I", "G", "A", "P", "E", "K", "X"]
irb(main):005:0> x.each_with_index
=> #>Enumerator: ["M", "C", "R", "O", "L", "T", "Q", "B", "J", "H", "S", "Z",
"U", "N", "V", "Y", "F", "D", "W", "I", "G", "A", "P", "E", "K", "X"]:each_with_index>
irb(main):006:0> x.each_with_index.max
=> ["Z", 11]
irb(main):007:0> *x.each_with_index
SyntaxError: (irb):7: syntax error, unexpected '\n', expecting '='
       from z:/xxxx/yyyy/ruby192/bin/irb.bat:20:in `>main>'
irb(main):008:0> [*x.each_with_index]
=> [["M", 0], ["C", 1], ["R", 2], ["O", 3], ["L", 4], ["T", 5], ["Q", 6], ["B",7],
["J", 8], ["H", 9], ["S", 10], ["Z", 11], ["U", 12], ["N", 13], ["V", 14], ["Y", 15],
["F", 16], ["D", 17], ["W", 18], ["I", 19], ["G", 20], ["A", 21], ["P", 22],
["E", 23], ["K", 24], ["X", 25]]
irb(main):009:0> [x.each_with_index]
=> [#>Enumerator: ["M", "C", "R", "O", "L", "T", "Q", "B", "J", "H", "S", "Z",
"U", "N", "V", "Y", "F", "D", "W", "I", "G", "A", "P", "E", "K", "X"]:each_with_index>]
irb(main):010:0>

ということで、リスト(というか Array か)そのものが欲しい場合も * をつけてやれば OK と。

このほかにもメールでコメントやアイデアいただきました。感謝。

■_ ポインター

stack overflow → reddit と話題に。

What do people find difficult about C pointers? : programming
Speaking as someone who did Java first and then had to go pore through some C code to 
figure out file formats...

90% of the pain doesn't involve pointers as a high-level concept at all, but instead 
revolves around language choices for how pointers are represented and managed.

   * Implementation details: Like the array/pointer crossover

   * Syntax: Like the proper ordering for using the * operator in certain cases and in 
     declarations. a.b versus a->b versus a->*b, and many other examples mentioned in
     the stackoverflow responses.

   * Keeping track of variable types: Tracking what's a pointer and what's a raw 
     address and keeping it clear in your head. Is that a "real" pointer
     over there, or is that just an int that happens to have a number stored in it
     that looks like a memory address?

By the time anybody is ready to teach about pointers, they've got all that syntax 
internalized, so it seems easy to them because they're not forced to consciously 
consider all the annoying language plumbing that's getting in the way of the concepts.

Edit: Consider the following hypothetical language. It's more verbose, but I'm certain 
it would be far easier to teach people about pointers using it.

Integer foo = 1234;
Pointer p1 = Pointer.create(foo);
assert(p1.getVal() == foo);
assert(p1.getAddr() > 0);

Pointer p2 = Pointer.create(p1);
assert(p2.getVal().getVal() == foo);

Integer address = 0x5678;
Pointer p3 = Pointer.fromAddr(address);
p3.getVal(); // Retrieves whatever is at the memory address

Of course, it doesn't yet address the problem of typing or casting, or knowing that 
you have a pointer-to-pointer-to-pointer.
What do people find difficult about C pointers? - Stack Overflow
From the number of questions posted here, it's clear that people have some pretty 
fundemental issues when getting their heads around pointers and pointer arithmetic.

I'm curious to know why. They've never really caused me major problems (although I 
first learned about them back in the Neolithic). In order to write better answers to 
these questions, I'd like to know what people find difficult.

So, if you're struggling with pointers, or you recently were but suddenly "got 
it", what were the aspects of pointers that caused you problems?

(I've tried to word this so that it's not argumentative or subjective. I'm genuinely 
interested in what people have problems with here)

今日はまとめている余裕がナッシング。

■_

昨日あたりから流れが速く。 しかしそんな本筋から離れたところで。

【Perl,PHP】LLバトルロワイヤル13【Ruby,Python】
44 デフォルトの名無しさん [sage] 2010/10/26(火) 23:00:49 ID: Be:
    >>26
    Pythonなら「lambda使わなくてもできるんだし、Pythonicじゃない」という理由もありそう。

    そういや、lambdaを採用したのは失敗って作者がいってなかったけ? 

45 デフォルトの名無しさん [sage] 2010/10/26(火) 23:05:00 ID: Be:
    Pythonユーザーすらまともに使わなくて、他の言語からの移行者の罠同然なlambdaを残しているPythonがPythonicなのかどうか 

46 デフォルトの名無しさん [sage] 2010/10/26(火) 23:11:13 ID: Be:
    他の言語の奴が注文付けたんだろ。知ったこっちゃない 

47 デフォルトの名無しさん [sage] 2010/10/26(火) 23:16:27 ID: Be:
    lambdaは複雑な使われ方してるから、失敗なんだろ。
    単純な使い方しかしなけりゃ便利だし害もない。

    顔をしかめて読んだり、行の真ん中読んだら初めの方を読み直したりしないと読めないコードはPythonでは嫌われる傾向にある。 

48 デフォルトの名無しさん [sage] 2010/10/26(火) 23:19:54 ID: Be:
    C++0xでλを導入しようとしてるC++にあやまれ!

    std::vector<int> someList;
    int total = 0;
    std::for_each(someList.begin(), someList.end(), [&total](int x) {
     total += x;
    });
    std::cout << total;

    こんな小汚い構文だが、こんなものでも無いよりはマシとかC++の人は
    思ってるんだぞ(たぶん) 

49 デフォルトの名無しさん [sage] 2010/10/26(火) 23:30:55 ID: Be:
    そもそも、C++はCと違って関数内で関数を定義できないし、operator() を実装した
    structを関数内で定義するとテンプレートから参照できなくてエラーになるから
    簡単なコードを渡すためだけでも離れた場所にstructを定義しないといけなかった。
    JavaもC++よりはましだけど、関数一つ渡すためにclassを定義しないといけなかった
    からクロージャや関数型変数の導入が考えられている。

    それに対して、Pythonの場合実装が1行の関数を作るのには def foo(): を
    つけるだけで良くて、コード上のオーバーヘッドが圧倒的に少ない。
    関数内で名前付き関数を作るのが十分に簡単お手軽だから、lambdaの出番は
    本当にちょっとした式だけで良い。 


そもそも、C++はCと違って関数内で関数を定義できないし …え? それってC は C でも gcc 限定じゃあ

あー、C++ 0x のλがどういうコードに落ちるのか調べてねーや。

■_ ...

Ruby 初心者スレッド Part 39
102 デフォルトの名無しさん [sage] 2010/10/26(火) 11:19:06 ID: Be:
    (1..5).to_a
    => [1, 2, 3, 4, 5]

    (1...5).to_a
    => [1, 2, 3, 4]

    ...は末尾のみを省くようですが、
    スタートも省いてくれるような範囲を作る方法無いでしょうか? 

103 デフォルトの名無しさん [sage] 2010/10/26(火) 11:30:20 ID: Be:
    左閉半開区間が一般的だから特別に書き方が用意されてただけだと思う
    それ以外の開区間とかは自力で書いてくれ

    あと、開区間と左閉右開区間の区別をドットの数で決めるのは単なる悪習で、使用しないほうがよい 

104 デフォルトの名無しさん [sage] 2010/10/26(火) 11:34:51 ID: Be:
    …このコピペ、開区間になってるな

    えー、
    「閉区間と左閉右開区間(左閉半開区間)の区別をドットで決めるのはPerlの悪習なので使うな」
    でひとつ

    Ruby 的には 2,3,4 が欲しい場合は (2..4).to_a とか 2.upto(4).each do |i| ... end とか書く
    1 と 5 の 数字 2つから 2,3,4 を作るのはたぶん悪だ 

105 デフォルトの名無しさん [sage] 2010/10/26(火) 12:00:14 ID: Be:
    irb> p 2.upto(4).to_a
    [2, 3, 4]

    ドットで悩むこともなくてわかりや…すい? 

106 デフォルトの名無しさん [sage] 2010/10/26(火) 12:21:54 ID: Be:
    >>104
    覚えた言葉をむやみやたらに使いたがる子供のようだな 

107 デフォルトの名無しさん [sage] 2010/10/26(火) 12:32:43 ID: Be:
    >>102
    普段ドット2つしか使わんから知らなかったけど
    これ酷い仕様だな 

108 デフォルトの名無しさん [sage] 2010/10/26(火) 12:48:09 ID: Be:
    汚かったらなんでも Perl 由来と言ってしまうのもどうかと

    >>107
    安心しろ、3連ドットを使用してる人はまずいない
    俺は>>102で今年始めて見た 

109 デフォルトの名無しさん [sage] 2010/10/26(火) 13:11:19 ID: Be:
    整数でなく小数含んだ範囲での比較をwhenでしたいときに
    端点の含み方を自由に設定できる区間オブジェクトが標準であったら便利だろうなあ
    と思うことが2年に1回くらいある 

110 デフォルトの名無しさん [sage] 2010/10/26(火) 13:28:37 ID: Be:
    Hashie::Mash 型になってしまっているハッシュっぽいオブジェクトをHash型に戻すにはどうしたらいいでしょうか?

    require "rubygems"
    require "hashie"
    m = Hashie::Mash.new({:foo => {:bar => {:baz => {}}}})
    m.to_hash #=> <#Hashie::Mash foo=<#Hashie::Mash bar=<#Hashie::Mash baz=<#Hashie::Mash>>>>
    #=> {"foo" => {"bar" => {"baz" => {}}}} が欲しい 

111 デフォルトの名無しさん [sage] 2010/10/26(火) 13:42:27 ID: Be:
    全く使ったこともないが、Google で検索してマニュアルとソース読む限りでは
    {}.update(m) で標準の Hash が返るように見える 

112 デフォルトの名無しさん [sage] 2010/10/26(火) 13:46:25 ID: Be:
    あー返らんな

    Hasie を 0.4.0 にアップデートして to_hash 使え、で FA 

113 デフォルトの名無しさん [sage] 2010/10/26(火) 14:00:26 ID: Be:
    >>112
    ありがとうございます
    最新(0.4.0)にしたらto_hashで行けました! 

114 デフォルトの名無しさん [sage] 2010/10/26(火) 17:02:19 ID: Be:
    たまに、無限数列やカウンター付き無限ループがほしいことがあるので
    step,upto,downtoのデフォルト値を無限にしてほしいと思う

    不具合?
    stepは無引数&ブロックなしでもEnumeratorが返ってくるけど
    実際には使えない
    使うときになって「引数が足りん」って怒られる

115 デフォルトの名無しさん [sage] 2010/10/26(火) 17:08:11 ID: Be:
    1.upto(1.0/0){|x| p x} 

116 デフォルトの名無しさん [sage] 2010/10/26(火) 17:12:08 ID: Be:
    下記のようなファイルをglobで取得すると、後者のような並び順になってしまいますが、
    これを前者のような並び順で取得or後からソートする良い方法はありますか?
    このままリネームを掛けてしまうと、意図しない並び順の昇順に変わってしまいます。
    かといって正規表現でやるにはややこしそうっす

    # 希望する並び順
    hoge-1_fuga.jpg
    hoge-3_fuga.jpg
    hoge-8_fuga.jpg
    hoge-12_fuga.jpg
    hoge-54_fuga.jpg

    Dir.glob('*.jpg')

    # globで取得した時の並び順
    hoge-1_fuga.jpg
    hoge-12_fuga.jpg
    hoge-3_fuga.jpg
    hoge-54_fuga.jpg
    hoge-8_fuga.jpg 

117 デフォルトの名無しさん [sage] 2010/10/26(火) 17:17:26 ID: Be:
    >>116
    「自動」でやるほうが怖いだろそれ
    ということで自力でファイル名から数値を取り出してソートしれ

    Dir.glob('*.jpg').sort_by{|s| s.scan(/\d+/)[0].to_i}

120 116 [sage] 2010/10/26(火) 19:56:46 ID: Be:
    >>117
    レス遅くなってすみません
    sort_byってそんな風に使うんですね、目から鱗
    希望通りの動作になりました
    ありがとう

121 デフォルトの名無しさん [sage] 2010/10/26(火) 20:25:49 ID: Be:
    >>115
    いまだとそれしかできないね
    1.9.2からは 1.upto(Float::INFINITY) もできるようになったけど

    loopのカウンター付きがほしいなぁと
    def counter( start=0, delta=1 )
    なんてのを作ったら
    なんか、stepとほとんどいっしょじゃね?とか思ったものでして
    Enumerable#cycleなんて無限Enumeratorを返すものがあるので
    無限uptoとかも少しはありなんじゃないかと思うのだが
    loopと違ってメソッド名に無限って感じがしないので、採用されないだろうなぁ

122 デフォルトの名無しさん [sage] 2010/10/26(火) 20:28:13 ID: Be:
    >>116
    数字混じり文字列ソート - どう書く?org
    http://ja.doukaku.org/295/

123 デフォルトの名無しさん [sage] 2010/10/26(火) 20:34:23 ID: Be:
    >>121
    Rubyによくあるいわゆる「あれば便利だとは思うが、いい名前も思いつかないし手で書いて」という奴だな 


116 が言うような並べ方って Windows の Explorer あたりがやってなかったっけ?

1 と 5 の 数字 2つから 2,3,4 を作るのはたぶん悪だ neko operator の立場が…

んで、Perl の ... は元々は /MARK/ ... /MAKR/ という記述をしたときに MARK ではさまれた行を処理するか、 左辺と右辺が同時に真になって一行も処理されない .. での動作をどうにかするために 導入されたのではなかったっけか?

      Range Operators

      Binary ".." is the range operator, which is really two different
      operators depending on the context.  In list context, it returns a list
      of values counting (up by ones) from the left value to the right value.
      If the left value is greater than the right value then it returns the
      empty list.  The range operator is useful for writing "foreach (1..10)"
      loops and for doing slice operations on arrays. In the current
      implementation, no temporary array is created when the range operator
      is used as the expression in "foreach" loops, but older versions of
      Perl might burn a lot of memory when you write something like this:

          for (1 .. 1_000_000) {
              # code
          }

      The range operator also works on strings, using the magical auto-
      increment, see below.

      In scalar context, ".." returns a boolean value.  The operator is
      bistable, like a flip-flop, and emulates the line-range (comma)
      operator of sed, awk, and various editors.  Each ".." operator
      maintains its own boolean state.  It is false as long as its left
      operand is false.  Once the left operand is true, the range operator
      stays true until the right operand is true, AFTER which the range
      operator becomes false again.  It doesn't become false till the next
      time the range operator is evaluated.  It can test the right operand
      and become false on the same evaluation it became true (as in awk), but
      it still returns true once.  If you don't want it to test the right
      operand till the next evaluation, as in sed, just use three dots
      ("...") instead of two.  In all other regards, "..." behaves just like
      ".." does.


  

perrlop.pod から引っ張ってきたものですが、 日本語に翻訳されたものもあるはずです。

■_

軍オタが好きな名言、名ゼリフ 7 
40 名無し三等兵 [sage] 2010/10/27(水) 09:47:04 ID:??? Be:
    「艦というのは走らせないで港に繋いでおくだけでも1日ごとにそれ相応の金がかかるよ。
    国の懐を考えないで艦数だけ揃えようなんて無理な相談さ。それこそスッカラカンになって国が滅びちまうよ。」

    勝海舟 

243 名無し三等兵 [sage] 2010/10/27(水) 23:17:08 ID:??? Be:
    >>240
    八八艦隊を計画した連中はこの言葉とその意味を知らなかったんだろうな 

244 名無し三等兵 [sage] 2010/10/27(水) 23:20:10 ID:??? Be:
    ストラトギーを知らずにタクチーキを語る者、遂には国を誤る

    大村益次郎 

維持するのに掛かる手間や費用を考えない手合いはそこかしこにいますな。

■_ 本日の巡回から

2010年10月26日

■_

・休刊
牛島が監督やってたときまでは間違いなく毎月買ってたはずなんだけど、 このところ買ってなかったなあ。

横浜ベイスターズ - ニュース - 「月刊ベイスターズ」休刊のお知らせ
「月刊ベイスターズ」休刊のお知らせ
株式会社横浜ベイスターズ発行のオフィシャルファンマガジン「月刊ベイスターズ」は、1979年
11月の創刊以来、『チーム・選手とファンを結ぶ懸け橋』として、多くの横浜ベイスターズファ
ンの皆様にご愛読いただいてまいりました。

しかしながら、情報を取り巻く環境の変化や部数の減少などのため、誠に勝手ながら、2010年11
月25日発売の同年12月号をもって、休刊させていただくこととなりました。

(略)

最初に買ったときはまだ「月刊ホエールズ」だったんだよなあ。

■_ 30 lessons learned in computing over the last ten years

異論もあるでしょうがひとつの意見ということで。


makin' it work: musings of the math gladiator: 30 lessons learned in computing over the last ten years

makin' it work: musings of the math gladiator

Saturday, October 23, 2010

30 lessons learned in computing over the last ten years

In looking at the last ten years of my life, I realized that I've learned many things. 
Mostly about how wrong I've been, and how stupid I've been. So, having looked at the 
80+ projects I've worked on in the past ten years (excluding coursework, current 
start-ups, and graduate studies), I have reduced what I learned to a blog post. (In 
bullet format no-less).

    * If you plan to write a programming language, then commit to every aspect. It is 
      one thing to translate between languages; it is an entirely different effort to 
      provide good error/warning messages, good developer tools, and to document an
      entirely different way of thinking. In writing Kira, I invented a whole new way
      to think about how to code, and while much of it was neat to me; some of it was
      very wrong and kinda stupid.

    * Geometric computing is annoying, always use doubles. Never be clever with floats; 
      floats will always let you down. Actually, never use floats.

    * Lisp is the ultimate way to think, but don't expect everyone to agree with you. 
      Actually, most people will look at you as if you are crazy. The few that listen
      will revere you as a god that has opened their eyes to computing.

    * If you plan on writing yet another Object Relational Mapper, then only handle 
      row writing/transactions. Anything else will be wrong in the long term.

    * If you want to provide students with a computer algebra system, then make sure 
      they can input math equations into a computer first.

    * Don't build an IDE. Learn to use terminal and some text editor. If you need an 
      IDE, then you are doing something wrong. When you master the terminal, the window 
      environment will be cluttered with terminals and very few “applications”

    * Learn UNIX, they had 99% of computing right. Your better way is most likely 
      wrong at some level.

    * Avoid XML, use JSON. Usage of text formats is a boon to expressiveness and the 
      fact that computing has gotten cheap. Only use binary based serialization for games.

    * If you plan to build an ORM to manage and upgrade your database, then never ever 
      delete columns; please rename them.

    * Never delete anything, mv it to /tmp

    * Never wait for money to do anything; there is always a place to start.

    * Optimize complexity after people use a feature and complain. Once they complain, 
      you have a real complexity problem. I've had O(n^3) algorithms in products for
      years, and it didn't matter because what they powered were not used.

    * Text games can be fun too; if you want to write an MMO, then make a MUD. You can 
      get users, and then you can use that to get traction to build something bigger. 
      Develop rules and a culture.

    * Don't worry about concurrency in your database until you have real liabilities 
      issues.

    * Backup every day at the minimum, and test restores every week. If your restore 
      takes more than 5 minutes of your time (as in time using the keyboard), then you
      did something wrong. If you can't backup, then you have real issues and enough
      money to solve them with massive amounts of replicationg.

    * Never write an IDE; it will always be a mistake. However, if you do make it, 
      then realize most people don't know that silver bullets don't exist. You can
      easily sell it if you find the right sucker; this will of course become a part
      of your shame that you must own up when you die.

    * JavaScript is now the required programming language for the web; get used to it. 
      JavaScript is also going to get crazy fast once people figure out how to do need
      based type inference. Once JavaScript is uber, learn to appreciate the way it
      works rather than map your way of thinking to it.

    * Master state machines, and you will master custom controls. Learn enough about 
      finite state machines to be able to draw pictures and reason about how events
      coming into the machine affect the state.

    * There is more value in learning to work in and around piles of crappy code than 
      learning to make beautiful code; all code turns into shit given enough time and
      hands.

    * If you want to build a spreadsheet program, then figure out how to extend Excel 
      because Excel is god of the spreadsheet market.

    * Write five games before writing a game engine.

    * Debugging statistical applications is surprisingly difficult, but you can debug 
      it by using R and checking the results with statistics.

    * Don't design the uber algorithm to power a product; instead figure out how to 
      make a simple algorithm and then hire ten people to make the product uber.

    * Learn to love Source Control. Backups are not enough. As you age, you will 
      appreciate it more.

    * Communicate to people more often, don't stay in the cave expecting people will 
      know your genius. At some point in your life, you will need to start selling
      your genius.

    * Realizing that every product that exists solves some kind of problem. Rather 
      than dismissing the product, find out more about the problem the product is
      trying to solve. Life is easier when you can look at new technology and find
      out that it does solve.

    * Learn to be sold. Keep the business card of a good salesman. Sometimes, they 
      actually have good products, but they are always useful.

    * You can make developers do anything you want. Normal users on the other hand are 
      not so masochistic.

    * If you are debating between Build or Buy, then you should Build. You are 
      debating which means you don't know enough about it to make a sound decision.
      When you build, at least you will get something working before you find what to
      Buy and how to design with it.

    * You will pay dearly for being prickly; learn to be goo and flexible to the 
      changing world. Be water, my friend.

If you got to this point, then good job. The biggest thing I have learned (and 
probably the most painful) in the past ten years is how to deal with my ego. Ego is 
supposedly your best friend, but it also your worst enemy. Ego is a powerful force, 
but it isn't the right force to use. While I admit that I've used ego to push myself 
in very positive direction, I think I would have been better off if I didn't as the 
side effects trump the pros.

Posted by MathGladiator at 10:07 PM

■_ 7 programming languages on the rise

上り調子の言語七つというところ? 詳しい説明は原文を当たってくださいませ♪


7 programming languages on the rise

7 programming languages on the rise

By Peter Wayner

Created 2010-10-25 03:00AM

(略)

While the following seven niche languages offer features that can't be found in the 
dominant languages, many rely on the dominant languages to exist. Some run on top of 
the Java Virtual Machine, essentially taking advantage of the Java team's engineering. 
And when Microsoft built C#, it explicitly aimed to make the virtual machine open to 
other languages. That detail may help make deployment easier, but it doesn't matter 
much to the programmer at creation time.

Either way, these seven languages are quickly gaining converts in the enterprise. 
Perhaps it's time to start investigating their merits.

Programming languages on the rise: Python

There seems to be two sorts of people who love Python : those who hate brackets, 
and scientists. The former helped create the language by building a version of Perl 
that is easier to read and not as chock-full of opening and closing brackets as a C 
descendant.
Python Love な人たちには二種類ある: ブラケットが嫌いな人、それと科学者。

(略)


Programming languages on the rise: Ruby

Some may argue that Ruby and Python are hardly "niche" languages, but the 
truth is, from an enterprise perspective, they remain promising tools all too often 
pushed to the margin. That said, Ruby, or more precisely the combination of Ruby with 
the Rails framework known as Ruby on Rails, is becoming increasingly popular for 
prototyping. Its entrance into the enterprise came on the heels of the Web 2.0 
explosion, wherein many websites began as experiments in Ruby. 37signals  -- one 
of Ruby's many proponents -- actually uses Ruby to deploy code.

(略)


Programming languages on the rise: Matlab

Built for mathematicians to solve systems of linear equations, Matlab has found rising 
interest in the enterprise, thanks to the large volumes of data today's organizations 
need to analyze.
(略)

Programming languages on the rise: JavaScript

JavaScript is not an obscure language by any means. If anything, it may be the most 
compiled language on Earth, if only because every browser downloads the code and 
recompiles it every time someone loads a Web page. Despite this fact and the 
increasing dominance of AJAX-savvy Web pages, JavaScript is rarely thought of as a 
language that runs on the big iron.

(略)

Programming languages on the rise: R

Statistical analysis is being increasingly done in R these days, although some purists 
call the language S, its original name. Tibco sells a commercial version called S-Plus.

統計解析は R で行われることが増えてきている。一部にはこの言語を元の名前である
S と呼ぶ purists もいる・

(略)

Programming languages on the rise: Cobol

It may not be fair to call Cobol a niche language as it was once the dominant language 
in the enterprise. Grace Murray Hopper, famous for finding the first bug in the early 
mainframes, helped create the language in 1959 and it's been enhanced hundreds of 
times since. Cobol jockeys today get to play with object-oriented extensions, 
self-modifying code, and practically every other gimmick.

(略)

Programming languages on the rise: CUDA extensions

As libraries for programming video cards to do massively parallel jobs, CUDA 
extensions are not technically a language; they're just extensions to C. Still, some 
enterprise programmers are beginning to unlock the massively parallel architectures 
normally devoted to rendering realistic blood splattering in alternative game worlds. 
Moreover, recoding loops for massive parallelism means rethinking many of the idioms 
from basic C or C++ programming, making CUDA extensions all the more valuable.

(略)

■_

reddit から。この質問に対する回答はまた。


project ideas for a newbie to become better at programming? - Stack Overflow

Sorry if a question like this was posted before, i searched but couldnt find anything.

I just finished college and im unemployed however im taking a year out to improve and 
become confident in my programming. My goal is to have a job by June of next year. 
I've learnt OOP with Java in college and im just starting to learn PHP with OOP. The 
plan is to take on a project at the beginning of every month and get it finished by 
the end of the month so i have something to show a potential employer. For November I 
have already started a bartering website with PHP and December i will make a video 
website with Java/JSP and installed on a video streaming server. Now to just fill up 
Jan-May. Any ideas? What projects did you do to help improve your knowledge? Even if 
its really difficult, i dont mind failing to get it done - it'll still give me 
something to talk about at an interview.

Thanks in advance :)

■_ 本日の巡回から

■_ だむえー

GUNDAM A (ガンダムエース) 2010年 12月号 [雑誌]
うーむ、この先の展開が今ひとつ読めない(大筋ではTV、映画と同じだろうけど)なあ>おりじん

2010年10月25日

■_

・センゴク外伝桶狭間戦記
義元さま~~っ

んー、J9 か Air か。

■_ list comprehension

stack overflow でこういう質問が出てまして。

How to find positions of the list maximum? - Stack Overflow
I have a list:

a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50,
            35, 41, 49, 37, 19, 40, 41, 31]

max element is 55 (two elements on position 9 and 12)

I need to find on which position the maximum elements are situated. Please, help.

寄せられた回答のスクリプト(一部)。

>>> m = max(a)
>>> [i for i, j in enumerate(a) if j == m]
[9, 12]

  

a.index(max(a))

  

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50, 35, 41, 49, 37, 19, 40, 41, 31]
>>> for i, x in enumerate(a):
...     d[x].append(i)
... 
>>> k = max(d.keys())
>>> print k, d[k]
55 [9, 12]

Later: for the satisfaction of @SilentGhost

>>> from itertools import takewhile
>>> import heapq
>>> 
>>> def popper(heap):
...     while heap:
...         yield heapq.heappop(heap)
... 
>>> a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50, 35, 41, 49, 37, 19, 40, 41, 31]
>>> h = [(-x, i) for i, x in enumerate(a)]
>>> heapq.heapify(h)
>>> 
>>> largest = heapq.heappop(h)
>>> indexes = [largest[1]] + [x[1] for x in takewhile(lambda large: large[0] == largest[0], popper(h))]
>>> print -largest[0], indexes
55 [9, 12]

  

a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50,
             35, 41, 49, 37, 19, 40, 41, 31]

def maxelements(seq):
    ''' Return list of position(s) of largest element '''
    max_indices = []
    if len(seq):
        max_val = seq[0]
        for i,val in ((i,val) for i,val in enumerate(seq) if val >= max_val):
            if val == max_val:
                max_indices.append(i)
            else:
                max_val = val
                max_indices = [i]

    return max_indices

  

んで、

C:\>irb
irb(main):001:0> RUBY_VERSION
=> "1.8.7"
irb(main):002:0> x=[*"A".."Z"]
=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
irb(main):003:0> x=[*"A".."Z"].shuffle
=> ["L", "S", "P", "T", "A", "X", "H", "M", "I", "E", "B", "J", "G", "Y", "O", "U", "Q", "R", "K", "F", "C", "N", "Z", "D", "W", "V"]
irb(main):004:0> x
=> ["L", "S", "P", "T", "A", "X", "H", "M", "I", "E", "B", "J", "G", "Y", "O", "U", "Q", "R", "K", "F", "C", "N", "Z", "D", "W", "V"]
irb(main):007:0> x.zip([1..x.size])
=> [["L", 1..26], ["S", nil], ["P", nil], ["T", nil], ["A", nil], ["X", nil], ["H", nil], ["M", nil], ["I", nil], ["E", nil], ["B", nil], ["J", nil], ["G", nil]
, ["Y", nil], ["O", nil], ["U", nil], ["Q", nil], ["R", nil], ["K", nil], ["F",nil], ["C", nil], ["N", nil], ["Z", nil], ["D", nil], ["W", nil], ["V", nil]]
irb(main):008:0> x.zip((1..x.size).to_a)
=> [["L", 1], ["S", 2], ["P", 3], ["T", 4], ["A", 5], ["X", 6], ["H", 7], ["M",8], ["I", 9], ["E", 10], ["B", 11], ["J", 12], ["G", 13], ["Y", 14], ["O", 15],
["U", 16], ["Q", 17], ["R", 18], ["K", 19], ["F", 20], ["C", 21], ["N", 22], ["Z", 23], ["D", 24], ["W", 25], ["V", 26]]
irb(main):009:0> x.zip((1..x.size).to_a).max
=> ["Z", 23]
irb(main):010:0> x.zip((1..x.size).to_a).max[1]
=> 23
irb(main):011:0>

なんてのを考えたりしたのですが、この、 1から順に増えていく数値と zip する部分が気に入らない。 x,size なんてのがでてるし。

irb(main):011:0> x
=> ["L", "S", "P", "T", "A", "X", "H", "M", "I", "E", "B", "J", "G", "Y", "O", "U", "Q", "R", "K", "F", "C", "N", "Z", "D", "W", "V"]
irb(main):013:0> x.inject([]){|r, i| r<<[i, r.size]}
=> [["L", 0], ["S", 1], ["P", 2], ["T", 3], ["A", 4], ["X", 5], ["H", 6], ["M",7], ["I", 8], ["E", 9], ["B", 10], ["J", 11], ["G", 12], ["Y", 13], ["O", 14],
["U", 15], ["Q", 16], ["R", 17], ["K", 18], ["F", 19], ["C", 20], ["N", 21], ["Z", 22], ["D", 23], ["W", 24], ["V", 25]]
irb(main):014:0>

というのも考えたのですがやはり気に入らない。 [i for i, j in enumerate(a) if j == m] の enumerate(a) のようにビシッっといけないもんでしょうか。 each_with_index は index は具合がいいんだけど戻り値 self だし、 ブロックの中で変数に追加していくのはその変数を外側で作っておく必要があるのでそれは却下と。

■_

もうひとつ stack overflow

Parameter passing modes - Stack Overflow

Hi,

Is there a language which supports call by value, call by reference, call by 
result/value and call by name?

I know about Ada supporting everything except call by name. Java, C, C++ does not 
support all of the above. Algol supports call by name and value. Is there any language 
which does??

Please help.

Thank you.

ちょうどいうかなんというか(笑)

■_ t?csh

そういやこの仕様なんでなんだろ。


tcshでの改行の処理について教えてください。 | OKWave

tcshでawkを使っているのですが、

%awk 'BEGIN{n=0}\
{n++}\
END{print n}'

というようにしか入力できません。

shでは、普通に
awk 'BEGIN{n=0}
{n++}
END {print n}'

でできますよね。
コマンドに渡すコマンド列の扱いが異なったのはどのような理由なのでしょうか?
これを回避するよい方法があれば教えてください。

質問者が選んだベストアンサー

shとtcshですから、扱いが変わっても仕方ないですね。回避方法はありません。

補足

むしろ理由がしりたいのですが、どうしてshとtcshで「仕様」がかわったのでしょうか?
スクリプトファイルを使うことが基本になったから、端末ダイレクトで使うことがなくなったとか
そのような理由でしょうか?

■_ Fortran90 すげー

大学時代やっていた(やらされていた)のは 77 なので 90 以降はほとんど知りません ○| ̄|_


fortran90 関数に添字をつけることはできますか? | OKWave

プログラミング初心者です。fortranで関数を使うときに、添字をつけてその添字を変化させる
ことで、doループなどで異なる関数を順番に呼び出したいのですが、(関数f1,f2,f3,...観たい
に)そういうことは可能ですか。どうやればできるのか教えてください。


添え字を関数名の一部にしたいって事ですか?
そう言う意味ならできないです。
IF文で添え字が1ならF1,2ならF2とか書くしかないです。

やりたいことは
http://jujuohoh.hp.infoseek.co.jp/tips/f90/function_pointer.html
ここに書いてあるようなことだろうか?

気になったのでリンク先を見てみると


Fortran 90 骨の髄まで 8-14 関数ポインタ
8-14. 関数ポインタ
仮引数での関数ポインタ

Fortran 90では関数ポインタがありません。

いや、ないというのは言い過ぎですね。
本当に正確に言うとあります。
仮引数がEXTERNAL属性だと、その引数は関数ポインタと見なされます。

integer function bar()
  implicit none

  bar = 1
end 

integer function foo(baz)
  implicit none
  integer, external :: baz !引数が関数であることを示す

  foo = baz() 
end

program function_pointer
  implicit none
  integer, external :: foo, bar

  print *, foo(bar) !=> 1
end program

しかし、この関数ポインタは引数としてしかとれません。
この変数に対して関数そのものを代入することはできないのです。

(略)

しかし、Fortranにおいて、似たことすら全くできないというわけでもありません。

module UFunctionPointer
  implicit none

  private
  public foo, set_foo

  integer :: m_foo_pointer = 1 ! 関数ポインタの代わり

contains
  !関数ポインタをセットする
  subroutine set_foo(kind)
    integer, intent(in) :: kind

    m_foo_pointer = kind
  end subroutine

  !関数ポインタに指される可能性のある関数1
  integer function foo1(x)
    integer, intent(in) :: x

    foo1 = x 
  end function

  !関数ポインタに指される可能性のある関数2
  integer function foo2(x) 
    integer, intent(in) :: x

    foo2 = 2 * x 
  end function

  !関数ポインタに指される可能性のある関数3
  integer function foo3(x)
    integer, intent(in) :: x

    foo3 = 3 * x 
  end function

  !関数ポインタの値にしたがって3つの関数のどれかを呼び出す
  integer function foo(x)
    integer, intent(in) :: x

    select case(m_foo_pointer) 
      case(1)
        foo = foo1(x)
      case(2)
        foo = foo2(x)
      case(3)
        foo = foo3(x)
      case default
        foo = 0
    end select
  end function
end module

program function_pointer
  use UFunctionPointer
  implicit none

  call set_foo(2) ! foo =>foo2
  print *, foo(3) ! foo2(3) => 6
end program


おー。

■_ GNU is Not UNIX

いまさら言うかこれを。問いう気もしますが。


GNU is not Unix: How the GNU Project has gone astray | Linux and Open Source | TechRepublic.com

In 1969, a small group of developers at Bell Labs created a new operating system whose 
descendants have become one of the most widely used OS families in the world. That 
operating system was Unix, which ultimately became the technological basis for the 
Internet. Because of a consent decree in an antitrust case, AT&T was prohibited 
by law from engaging in the computer business. In the 1970s, AT&T basically gave 
Unix to academic institutions for free.
(略)

Doug McIlroy is an engineer, mathematician, and programmer whose contributions to the 
development of Unix as we know it are so widespread and fundamental to the Unix 
experience that he can reasonably be regarded as one of the founders of the Unix 
operating system tradition. He actually invented the Unix pipeline:

ls -l | grep Sep

That vertical bar symbol is called the “pipe” character in the context of the Unix 
command line. It provides an incredibly elegant, simple way to pass data between 
command line tools. That is what he invented. In this case, it sends the output of an 
ls -l command (long listing of directory contents) to the grep Sep command (filters 
out everything that does not contain “Sep”, the indicator for the month September in 
ls -l output). You could easily connect other commands into the pipeline:

ls -l |grep Sep | sort | less

It was probably Doug McIlroy who first articulated a Unix philosophy, and his 
explanation is generally accepted as the definition of the Unix philosophy:

    Write programs that do one thing and do it well. Write programs to work together. 
    Write programs to handle text streams, because that is a universal interface.

The first sentence of that is by far the most often quoted. By contrast, tools like 
GNU Emacs, GNU grep, and GNU Info violate that principle — that tools should do one 
thing and do it well — many times over without breaking a sweat. While the guys at 
cat-v.org complain about Berkeley's cat utility, rightly pointing out that command 
line options like -v (which visibly prints representations of normally non-printing 
characters) are not part of cat's actual primary use: concatenating the contents of 
files. The Berkeley version of cat used on FreeBSD has seven options, at least six of 
which do not serve the core purpose of cat. The GNU version, however, offers twelve 
options, according to the manpage. Of course, maybe there are more that are only 
documented in the Info page for it. That sort of hidden documentation problem is 
common with GNU tools.

GNU tools abandoned any meaningful sense of the Unix philosophy quite thoroughly, a 
long time ago. Maybe it really is for the best that someone else, namely Linus 
Torvalds, deflected the early development of a GNU operating system by providing a 
kernel outside of the GNU Project's direct control to be used with those tools, 
because the Linux community's desire for a free Unix-like system that imitates much 
of the SysV branch of the extended Unix family has probably served to retard the 
growth of the contrary GNU philosophy, which would probably have run quite egregiously 
out of control if a complete GNU OS were released at about the same time.

The GNU Project is aptly named. GNU means “GNU's Not Unix”. If what you want is 
Unix, look elsewhere.

Get IT tips, news, and reviews delivered directly to your inbox by subscribing to 
TechRepublic's free newsletters.

GNU ツールはオプション増やしすぎといってもねえ。

■_

烏賊、読んでいる時間がなっしんぐ

Why Dijkstra was wrong about traditional BASIC "mutilating the mind beyond recovery" : programming
http://www.reddit.com/r/programming/comments/dtwvi/why_dijkstra_was_wrong_about_traditional_basic/
http://www.basic256.org/whybasic

10 Rules for how to write cross-platform code
http://www.reddit.com/r/programming/comments/dvauc/10_rules_for_how_to_write_crossplatform_code/
http://blog.backblaze.com/2008/12/15/10-rules-for-how-to-write-cross-platform-code/

Implementing Actors on the JVM
http://www.reddit.com/r/programming/comments/dvsuz/implementing_actors_on_the_jvm/
http://whiley.org/2010/10/25/implementing-actors-on-the-jvm/

Quantification in types
http://www.reddit.com/r/programming/comments/dvpm4/quantification_in_types/
http://mainisusuallyafunction.blogspot.com/2010/10/quantification-in-haskell.html

Thinking of your software as a butler is difficult but important
http://www.reddit.com/r/programming/comments/dvmgp/thinking_of_your_software_as_a_butler_is/
http://blog.garlicsim.org/post/1388741380/thinking-of-your-software-as-a-butler-is-difficult-but

30 lessons learned in computing over the last ten years
http://www.reddit.com/r/programming/comments/dvo5v/30_lessons_learned_in_computing_over_the_last_ten/
http://blog.mathgladiator.com/2010/10/30-lessons-learned-in-computing-over.html

2010年10月24日

■_

O'Reilly Village/オラの村 - Perlの父、ラリー・ウォールさんのサイン会は大盛況でした で Larry さんがサインしているガシャポンの機械ですがこれは三代目のものだそうです。 初代はまつもとさんがサインしていて、二代目は Martin Fowler だったかな? んで、Tim O'reily からサインを貰えないか狙っているそうですw どこかに初代と二代目(初号期と二号機)のサイン入り状態の写真ないかな。

・ゼッケン
「ゼッケン」が「ナンバーカード」と呼ばれるようになったのはいつ頃からで なぜ変わったんでしょうか。って前にもどこかで訊いたことがあるようなきがする。

・昼間の電話番号
とあるサイトで会員登録しようとしましたならば。 住所やらと一緒に「昼間連絡がつく電話番号」という欄が。 それ無理(笑) 携帯電話でも仕事中(昼休みとか限定とは限らんですよね→昼間) に掛けられたって出られるとは限らないと思うんだけど、一般的には違うんだろうか。

■_ 本日の巡回から

■_ call by

毎度おなじみの、と言いたいところですが今回は結構熱く燃え上がったような。

Pythonのお勉強 Part39
590 デフォルトの名無しさん [sage] 2010/10/23(土) 03:35:19 ID: Be:
    ネットより本派なのでみんなのパイソンを入門書として買おうかと思ってるんですが良書と言えそうですか? 

592 デフォルトの名無しさん [sage] 2010/10/23(土) 04:03:04 ID: Be:
    >>590
    Webだけで十分だよ

    注意すべき点は・・・
    ・代入は値のコピーでなく参照するためのラベルを付ける行為
    ・クラスのアトリビュートとミュータブルなオブジェクトの関係

    この2点に気をつければ他の言語を理解できる人が躓く事はないと思う 

594 デフォルトの名無しさん [sage] 2010/10/23(土) 05:07:54 ID: Be:
    >>592
    注意すべき点の一点目は実は全部ポインタで扱ってるってことですか?C的な意味で 

595 デフォルトの名無しさん [sage] 2010/10/23(土) 06:28:12 ID: Be:
    >>593
    具体的に

    >>594
    Pythonはいろんなもの(文字列や数値やクラスのオブジェクトだけじゃなく、
    クラス、関数、モジュールも)がオブジェクトで、変数はオブジェクトへの参照を
    格納してる。
    a = [0]
    b = a
    a[0] = 1
    print b # [1]
    print a is b # True aとbは同一のオブジェクトを参照している
    c = [1]
    print a == c # True aとcは同じ値
    print a is c # False aとcは別のオブジェクト
    a[0] = 2
    print c # [1]

    この挙動はJavaの非プリミティブ型と同じなので、Javaの人であれば「プリミティブ型が
    無いJavaの変数」と言えば理解が早いと思う。
    Javaに比べると、 equals() が == に、 == が is になった。 

596 デフォルトの名無しさん [sage] 2010/10/23(土) 06:43:15 ID: Be:
    >>595
    なるほど、詳しい説明ありがとうございます
    はじめのほうで説明欲しい事実ですね

598 デフォルトの名無しさん [sage] 2010/10/23(土) 07:39:00 ID: Be:
    >>595

    java
        System.out.println(1 == 1.0); // true
        Integer i = new Integer(1);
        Float f = new Float(1.0);
        System.out.println(i.equals(f)); // false

    python
    >>> 1 is 1.0
    False
    >>> 1 == 1.0
    True

599 デフォルトの名無しさん [sage] 2010/10/23(土) 07:49:36 ID: Be:
    >>598
    だから、「非プリミティブ型」の == や is だって。 1 や 1.0 はプリミティブ型だから違う。

    == が同一性チェックで、 equals が同値チェックっていう意味で、それぞれPythonの
    isと==だと言った。
    FlaotとIntegerで1と1.0を同値として扱うか扱わないかはまた別の問題。

    結果だけ見ないで、意味を考えて。 

600 デフォルトの名無しさん [sage] 2010/10/23(土) 08:10:22 ID: Be:
        Integer i = new Integer(1);
        Float f = new Float(1.0);
        System.out.println(i == f); // コンパイルエラー

601 デフォルトの名無しさん [sage] 2010/10/23(土) 08:13:47 ID: Be:
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j); // false
        System.out.println(i.equals(j)); // true

    >>> 1 == 1
    True
    >>> i = 1
    >>> j = 1
    >>> i is j
    True
    >>> i == j
    True

603 デフォルトの名無しさん [sage] 2010/10/23(土) 09:17:56 ID: Be:
    None以外のimmutable型をisで比較するとか、ソース読まずに実装を探りたい以外に用途が分からない。 

604 デフォルトの名無しさん [sage] 2010/10/23(土) 10:57:32 ID: Be:
    >>594
    うん
    もっと近いのは参照(リファレンス)みたいなもの(C++的な意味で)

    もちろん
    a = copy.copy(foo)
    b = copy.deepcopy(bar)
    でいわゆる「値をコピーして代入」=「値をコピーして新しいラベルを作成」も可能

    ついでに2番目は説明が面倒なので対策だけ書くと
    ・mutableな要素はインスタンスのアトリビュートで生成する(一般的には def __init__(self): とかで・・・)
    ・(予期せぬ結果を防ぐため)クラスのアトリビュート(クラス変数)にmutable(変更可)な要素を指定してはならない

       >>> class Hoge(object):
       ... foo = []
       ...
       >>> hoge1 = Hoge()
       >>> hoge1.foo.append("I'm hoge1.")
       >>> hoge2 = Hoge()
       >>> hoge2.foo
       ["I'm hoge1."]
       こんな事が起こっちゃう

605 デフォルトの名無しさん [sage] 2010/10/23(土) 11:13:47 ID: Be:
    C++の参照って代入は値のコピーだからポインタの方が近いと思うんだが 

606 デフォルトの名無しさん [sage] 2010/10/23(土) 11:16:22 ID: Be:
    C++を知ってるんなら、shared_ptrが一番近いな

610 デフォルトの名無しさん [sage] 2010/10/23(土) 12:35:11 ID: Be:
    他の言語とか知らなくても参照とmutable/immutableさえ
    ちゃんと説明してある本なら平気

    ただ参照渡しとかうっかり書いてある本だと死ぬ 

613 デフォルトの名無しさん [sage] 2010/10/23(土) 15:22:04 ID: Be:
    本とかちゃんと読んだことなくて初心者質問で申し訳ないんだが
    >>610
    > 参照渡しとかうっかり書いてある本だと死ぬ
    のはどうして?
    型によって値渡しと参照渡しが変わるという認識なんだけど、例えばどんなことで死ねるの? 

615 デフォルトの名無しさん [sage] 2010/10/23(土) 15:39:00 ID: Be:
    >>612
    俺も>>607と同意かな
    他の言語の経験者相手の話なら、クラスフィールドがインスタンス間で共有されるのは
    言うまでもない当然のことで、mutable云々は余計なお世話

    > 型によって値渡しと参照渡しが変わるという認識
    それが間違っているから、でしょう

617 デフォルトの名無しさん [sage] 2010/10/23(土) 16:41:47 ID: Be:
    参照渡しなんてほとんどなくね?
    だいたいは値型の値渡しか参照型の値渡し 

618 デフォルトの名無しさん [sage] 2010/10/23(土) 17:17:20 ID: Be:
    >>615
    もっと勉強しろよ
    あきらかに経験不足だぞお前 

619 デフォルトの名無しさん [sage] 2010/10/23(土) 18:49:19 ID: Be:
    >>607,>>615
    これに気づかなかったら、>>604の言いたいことは分からない
    >>> class Hoge:
    ... ls1 = []
    ... ls2 = []
    ... num = 0
    ...
    >>> hoge1 = Hoge()
    >>> hoge1.ls1.append(1)
    >>> hoge1.ls2 = [1]
    >>> hoge1.num = 1
    >>> hoge2 = Hoge()
    >>> print hoge1.ls1, hoge1.ls2, hoge1.num
    [1] [1] 1
    >>> print hoge2.ls1, hoge2.ls2, hoge2.num
    [1] [] 0

620 デフォルトの名無しさん [sage] 2010/10/23(土) 18:55:41 ID: Be:
    >>613
    正確には参照渡しではなく参照の値渡し…つまり
    つまりオブジェクトのIDみたいなものを値渡ししてるだけで
    変数そのものは渡ってない、という話だと思うぞ
    本来の意味の参照渡しなら変数そのものが渡って
    引数に対する操作はそのまま渡された変数に対する操作になるからね 

621 デフォルトの名無しさん [sage] 2010/10/23(土) 19:03:19 ID: Be:
    実装としては、インスタンス変数の持ってる変数テーブルに値がなかったらクラスの持つ変数テーブルを参照する。
    インスタンス変数の要素に代入された場合は、インスタンス変数のテーブルに書き込むって処理になるんだろうけど。

    Python的解釈では、(たとえimmutableであっても)変数名はラベルでしかないのだから、
               ______________
    hoge1.num ---->|   0  |
    hoge2.num ---->|____________|

    だったのが、=演算子で新たな値を束縛したから、
               ______________
               |   0  |
    hoge2.num ---->|____________|

    hoge1.num ---->[  1  ]

    になった、と考える。ls2についても同様。
    ls1は、ポインタ分かるなら書かなくても分かるだろう。
    =演算子は代入じゃなく、値の束縛というのがPythonでは重要。 

622 デフォルトの名無しさん [sage] 2010/10/23(土) 19:15:38 ID: Be:
    >>619
    なるほどよく分かった、ありがとう

623 デフォルトの名無しさん [sage] 2010/10/23(土) 19:30:40 ID: Be:
    >>615
    > クラスフィールドがインスタンス間で共有されるのは
    > 言うまでもない当然のことで
    お前がそう思うんならそうなんだろう、お前ん中ではな

627 613 [sage] 2010/10/23(土) 22:13:15 ID: Be:
    >>620
    言ってることは「なんとなく」わかるけど、実際の動作や概念的な仕様はともかく
    使い方だけで考えればjavaとの対比でいって

    pythonで数値を渡す -> javaでprimitiveな型の値を渡す感じ
    pythonでリストを渡す -> javaのStringBufferを渡す感じ
    pythonでタプルを渡す -> javaのStringを渡す感じ

    みたいに考えていいんだよね?

    であれば、数値は値渡しで、リスト・タプルは参照渡しみたいに考えると
    諸々含めてスッキリするんだけど、やっぱり数値の0もオブジェクトみたいに
    考えないとどこかで違いが出てきて困ったりするの? 

628 デフォルトの名無しさん [sage] 2010/10/24(日) 03:11:09 ID: Be:
    >リスト・タプルは参照渡し
    だからそれは参照型の値渡しな 

629 デフォルトの名無しさん [sage] 2010/10/24(日) 10:09:04 ID: Be:
    >>627
    > 数値の0もオブジェクトみたいに考えないと
    Javaはしらんのだが、渡し型とオブジェクトかどうかは関係あるのか?
    けど、数値もオブジェクトだよ。

    >>> isinstance(1, object)
    True
    >>> 1 .__add__(2)
    3 

630 デフォルトの名無しさん [sage] 2010/10/24(日) 10:13:50 ID: Be:
    Pythonには参照渡しはない。

    call by object-sharing なので、オブジェクトがミュータブルオブジェクトの場合、
    値を変えることができるわけ。

    数値はイミュータブルオブジェクト。 

631 デフォルトの名無しさん [sage] 2010/10/24(日) 10:19:41 ID: Be:
    Cに参照渡しはないって言ってるようなもんだな。誰もそんなこと聞いてないっつうに 

632 デフォルトの名無しさん [sage] 2010/10/24(日) 10:24:25 ID: Be:
    >>627 Javaでいうならこうなるんじゃない
    pythonで数値、タプルを渡す -> javaのStringを渡す感じ
    pythonでリストを渡す -> javaのStringBufferを渡す感じ

    >>629
    Javaはオブジェクトかどうかで渡し方が決められてる(非オブジェクト→値渡し、オブジェクト→参照の値渡し)
    あとJavaも実際には「参照渡し」はない。用語としては使われるけど参照の値渡しの意味 

633 デフォルトの名無しさん [sage] 2010/10/24(日) 10:36:25 ID: Be:
    用語として使ってんのにいちいちツッコむな 

634 デフォルトの名無しさん [sage] 2010/10/24(日) 10:47:42 ID: Be:
    >>631
    Pythonではそこ重要だよ。
    変に参照渡しだからとか考えるよりも>>630のように考えた方が挙動を一番きれいに説明できる。 

635 デフォルトの名無しさん [sage] 2010/10/24(日) 10:50:41 ID: Be:
    同じことだろ 

636 デフォルトの名無しさん [sage] 2010/10/24(日) 10:51:01 ID: Be:
    仮引数に別の値も「代入」したらcaller側の変数の値も変わるのが参照渡しだろ
    つまり仮引数と実引数の「値」が同じだけでなく、同じ左辺値(いれもの)を指してる
    ただの別名

    Cは全部値渡しだが、ポインタを使って似たことはできる
    JavaやPythonは値渡しでポインタやリファレンスもないから、2つの変数の値を交換する
    swap()のような関数は書けないぞ 

637 デフォルトの名無しさん [sage] 2010/10/24(日) 10:52:58 ID: Be:
    Pythonが値渡し? 

638 デフォルトの名無しさん [sage] 2010/10/24(日) 10:54:43 ID: Be:
    >>637
    確かめるのは簡単
    n = 1
    def f(x): x = 2
    f(n) # 参照渡しならnは2になるが、1のまま

    a = [1,2,3]
    def f(x): x = [4,5,6]
    f(a) # 参照渡しならaは[4,5,6]になるが、[1,2,3]のまま 

639 デフォルトの名無しさん [sage] 2010/10/24(日) 11:04:02 ID: Be:
    まあ実質的には値渡しだよ。本質的には違うけど 

640 デフォルトの名無しさん [sage] 2010/10/24(日) 11:09:15 ID: Be:
    >>639のようなバカに納得させるのは不可能だな。
    この低能には、正しい用語と定義を理解することはできない。 

641 デフォルトの名無しさん [sage] 2010/10/24(日) 11:11:07 ID: Be:
    キレたw 

642 デフォルトの名無しさん [] 2010/10/24(日) 11:17:53 ID: Be:
    LLの言語のスレは何故か定期的にこの話題になるなw

643 デフォルトの名無しさん [sage] 2010/10/24(日) 11:18:13 ID: Be:
    実質的にも本質的にも値渡しだな 

644 デフォルトの名無しさん [] 2010/10/24(日) 11:19:08 ID: Be:
    参照の値渡しが参照渡しに見えたりごっちゃになるのも、
    慣れないうちや参照渡し以外も使える言語の経験が長いとあるとわからないでもないぞ 

645 デフォルトの名無しさん [sage] 2010/10/24(日) 11:26:30 ID: Be:
    >>640みたいなのと会話するのが一番疲れる。朝生とかでも時々いるよね 

646 デフォルトの名無しさん [sage] 2010/10/24(日) 11:29:13 ID: Be:
    オレ定義と辞書の定義が違う場合に
    オレ定義が優先されるという奴とは会話がなりたたない。 

647 デフォルトの名無しさん [sage] 2010/10/24(日) 11:29:56 ID: Be:
    すぐにキレる奴とは会話が成り立たない 

648 デフォルトの名無しさん [sage] 2010/10/24(日) 11:33:22 ID: Be:
    田原総一郎なんかがそうだな
    どうせ盛り上げて視聴率取れれば良いから
    話の整合性とか落としどころとかそんなの考えてない 

650 デフォルトの名無しさん [sage] 2010/10/24(日) 12:10:29 ID: Be:
    型付けられた変数の実装に関する「参照型」と、
    引数の渡し方に関する「参照渡し」を区別することが、
    そんなに敷居が高いこととも思えないのだが。

    つうか、値渡し以外知らない人って、そんなに多いのかな? 

652 620 [sage] 2010/10/24(日) 13:39:08 ID: Be:
    参照の値渡しと参照渡しの違いはC++のポインタ渡し(明示が必要な参照の値渡しと
    考える)と参照渡しの違い程度なので正直意識的に区別せずとも本能的に区別できる。
    だからそれを区別できないと使い方で困るケースは現実的にないように思う。
    数値リテラルなどがオブジェクトとして扱われる言語は昔から結構あるけど、
    普段それを意識しなくても使えると思う。理由はCの数値リテラルと同様な値渡しと
    考えて問題がないから。

    言い方悪いけど、欲しい回答と違う回答しか出てこないので明確にいうと
    「実際の動作や概念的な仕様はどうでもいい」。
    使い方だけで考えて、どこかで違いが出てきて困ったりする具体的なケースを教えてほしい。
    (620以降自分のレスはこれが最初) 

655 デフォルトの名無しさん [sage] 2010/10/24(日) 14:00:03 ID: Be:
    >>652
    引数に代入したら参照渡しなら呼び出し側の変数が変わるし
    参照の値渡しなら変わらないのだから、それは違うものだろ

    要は、Pythonでは値を返すのに引数は使えない(C/C++ではよくやる)
    タプルを返せるのだから、別に困りはしないが

    ごく単純な話なのに、そんな長文で一体何がいいたいんだ? 

656 デフォルトの名無しさん [sage] 2010/10/24(日) 14:04:36 ID: Be:
    簡潔に言えないから。あと長文だとなんとなく説得力が増す気がするから 

657 デフォルトの名無しさん [sage] 2010/10/24(日) 14:18:17 ID: Be:
    >>655
    > 引数に代入したら参照渡しなら呼び出し側の変数が変わるし
    > 参照の値渡しなら変わらないのだから、それは違うものだろ
    >>652に書いてあるように、そこは本能的に分かるから使い方的にはわざわざ
    区別する必要ないと思うんだ。

    > 要は、Pythonでは値を返すのに引数は使えない(C/C++ではよくやる)
    > タプルを返せるのだから、別に困りはしないが
    リストや辞書などは使えるが返すほうが良いと思うけど、それは無関係な話

    > ごく単純な話なのに、そんな長文で一体何がいいたいんだ?
    >>627の話 

658 デフォルトの名無しさん [sage] 2010/10/24(日) 14:41:35 ID: Be:
    JavaのintとStringを「値的に振舞うもの」として同列に扱うなら、
    Pythonのimmutableなオブジェクトも全部同じグループに入る
    デザパタで言うValue Object

    が、>>627はintとStringを区別しているのだから、それを区別したいのなら、
    Pythonの数値やstrやタプルは全部JavaのStringと同じグループに入り、
    Javaのintに相当するものはPythonには存在しない

659 デフォルトの名無しさん [sage] 2010/10/24(日) 14:51:26 ID: Be:
    >>658
    >>652に書いたとおり「実際の動作や概念的な仕様はどうでもいい」ので同じグループに入れる必要はない。
    概念的に何に適合するかではなく使い方的にどう困るかを教えてほしい。
    例えばJavaのintに相当すると仮に考えた場合にどう困るかということ。 

660 デフォルトの名無しさん [sage] 2010/10/24(日) 14:56:21 ID: Be:
    >>659
    端的に言えばJavaのintはオブジェクトではないので、
    スタック上に配置されるし、Objectを継承していないし、メソッドを持たないし、
    ジェネリックスのパラメータにできないし、
    組み込み配列以外のコンテナには入れられない(ので、最近はboxingを自動で
    行ってくれるようになった)

    Pythonのintはごく普通のオブジェクトなので、そういう差別や区別がない 

664 デフォルトの名無しさん [sage] 2010/10/24(日) 15:02:14 ID: Be:
    >>660
    つまり困ることないってことだよね? 

667 デフォルトの名無しさん [sage] 2010/10/24(日) 15:28:17 ID: Be:
    >>652
    それ参照の値渡しと参照渡しを混同しても誰も困らないじゃんって話? 

668 デフォルトの名無しさん [sage] 2010/10/24(日) 15:34:29 ID: Be:
    >>667
    最初の3行はそういう主旨 

669 デフォルトの名無しさん [sage] 2010/10/24(日) 15:36:06 ID: Be:
    それは困るだろ。
    参照渡しと言われたのでswap書いたけど意図通りに動きませんとか。 

671 デフォルトの名無しさん [sage] 2010/10/24(日) 15:38:19 ID: Be:
    「内部的に動作が違う」だけでなく、はっきり外部的にも違うものなのに
    何で混同していいという話なのか分からんな
    まあ自分でそう思いたいだけならどうぞって感じだが

    C#でもclassに関しては参照の値渡し(call by sharing)になるが
    わざわざrefやoutパラメータでcall by referenceも出来るようにしてあるわけだが 

674 デフォルトの名無しさん [sage] 2010/10/24(日) 15:56:02 ID: Be:
    >>669
    >>652に書いたようにそれができないのは本能的に分かるからいいんだよ。
    実際のところ正確な参照渡しがデフォルトの言語ってあまりないし。
    >>671
    しかしあまり使用しないでしょう?

    言いたい内容は分かるんだけど今の話はそういう話じゃなくて、説明上、値渡しと
    参照渡しだけでいいんじゃないかと。Cのポインタも参照渡しでいいよね?
    値渡しですって説明したら値渡しの説明に困らないかい?
    そういう意味から、Pythonの渡し方は参照渡しでいいんじゃないかとそう言ってます。 

675 デフォルトの名無しさん [sage] 2010/10/24(日) 16:01:57 ID: Be:
    >>674
    そもそも本能的に分かるからいいって主張が間違ってる例が>>669だな。 

676 デフォルトの名無しさん [sage] 2010/10/24(日) 16:04:40 ID: Be:
    >>675
    いや自分ならそれは普通できないだろうと思うから、最初からそんなことしない
    そんなことないの? 

677 デフォルトの名無しさん [sage] 2010/10/24(日) 16:05:29 ID: Be:
    >>669は静的言語ですべての変数、配列をグローバルで宣言した方が良いね 

678 デフォルトの名無しさん [sage] 2010/10/24(日) 16:06:27 ID: Be:
    >>674
    Pythonみたいな奴はcall by sharingと最近は呼ばれるようだから、
    call by valueと区別したいのなら、単にそう呼べばいいだけ

    > 値渡しですって説明したら値渡しの説明に困らないかい?
    全然困らないだろ 

679 デフォルトの名無しさん [sage] 2010/10/24(日) 16:10:26 ID: Be:
    Cの関数呼び出しで何でもポインタを渡せば参照渡しになるかのように書いている人は、
    本当にcall by referenceを理解できているのか疑わしい。 

680 デフォルトの名無しさん [sage] 2010/10/24(日) 16:11:45 ID: Be:
    >>676
    それはお前の場合だけ

    参照渡しがデフォルトの言語というものはある(FORTRANやVBなど)
    そして参照渡しというものがどういうものかを正しく知っている人間なら、
    参照渡しと言われれば、そのようなものだと考える

    「自分なら~」とかいう自分の都合だけで、誤った用語を広めるな 

681 デフォルトの名無しさん [sage] 2010/10/24(日) 16:22:34 ID: Be:
    >>638
    それだと参照の値渡しと区別が付かない。 

683 デフォルトの名無しさん [sage] 2010/10/24(日) 16:27:56 ID: Be:
    >>681
    >>638はPythonが「参照渡しではない」ことを確かめる例なのだから、
    「参照の値渡しかどうか」が分からなくてもよいのでは 

684 デフォルトの名無しさん [sage] 2010/10/24(日) 16:31:50 ID: Be:
    >>678
    > Pythonみたいな奴はcall by sharingと最近は呼ばれるようだから、
    > call by valueと区別したいのなら、単にそう呼べばいいだけ
    だから「実際の動作や概念的な仕様はどうでもいい」んだってば。
    > > 値渡しですって説明したら値渡しの説明に困らないかい?
    > 全然困らないだろ
    ではどう説明するの?

    >>680
    VBは大昔だったので失念してた。でもintを普通に渡ししてたらByValだろゴラ!だったよ。
    誤った用語を広めたいとは思わないけど、正確であることにあまり意義を見出せない。 

685 デフォルトの名無しさん [sage] 2010/10/24(日) 16:36:07 ID: Be:
    >>684
    >> > 値渡しですって説明したら値渡しの説明に困らないかい?
    >> 全然困らないだろ
    > ではどう説明するの?

    値渡しだからコピーだが、Pythonの場合、値はオブジェクトインスタンスへの参照
    なので、symbolic linkをコピーしたのと同じ
    リンクがコピーされるだけで、指してる実体は同じ

    そんだけの話だろ 

687 デフォルトの名無しさん [sage] 2010/10/24(日) 16:39:00 ID: Be:
    >>683
    ここで話にでてる参照渡しが、本当の意味の参照渡しか参照の値渡しかは微妙なところだぜ。

    さらに http://www.python.jp/doc/release/ref/assignment.html の
    > 代入文 は、名前を値に (再) 束縛したり、 変更可能なオブジェクトの属性や要素を変更したりするために使われます:
    を考えると、さらに微妙になる。

    Pythonでの代入文の挙動は、中身の置き換えではないから、
    仮に参照であったとしても、その「名前」を「再束縛」したときの挙動が、
    必ずしも「名前」の値を置き換えたものになるとは解釈できない。 

688 デフォルトの名無しさん [sage] 2010/10/24(日) 16:40:34 ID: Be:
    >>684
    > 「実際の動作や概念的な仕様はどうでもいい」
    じゃあ何が知りたいの?
    魔法でなんとかなるって説明でいい? 

689 デフォルトの名無しさん [sage] 2010/10/24(日) 16:41:50 ID: Be:
    おまじない 

690 デフォルトの名無しさん [sage] 2010/10/24(日) 16:42:09 ID: Be:
    >>681はcall by referenceを理解していないことが確定しました。 

691 デフォルトの名無しさん [sage] 2010/10/24(日) 16:42:11 ID: Be:
    >>685
    > 値渡しだからコピーだが、Pythonの場合、値はオブジェクトインスタンスへの参照
    めんどくさいの湧くことははっきりしてるんだから、参照の意味はっきりさせろ。
    Cでいうポインタ渡し的な意味で、参照の値渡しってことでいいんだな? 

692 デフォルトの名無しさん [sage] 2010/10/24(日) 16:44:22 ID: Be:
    >>687もcall by referenceがわかっていない。

    みんな、call by referenceな言語を使ったことないのか? 

693 デフォルトの名無しさん [sage] 2010/10/24(日) 16:44:44 ID: Be:
    いい加減、どのレベルの話をしてるのか決着つけたら?

    Pythonの仕様って話だったら、call by sharingが正しい。
    CPythonの具体的な動作って話だったら、ソース読めば分かるが、Cで書かれてるんだからきっとcall by valueだろう。 

694 デフォルトの名無しさん [sage] 2010/10/24(日) 16:45:06 ID: Be:
    >>687
    え、Pythonの場合、代入は普通に破壊的で、中身の置き換えでしょ?
    変数の中身は「インスタンスへの参照」なので、「インスタンス」には
    影響がないというだけで

    >>> x = 0
    >>> def f(): return x
    ...
    >>> f()
    0
    >>> x = 1
    >>> f()
    1

    関数型だと、言語によっては2度目のf()が0を返すものもあるよね 

695 デフォルトの名無しさん [sage] 2010/10/24(日) 16:46:06 ID: Be:
    >>692
    じゃあcall by referenceにおいて値の入れ替えではなく、束縛って何なのよ?
    少なくとも、値の束縛って概念のあるcall by referenceな言語は使ったことが無いな。 

699 デフォルトの名無しさん [sage] 2010/10/24(日) 16:57:27 ID: Be:
    >>694
    破壊も何も、名前の束縛こそ本質。
    そのコードはf()を呼び出したときにxが再評価されてるだけだよ。

    もちろん、実装としては中身の置き換えだけど、概念としては。 

700 デフォルトの名無しさん [sage] 2010/10/24(日) 17:00:20 ID: Be:
    >>699
    いやだから、
    > 必ずしも「名前」の値を置き換えたものになるとは解釈できない。
    とか言ってたけど、これが中身の置き換え以外の何だというの

702 デフォルトの名無しさん [sage] 2010/10/24(日) 17:25:28 ID: Be:
    何となく言いたいことは分かった
    Cだと変数はメモリ上のブロック(Cではobjectと呼ぶ)につけられた
    名前で、そのメモリブロックに書かれている2進数の列が
    まさに変数の中身であり値だが、Pythonは変数モデル自体が違うよ
    と言いたいわけね?

    確かにそれは違う
    俺はPythonのシンボルテーブルにおいて、名前に紐づいているオブジェクトIDを
    変数の値と表現しているだけ
    名前に対応するオブジェクトIDのスロットがあるのだから、一般的な
    箱と中身モデルで話しても比喩としては差し支えないと思うけど 

703 デフォルトの名無しさん [sage] 2010/10/24(日) 18:08:43 ID: Be:
    >>698
    それ
    > 言いたい内容は分かるんだけど今の話はそういう話じゃなくて、説明上、値渡しと
    > 参照渡しだけでいいんじゃないかと。Cのポインタも参照渡しでいいよね?
    > 値渡しですって説明したら値渡しの説明に困らないかい?
    って話だからPythonじゃ全く回答になってないんだよ 

704 デフォルトの名無しさん [sage] 2010/10/24(日) 18:16:53 ID: Be:
    うん。モデルが違う。
    箱と中身モデルで考えることもできるだろうし、実装はCだから箱と中身モデルなんだけど、
    PythonがPythonなりの変数モデルを目指して設計されている以上、
    他のモデルで語る必要性っていうのが分からない。
    (他の言語の変数モデルで置き換える方法を探るのは、処理系実装者の仕事だろう、と思う)

    完全に別モデルで考えることがそう簡単にはできないからこそ、こんだけレスが付いてスレが読みづらくなったんだと思うし、
    別のモデルに置き換えるのなら、変数の渡し方だけじゃなくて、=の意味とかも定義しないと意味をなさない気がする。

    それに、今後の実装によって別のモデルとPythonのモデルで齟齬が出たときに当然優先されるのはPythonのモデルだし、
    明確な矛盾までは出なくても「気持ち悪い、Pythonらしくない」という評価はPythonのモデルを元に行われるから、
    そこらへんのニュアンスまで含めて数学的に等価なモデルじゃないと、面倒な思いをする可能性がある。 

705 デフォルトの名無しさん [sage] 2010/10/24(日) 18:19:40 ID: Be:
    >>704
    なるほど了解した 

706 デフォルトの名無しさん [sage] 2010/10/24(日) 18:22:16 ID: Be:
    なんで毎度こんな騒ぎになるんだろうねぇ。
    VBに参照渡しが存在してるから? 

708 デフォルトの名無しさん [sage] 2010/10/24(日) 18:25:39 ID: Be:
    >>627だけど何一つ有効回答がなくて何も解決していないんですが 

710 デフォルトの名無しさん [sage] 2010/10/24(日) 18:29:02 ID: Be:
    そもそも値渡しが何かを分かってる人に
    pythonは値渡しです、もしくは参照の値渡しです
    pythonはcall by valueです、もしくはcall by sharingです
    とか説明するためのものでしょ。

    あらかじめpythonのモデルがわかってるなら値渡しだのと説明する必要は全くないわけで。
    わざわざpythonのモデルを使って参照渡しを再定義しようとするからややこしくなる。 

727 デフォルトの名無しさん [sage] 2010/10/24(日) 19:00:51 ID: Be:
    再掲しておきます。

    引数の渡し方についての考え方について、どういう問題があるのか教えてください。
    詳細は>>627です。 

729 デフォルトの名無しさん [sage] 2010/10/24(日) 19:05:53 ID: Be:
    >>720
    議論の対象になってるのは「引数の渡し方についての言い方」だけだと思うがな。
    もし「考え方」だけに集中したいなら参照渡しと呼称するのを止めた方がいいんでね? 

731 デフォルトの名無しさん [sage] 2010/10/24(日) 19:13:39 ID: Be:
    >>727
    そもそもが間違ってる。考え方以前の問題
    そしてそれを指摘しても「有効回答がない」
    全く話が進まない。

    大体は分かってて用語だけ間違えてるのか、それとも本当に全く理解できてないのか
    それとも全部知ってて荒らしたいだけなのか、それ以前にID出ないから偽物かもしれんし
    もうスルーでいいんじゃね。 

732 デフォルトの名無しさん [sage] 2010/10/24(日) 19:18:01 ID: Be:
    >>729
    議論が何を指しているのか分かりませんし呼称を変える必要も感じませんが、
    文脈から判断できないのであれば、自分のいう値渡しをA、参照渡しをBとして
    説明して頂いて構いません。

    >>627を言い換えるなら

    「pythonで数値を渡す -> javaでprimitiveな型の値を渡す感じ
     pythonでリストを渡す -> javaのStringBufferを渡す感じ
     pythonでタプルを渡す -> javaのStringを渡す感じ

     みたいに考えていいんだよね?

     であれば、数値はAで、リスト・タプルはBみたいに考えると諸々含めて
     スッキリするんだけど、やっぱり数値の0もオブジェクトみたいに
     考えないとどこかで違いが出てきて困ったりするの? 」

    となります。 

733 デフォルトの名無しさん [sage] 2010/10/24(日) 19:20:42 ID: Be:
    >>731
    どこが間違っているため、結論がどうなるのでしょうか? 

734 デフォルトの名無しさん [sage] 2010/10/24(日) 19:22:17 ID: Be:
    >>732
    なんで呼称を変える必要を感じないの? 

736 デフォルトの名無しさん [sage] 2010/10/24(日) 19:27:04 ID: Be:
    >>734
    文脈から判断可能だと思うからです。
    なお万一結論に関係しない質問なら、今はご遠慮願います。 

737 デフォルトの名無しさん [sage] 2010/10/24(日) 19:28:26 ID: Be:
    >>732
    > 数値はAで、リスト・タプルはBみたいに考えると
    数値もリストもタプルも全部同じ渡り方
    分けるのなら「数値・タプル」組と「リスト」であって、その分け方はおかしい

    前者はオブジェクト自体が変更されることはない(immutable)
    後者はオブジェクトが変更されることが有り得る

    関数呼び出しの観点で言うと、前者では関数に渡した後でオブジェクトが変わっている
    心配をする必要がない
    後者はある 

738 737 [sage] 2010/10/24(日) 19:29:29 ID: Be:
    ごめん、よく流れを見てなかったw
    俺も以後スルーするわ 

739 デフォルトの名無しさん [sage] 2010/10/24(日) 19:42:17 ID: Be:
    >>737-738
    Pythonやってる人は皆そんな失礼な方なのですか?

    分け方がおかしいかどうか、ではなく、その分け方でどう具体的に問題があるのか
    という点を聞いています。後半5行において、その指摘がまったくなく、その分け方
    でも矛盾しないというだけの話です。

    またオブジェクトが生成時にimmutableであることと、渡し方には関連がないと
    考えています。違うのでしょうか? 

740 デフォルトの名無しさん [sage] 2010/10/24(日) 19:46:07 ID: Be:
    てめぇが一番失礼 

745 デフォルトの名無しさん [sage] 2010/10/24(日) 20:12:58 ID: Be:
    なんか一人でえんえん頑張ってる人は
    Wikipediaで参照渡し調べてから
    JavaなんとかってMLで今をときめくセキュリティ専門家と
    ポインタ完全制覇の人の瑞々しい議論を楽しんでくればいいのにと思った
    暇がつぶせると思うぞ 

あんまり省略するところがなかった ○| ̄|_ ともあれ、違うものを指す名前を使っちゃあいけないと思うのね (今回わたしはこのスレッドに書き込みはしていません)。 「野菜ソムリエ」みたいなもんで。

■_

ガンダムモデルのポメラどうしようかなあ

■_

すんません。call by ネタで活動限界に達しました ○| ̄|_

2010年10月23日

■_

・こんなの発見
Being Geek: The Software Developer's Career Handbook
別の本を探しにいってて偶然見かけたんですけどね。 翻訳されるかなあ。割と面白そうな感じだったので期待。


Being Geek - O'Reilly Media
Description

As a software engineer, you recognize at some point that there's much more to your 
career than dealing with code. Is it time to become a manager? Tell your boss he's a 
jerk? Join that startup? Author Michael Lopp recalls his own make-or-break moments 
with Silicon Valley giants such as Apple, Netscape, and Symantec in Being Geek -- an 
insightful and entertaining book that will help you make better career decisions.

・フラゲ
アフタとダムエー。

■_ タコベルプログラミング?

アメリカ行ってるときに何回か食ったな。>たこべる


Taco Bell Programming

Ted Dziuba

Programming, writing & automotive repair

Taco Bell Programming

by Ted Dziuba Thursday October 21 2010

Every item on the menu at Taco Bell is just a different configuration of roughly eight 
ingredients. With this simple periodic table of meat and produce, the company pulled 
down $1.9 billion last year.

The more I write code and design systems, the more I understand that many times, you 
can achieve the desired functionality simply with clever reconfigurations of the basic 
Unix tool set. After all, functionality is an asset, but code is a liability. This is 
the opposite of a trend of nonsense called DevOps, where system administrators start 
writing unit tests and other things to help the developers warm up to them - Taco Bell 
Programming is about developers knowing enough about Ops (and Unix in general) so that 
they don't overthink things, and arrive at simple, scalable solutions.

Here's a concrete example: suppose you have millions of web pages that you want to 
download and save to disk for later processing. How do you do it? The cool-kids answer 
is to write a distributed crawler in Clojure and run it on EC2, handing out jobs with 
a message queue like SQS or ZeroMQ.

略

LL Tiger でも参加していた UPS とかいうとこのとアプローチが似ている?

■_ Perl 6

記号があふれてるソースだなあ。


Fibonacci and Primes « Just Rakudo It
Fibonacci and Primes
By colomon

The middle challenge was to find the first prime Fibonacci number greater than 227000, 
add one to it, and then sum the prime numbers which were its factors. Here's my first 
implementation:

227000 を超える最初のフィボナッチ数を求め、それに1を加え、さらにその数の
factors (素因数?) である素数を足し合わせる:

sub is-prime($a) {
    return Bool::True if $a == 2;
    ! [||] $a <<%%<< (2, 3, *+2 ... * > $a.sqrt);
}

my @fib := (1, 1, *+* ... *);

my $cutoff = 227000;
my $least-prime = 0;
for @fib -> $f {
    next if $f <= $cutoff;
    next unless is-prime($f);
    $least-prime = $f;
    last;
}

my $x = $least-prime + 1;
say [+] (2, 3, *+2 ... * > $x.sqrt).grep({ $x %% $^a && is-prime($a) });

Despite what seems like an obvious inefficiency (approximating the prime numbers with 
the odd numbers), this is pretty snappy, executing in 12.5 seconds.

一見して非効率的なように見えますが、12.5秒で実行完了します。

I was planning to go on and talk about my new Math::Prime module here, but looking at 
this code, I think it can be expressed rather more nicely with a tweak or two here. 
Let's see.


sub is-prime($a) {
    return Bool::True if $a == 2;
    ! [||] $a <<%%<< (2, 3, *+2 ... * > $a.sqrt);
}

my @fib := (1, 1, *+* ... *);
my $cutoff = 227000;
my $least-prime = @fib.first({ $_ > $cutoff && is-prime($_) });
my $x = $least-prime + 1;
say [+] (2, 3, *+2 ... * > $x.sqrt).grep({ $x %% $^a && is-prime($a) });

So that's what the first method is good for!

I did indeed write Math::Prime just so I could use it here. It's not a huge change 
from the previous version, really:

use Math::Prime;

my @fib := (1, 1, *+* ... *);
my $cutoff = 227000;
my $least-prime = @fib.first({ $_ > $cutoff && is-prime($_) });
my $x = $least-prime + 1;
say [+] (primes() ... * > $x.sqrt).grep({ $x %% $^a });

Unfortunately, Math::Prime isn't optimized yet, and so this version, while a bit 
nicer, is actually slower than the previous version.

■_

もう一個。


Summing Subsets « Just Rakudo It
Summing Subsets
By colomon

So, the third challenge was to count the number of subsets of a set of numbers such 
that the largest number in the subset is the sum of the rest of the numbers in the 
subset. My first attempt was very straightforward: create all the subsets and check to 
see if they have the desired property:

#えーとえーと?

my @a = 3, 4, 9, 14, 15, 19, 28, 37, 47, 50, 54, 56, 59, 61, 70, 73, 78, 81, 92, 95, 97, 99;

my $hits = 0;

for 1..(2 ** +@a) -> $key {
    my @b = gather for 0..+@a -> $i { take @a[$i] if $key +& (2 ** $i); }
    my $test = @b.pop;
    next if $test != [+] @b;
    $hits++;
    say (@b, $test).join(' ');
}

say "$hits hits";

I think this works correctly, but it will be a long time before we know — as I type 
this, it's been running for ten hours on my fastest computer, and I don't anticipate 
it finishing any time soon.

これは正しく動作する(答えが求められる)と思いますが、答えが求まるまでには
長い時間がかかるでしょう。わたしがこれを自分の最高速のコンピューターで実行したときには
十時間を要しました。また、


My second attempt relies on recursion, the fact the list is sorted, and skipping 
fruitless branches to get the job done much faster — 47 seconds, to be precise.

二番目の試みは再帰を使ったもので、リストがソートされていることを利用して


sub CountSumSets($target, @a) {
    my $sets = 0;
    for ^ +@a -> $i {
        if @a[$i] < $target {
            $sets += CountSumSets($target - @a[$i], @a[($i + 1) .. (@a - 1)]);
        } elsif @a[$i] == $target {
            $sets += 1;
        }
    }
    $sets;
}

my @a = 3, 4, 9, 14, 15, 19, 28, 37, 47, 50, 54, 56, 59, 61, 70, 73, 78, 81, 92, 95, 97, 99;
@a .= reverse;

my $hits = 0;

for ^ +@a -> $i {
    $hits += CountSumSets(@a[$i], @a[($i + 1) .. (@a - 1)]);
}

say $hits;

■_ け○○ん!

推薦図書/必読書のためのスレッド 58 
778 デフォルトの名無しさん [sage] 2010/10/22(金) 23:16:26 ID: Be:
    マンガでわかるデータベース
    http://www.amazon.co.jp/dp/4274066312

    インストールしか書かれてないクソ本が多い中、
    ちゃんと基本から説明されていて好印象。
    ネタ元は増永良文氏の本だと思われる。

    同時に描かれたルルナ姫の恋模様が
    深く描かれてなかったのが残念。 

779 デフォルトの名無しさん [sage] 2010/10/22(金) 23:28:59 ID: Be:
    マンガでわかる 圏論
    マンガでわかる 計算機科学
    マンガでわかる ウェーブレット解析

    この辺りが欲しい 

782 デフォルトの名無しさん [sage] 2010/10/22(金) 23:45:51 ID: Be:
    >>779
    上の方のSICPみたいに
    自分で描くのはどうだろう? 

783 デフォルトの名無しさん [sage] 2010/10/23(土) 00:15:42 ID: Be:
    >>782
    自分の理解が全然足りないから読みたいんだが・・・ 

784 デフォルトの名無しさん [sage] 2010/10/23(土) 01:10:53 ID: Be:
    あきらめたら??
    もう試合は終了してるよ 

785 デフォルトの名無しさん [sage] 2010/10/23(土) 01:21:48 ID: Be:
    諦められん
    特に圏論は是非とも理解したい

    Haskell の最適化関係の論文を漁ると、至る所で圏論が使われてる
    圏論を理解すればその辺りの技術を手に入れられるということだ

    今は「Category Theory : SECOND EDITION(Steve Awodey 著)」を読んでるが、
    もう少しレベルの低いものは無いだろうか

    マンガで誰か書いてくれれば最高なのに 

786 デフォルトの名無しさん [sage] 2010/10/23(土) 01:24:36 ID: Be:
    マンガの到達点はかなり低いだろ。文書で読んだら10分の1の時間くらいしかかからない感じ 

788 デフォルトの名無しさん [] 2010/10/23(土) 01:52:07 ID: Be:
    「けんろん!」って言って欲しいの?

792 デフォルトの名無しさん [sage] 2010/10/23(土) 11:52:31 ID: Be:
    >>786
    モチベーションの問題。

    あとマンガでわかるシリーズだと、一部むりやりではあるにしろ
    日常の生活の中にある例をたくさん取り上げてる。
    しかも絵付きで。

    専門書だと、そういうのはなかなか無いからね。 


■_

最大の欠点の記事についたコメント。 ちょっと筆者よりのが増えた。

    日本が悲しい。

欠点ではなく個性?欠陥ではなく仕様?
言語仕様のせいではなくただの手抜きのバグ?


これだから日本のIT技術は進化しない。
人間の間違いをカバーしつつ、自由度を損なわず、生産性を
上げるのが正しいツールであり、コンパイラであり、仕様で
あるはず。


仕様なんだから人間が努力してカバーしなきゃなんて、
だからバグがなくならないんだよ。低レベルなプログラマの
議論ではなく、ITやシステム目線で議論してほしい。
あ、でも日経ソフトウェアはSEじゃなくてプログラマの本?
この記事は「あり」ですな。

日経ソフトウェアの対象読者を考えたとき、「あり」だと思います。(訂正記事だなんだという
のは騒ぎ過ぎ。皆さんワルノリし過ぎです。)



エンジニアの統計的な分布がどうなっているかは知りませんが、おそらく高い知識と豊富な経験
を有している方は一握りで、その他の大半はそのレベルにないと推測します。従って本記事を読
んだエンジニアがCではなくC++を選ぶことによって、今後起こり得るシステム開発の事故が大幅
に減るのではないかと推測します。 

一つ目のコメントの、SE じゃなくて~ の言わんとするところが良くわからない。 「上の人」がC++ なりの「きちんとした仕様の」言語を使わせればいいじゃんという話だろうか。

C とそれ以外の言語でのバグの分析とかやってみたいけど適当なデータが手に入るかなあ。 少なくとも「C++ を選ぶこと」だけでは「(システム開発の事故が)大幅に減る」 とはあまり思えないのだけど。

なんにせよ元記事は書いている状況が限定的すぎるからなあ。 それを C → C++ (あるいはさらに別のもの) という論に展開するのには無理があったというか。

■_ ネタ

書店員の情報交換スレ45 
679 マロン名無しさん [sage] 2010/10/23(土) 19:00:20 ID:??? Be:
    バイト「細目妖怪って本の問い合わせが」
    俺「???はい、お電話代わりました」
    お客「おとめ妖怪ざくろって本なんですけど」

    さすがにまで細目妖怪だけでは無理だ 

680 マロン名無しさん [sage] 2010/10/23(土) 19:21:40 ID:??? Be:
    うちの場合は客だが、とにかく酷いぞ
    ノースマテリア → A.フォーチュンアテリアル
    青外し → A.おおかみ隠し
    魔王 → A.幽霊王
    劉備 → A.真・恋姫無双 etc...

    ただですら滑舌が悪くて、何言ってるか分からねぇのにこんな感じで必ずタイトルが違う
    しかも買った本なのに間違える 

681 マロン名無しさん [sage] 2010/10/23(土) 20:47:09 ID:??? Be:
    むこうぶち → A.ニコプチ

    小学生の女の子だから変だと思ったぜ 

682 マロン名無しさん [sage] 2010/10/23(土) 21:28:10 ID:??? Be:
    干し柿 → 答 ほしのあき 

自信満々に間違ったタイトルで訊いてきて、なおかつ自分は絶対間違ってない という人いるんだよなあ。

■_ xyzzy

あー、「旧仕様を活用」しているのがあったりするのか。

xyzzy Part16
811 名無し~3.EXE [] 2010/10/21(木) 02:39:39 ID:AqC+JvYM Be:
    手軽に64bit版にできないかとソースをもらってきたけどvc++4.0用とかつらい。
    for(int hoge; hoge<HAGE; hoge++)
    ;
    if(hoge == MAGE)
    みたいな2005では修正された枠漏れ前提のコードがあったり、_M_IX86前提なコードがあったり。
    VC++2010(2005や2008でもいいですけど)でコンパイル通るx64向けに書き直した人、誰かいません?
    というか、#ifdef _M_IX86なとこ(スタックがどうとか)ってx64向けに書き直さないとまずいです? 

812 名無し~3.EXE [sage] 2010/10/21(木) 06:10:09 ID:MIR1G5RC Be:
    >>811
    x64ではstdcall呼出規約が使えないらしいので、当然書き直しだと思う。

813 名無し~3.EXE [sage] 2010/10/21(木) 12:31:21 ID:AqC+JvYM Be:
    うわーい、作業が増えたぞ(泣

814 名無し~3.EXE [sage] 2010/10/21(木) 12:49:11 ID:0RgNP/dS Be:
    >>811
    forのスコープはコンパイラスイッチあるよ。 

815 名無し~3.EXE [sage] 2010/10/21(木) 13:22:35 ID:AqC+JvYM Be:
    やる気が一気にしおれてきた 

816 名無し~3.EXE [sage] 2010/10/21(木) 15:37:41 ID:siKzrELC Be:
    xyzzyになじみまくった人、引っ越し先は考えてるんですか? 

817 名無し~3.EXE [sage] 2010/10/21(木) 16:08:11 ID:CUj2gcrq Be:
    Emacsでいいじゃん 

818 名無し~3.EXE [sage] 2010/10/21(木) 16:25:56 ID:siKzrELC Be:
    まぁそうですが、Emacsに不満があったからxyzzyにしたって人は多いと聞きますがね 

819 名無し~3.EXE [] 2010/10/21(木) 18:07:51 ID:AqC+JvYM Be:
    >>816
    全く考えてないから64bit化して使いつづけたい。 

820 名無し~3.EXE [sage] 2010/10/21(木) 18:44:23 ID:0RgNP/dS Be:
    CLtL2でもUnicodeでも64bitでも、とにかくまずチケットでも何でもいいからTODOLISTみたいなのを作れと。 

821 名無し~3.EXE [sage] 2010/10/21(木) 21:02:05 ID:cRkiRp3K Be:
    xyzzyでやってた作業をウェブサービスとかでこなすようになったから
    もう秀丸とかでも困らないんだけど、まだまだ使うよー 

822 名無し~3.EXE [sage] 2010/10/21(木) 22:56:39 ID:Ea2tUzsy Be:
    >>816
    全然 

824 名無し~3.EXE [sage] 2010/10/22(金) 03:28:20 ID:6DHZRX50 Be:
    >811
    for については /Z:forScope- つけるか、
    xyzzy wiki にパッチがあったと思うのでそれをあてればいい。 

825 名無し~3.EXE [sage] 2010/10/22(金) 10:09:45 ID:j0ipqiUv Be:
    xyzzyはもうテキストエディタとしか使ってないわw 

826 名無し~3.EXE [sage] 2010/10/22(金) 21:01:40 ID:HAYOLeFx Be:
    そりゃ、テキストエディタだからな 

for の変数のスコープはともかく、探せば結構ありそうだなあ。落とし穴。

■_

2010年10月22日

■_

転んでも泣かない
最近になって原文のほうを見つけて翻訳したのがなかったぽいからやり始めたらこれだよ!w Design Principles Behind Smalltalk (in Japanese)

■_

ブートストラッピングでコンパイラを作ろう 
59 1 [sage] 2010/10/21(木) 15:13:20 ID: Be:
    ご無沙汰しております。

    ブログ立ててそっちで書いているうちにここの存在をすっかり忘れてしまっておりました。
    自分でスレを立てておいて半年も放置してしまって大変申し訳ありません・・・。
    いろいろと方針変更がありましたが、開発は続けておりましてGC搭載のVMが動くところまで来ました。
    http://github.com/nineties

    作ると言ったOSやってなかったり、関数型言語じゃなくなってたりなんかいろいろグダグダですいません。 

60 デフォルトの名無しさん [sage] 2010/10/21(木) 22:10:22 ID: Be:
    >>59
    がんばれー
    かげながら応援してるよー 

61 1 [sage] 2010/10/22(金) 01:16:09 ID: Be:
    >>60
    ありがとうございます。頑張ります。

しばらく見ないと思っていたら。

■_

IronPython (かつ Jython) の人が Microsoft を辞めたとなんとか IronPython のメーリングリストに流れてきました。


Today marks the end of a crazy six year journey for me at Microsoft. I clearly 
remember my brutal first 8 months at this company as I worked with lawyers, marketing 
folks and execs to figure out if and how we could release IronPython as an open source 
project from Microsoft. The final approval for that release came the night before I 
was slated to give a keynote talk at the annual Python conference – with no backup 
plan. That talk was immense fun and I appreciated the willingness of the Python 
community to consider IronPython on its merits – and also to join me in my fantasy 
that getting to this point had only taken a reasonable two months rather than the 
actual eight. That first conference started many conversations with the community 
about what it meant to be true to the Python language. We made some major changes to 
how .NET methods were exposed based on just those first conversations. Since then we'
ve done our best to perform a balancing act between being true to Microsoft and .NET 
and true to the Python community.

略

As I leave Microsoft, I'm incredibly excited to be going to work for Google. I like 
to build projects with small talented teams working on quick cycles driven by 
iterative feedback from users. I like to have a healthy relationship with Open Source 
code and communities, and I believe that the future lies in the cloud and the web. 
These things are all possible to do at Microsoft and IronPython is a testament to that. 
However, making that happen at Microsoft always felt like trying to fit a square peg 
into a round hole – which can be done but only at major cost to both the peg and the 
hole. I'm excited to be going somewhere that fits my natural instincts for how to 
build great software and has demonstrated how successful this approach can be. I'm 
even pretty sure that I'll grow to love Google Docs as it continues to rapidly 
improve through great engineering combined with continuous iterative feedback.

Given my new employer, I will be throwing my lot in with the Java side of the virtual 
machine world. I think that C# has truly evolved into a nicer language than Java and 
that .NET has some cool features that the JVM is missing. However, I also see great 
things in the Java world both technically with features like the adaptive compilation 
in HotSpot and more significantly in terms of the vibrant community it has managed to 
create that adds huge value to the platform. When I weigh them both in the balance, 
neither side has a clear advantage. I respect Google's decision to standardize on a 
uniform set of primary programming languages with Python, JavaScript, Java and C++. I 
don't see any reason to push against that set – particularly if it means I get to 
consider Python a primary language!

This also means that I am leaving the IronPython project. The four people named as 
initial coordinators are fantastic and it would be a pleasure to work with them. It 
would also be very satisfying to work on IronPython outside of the corporate 
constraints I've been living in for the past six years. I have great hope for this 
project in these new hands and look forward to watching their future successes.

So long and thanks for all the fish - Jim Hugunin

(original of this message is posted at http://hugunin.net/microsoft_farewell.html)

  

■_

Perl 6の演算子はもうわからん。


blog | Perlgeek.de :: This Week's Contribution to Perl 6 Week 11: Improve an error message for Hyper Operators

Sun, 17 Oct 2010

This Week's Contribution to Perl 6 Week 11: Improve an error message for Hyper Operators

Permanent link

For this week's contribution to Perl 6 we ask you to improve the error message that 
Hyper Operators emit when lists are not of equal length.

(Introduction to this series of challenges)

Background

In Perl 6, operators can be applied to lists; in one version, the lists must be of 
equal length, in the other form one or more lists are automatically repeated to be of 
proper length.

Perl 6 では演算子をリストに対して適用できます。あるバージョンでは対象となる
リストは等しい長さでなければなりません。別の形式ではひとつ以上のリストが
適切な長さにまで自動的に繰り返されます。

# equal length required:
say join ', ', (1, 2, 3) >>+<< (10, 20, 30);
# output: 11, 22, 33

# auto-extending the right side by
# turning the less-then/larger-then signs around:
say join ', ', (1, 2, 3) >>+>> 10;
# output: 11, 12, 13

# this correctly produces an error message
(1, 2, 3) >>+<< (1, 2)
# output: Sorry, sides are of uneven length and not dwimmy.

# recurses into structures
((1, 2, [3, 4]) >>+<< (10, 10, [20, 20])).perl
#output: [11, 12, [23, 24]]

What you can do

Please submit a patch that improves the error message. A good better error message 
would be:

# for non-recursive structures:
Sorry, structures on both sides of non-dwimmy hyperop are not of same shape
  left:  3 elements
  right: 2 elements

# for recursive structures:
Sorry, structures on both sides of non-dwimmy hyperop are not of same shape
  left:  3 elements
  right: 2 elements
at nesting level 2

The source code can be found in src/core/metaops.pm, spread out over a few multi subs.

You'll need to introduce another (probably named) parameter or a contextual variable 
to track the recursion depth.

Submission

Update: I have received one submission, worked a bit on it and included it in Rakudo.

Please submit your patch to the perl6-compiler@perl.org mailing list (and put 
moritz@faui2k3.org on CC, because the mailing list sometimes lags quite a bit).

If you have any questions, feel free to send them to the mailing list, or ask on our 
IRC channel".


■_ gawk

at gawk スレ。

awkについて語るスレ $2 
398 デフォルトの名無しさん [sage] 2010/10/21(木) 20:16:46 ID: Be:
    sjisで書いた
    /ー/{print}
    を実行すると

    awk:
    awk: ^ 正規表現が終端されていません。
    awk: 致命的: [ または [^ が対応しません。: /[/{print}/

    のエラーになってしまいます。
    ーの2バイト目が[なせいだと思いますが、どう対応したらいいでしょうか?
    入力ファイルはsjisで書かれていて、文字コード変換はできません。

399 デフォルトの名無しさん [sage] 2010/10/21(木) 20:55:41 ID: Be:
    >>398
    環境の問題なんだから、実行環境くらいまともに書けよ。 

400 デフォルトの名無しさん [sage] 2010/10/21(木) 21:38:24 ID: Be:
    >>398
    gawk を使う 

401 デフォルトの名無しさん [sage] 2010/10/21(木) 22:52:57 ID: Be:
    環境はCentOS-5.5-x86_64でGNU Awk 3.1.5です。
    /bin/awkはシンボリックリンクで、実体はgawkでした。 

402 デフォルトの名無しさん [sage] 2010/10/21(木) 23:49:35 ID: Be:
    >>401
    --help 嫁 

403 デフォルトの名無しさん [sage] 2010/10/22(金) 01:41:07 ID: Be:
    Windows7(64bit)で使えるawkありますか?

404 デフォルトの名無しさん [sage] 2010/10/22(金) 02:19:30 ID: Be:
    32bit版のawkをを使うんじゃダメ? 

405 398 [sage] 2010/10/22(金) 07:32:34 ID: Be:
    こうすることで対応できました。
    /\x81\[/{print} 

406 デフォルトの名無しさん [sage] 2010/10/22(金) 09:41:36 ID: Be:
    それでいいなら、/ー[]/でもいい希ガス。
    根本的な解決になってないけどねぇ。 

407 デフォルトの名無しさん [sage] 2010/10/22(金) 13:52:10 ID: Be:
    シングルクオーテーションやダブルクオーテーションの使い分けじゃね~ 

408 398 [sage] 2010/10/22(金) 19:55:53 ID: Be:
    根本的な解決するとしたら文字コードを変えることでしょうか?

409 デフォルトの名無しさん [sage] 2010/10/22(金) 20:03:18 ID: Be:
    日本語の文字コードに対応してるawkを使う、という方法もある。
    今あるのかどうか知らないけど。 

410 デフォルトの名無しさん [sage] 2010/10/22(金) 20:28:38 ID: Be:
    今のgawkは普通にUnicode対応してるみたい

    $ echo 'てすと' | gawk '/[ぁ-ん]/ { print length($0) }'
    3

    UTF-8ロケールでしか試してないけど
    cygwinでも大丈夫 

とつぜん発言が増えたw

398 はエラーメッセージが日本語のものになっているから、locale は utf-8 か euc-jp にでもなっているのかな。 gawk を実行する locale が sjis になってりゃOK のはずだけど。

いくつか問題が報告されて、対処もされたのでビルドさえできれば動くんじゃないかなあ >Windows用で64bit 誰がビルドするのかって話だけど。

あ。VC って LLP64 だっけ?

■_ 最大の欠点

例の「最大の欠点」の話でもうちょっと書こうと思ったのですが ( /.J でも採り上げられたしw)、眠いので止めます。 文字列操作は「C言語最大の欠点」か? - スラッシュドット・ジャパン

■_ 本日の巡回から

2010年10月21日

■_

ほしー
デジタルメモ「ポメラ」、テレビアニメ「機動戦士ガンダム」とコラボレーション - japan.internet.com
ポメラほしいとは思ってたんだけどどうせならこういうので(笑)

■_ 最大の欠点

この記事を書いた方、ほかにも「最大の欠点」を書いていたり。 好きなフレーズなんだろうか。

んでまあ、ついったでは結構「これはひどい」的なコメントが飛び交っていたようです。


C言語最大の欠点:ITpro

C言語最大の欠点

 1980年代、筆者が高校生・大学生だったころに「C言語がすごい」という話を友人から聞いて
いた。しかし、当時の筆者が触れていたのはMSXパソコンのBASICと大学の汎用機のFortranくら
いだった。C言語をやっと手に入れたのは、1992年の暮れである。清水の舞台から飛び降りるよ
うな気持ちでBorland C++の大箱を買って帰った。

 それから20年近くが経過した今でも、C言語は「最強のプログラミング言語」と呼ぶべきポジ
ションを確保し続けている。UNIXオペレーティングシステムとC言語が世界に与えたインパクト
の大きさは、実に大きなものがあった。

 ただ、C言語を学習したり評価したりする際には、C言語の大きな欠点を知っておく必要がある
だろう。筆者が考えるその大きな欠点とは、「文字列の扱いが非常に面倒」であることだ。

「バッファオーバーフロー」を回避するのは大変

(略)

C++を再評価してもいいのでは?

 筆者がここで言いたいのは、そろそろC++を使ってみてもいいのでは?ということだ。C++は仕
様がなかなか定まらずに迷走していた感があるが、先ほど見たように、Visual C++でもg++でも、
ある程度同じプログラミングができるようになりつつある。

 もちろん、C言語一式を用意するのとC++一式を用意するのは作業量が全然違う。C言語はある
けれどC++はない、という作業環境もあるだろう。そういう環境では、C言語を頑張って使い続け
ることになると思う。

 C言語で文字列を扱うのは容易ではない。そこを突く形で他のプログラミング言語が普及した
面もあるのではないか。一方で、C++がここまで育った現在、ちょっとした実用プログラミング
は、C++で楽にこなせるはずだ。ぜひ、C++を再評価してみていただきたい。

 最後にムックの宣伝を少し。先ほども少し紹介したが、日経ソフトウエアは2010年10月15日に
「ゼロから学ぶ!最新C/C++」を発売した。マイクロソフトの主力開発ツール「Visual Studio 
2010」の無償版である「Visual Studio 2010 Express」のDVD-ROMが付属し、それをインストー
ルしてC/C++のプログラミングを学べる。

 第3部では先に紹介したC++のstringだけでなく、動的な配列として使えるvectorなどを活用し
て、C++のメリットを打ち出している。C言語とC++の実用的な入門書として、多くの人に使って
もらえれば筆者冥利に尽きる。


C と C++ の本を比べると今でも C の方が多そうだし、 C++ の本でも「らしく」使っているのって少なそうだものなあ。具体的な書名は出さないけど。 そういう意味では「再評価」とかなんとかはわからんでもないけど いかんせん出した例がひどすぎるというかなんというか。

↓寄せられていたコメント。ついったとかのは面倒なので放置。

    単なるプログラムのバグにしか見えないのですが。

最大入力文字数を決めてカウントダウンしていくのが
常識です。例示されたC言語プログラムは単にバグを含んで
いるだけで、C言語の弱点とは言えません。コンパイラの
作りや言語の仕様によっては救われるかもしれませんが、
基本的には最大入力文字数をチェックし忘れているバグを
含んだプログラムです。


  
RE:単なるプログラムのバグにしか見えないのですが。

全くその通り。これだけ不注意なプログラムを書く人なら、C言語に限らず、Webプログラム(
PHPやJavaScript等のどんな言語)でも同じようなことを平気でやると思う。しかも、この記事を
書いている人は、Cの解決策(?)にC++という別の言語の話を持ち出してきている。ただ単に自
分の無知をさらして、なにが言いたかったのだろう。

  
    欠点に対する解決になってない

すでにコメントありますが、gets()はC99非推奨なのでgetc()を使ってください。

それはいいとして、一部の組み込み分野など、C++さえ使えない場合はどんな解決策があるので
しょう? コーディングルールをしっかり守るくらいしかないのでしょうか?
    RE:欠点に対する解決になってない

VisualStudio2005のオンラインマニュアルなんかだと、gets()の代わりにgets_s()、_getws_s()
を使うように書かれています。また、gets()のように、セキュリティが強化された新しい関数が
存在する場合、セキュリティが弱い古いバージョンは推奨されないバージョンとしてマークされ、
警告されます。

理由なく、開発環境が出している警告を無視することは、論外です。記事を書くために、意図的
に不具合があるサンプルを作りこんでいるだけですね。
やってはいけないコーディング

バグとはいいませんが、いわゆる手抜きのコードですよね。普通の解決ならfgetsで置き換えで
しょう。まあムック紹介のための前振りなのでしょうが、そもそも他の言語の導入で解決という
考え方が変です。

  
    弱点といいますが。

どの言語にも長所も短所もあるでしょう。
勉強ではCOBOL,FOTRAL、趣味ではBasic、仕事ではCから始まり、Pascal(Delphi),VC++と学んで、
今はVB2005。Javaはかじっただけですが、どれが良いなんて宗教論争的なところがあります。

それにしても、どの記事にも批判的なコメントが多く、
建設的なコメントは少ないように感じます。


角を矯めて牛を殺したのが C→C++

たかが文字列の問題くらいでC++にいくってのはどうか。C++の強みの享受と引き替えCの強みも
かなり捨てる事になるのを著者はわかっているのだろうか。

C++だって、本当にセキュアなプログラミングをするのなら主記憶サイズを超える長大な「1行」
が入力されたらどうなるか考えてgetlineの例外をきちんと処理することが必要だと思うが・・・

残念ながらCは汎用言語でもないし初心者安全言語でもない。気軽に可変長文字列処理を書きた
ければCは向かないというのには同意。ただしその場合は代わりにC++を使うのではなくもっと別
の適した言語があるとおもう。
Cが何のための言語かわかっていますか?

カーネルでは、全てを自分で管理できないと困るんですよ。Cはそのために生まれた言語であり、
メモリ管理とかが隠蔽されないところが強みなんです。欠点ではありません。というか、欠点だ
と思うのなら、使い方が間違っています。

他の方が既に指摘しておられますが、適材適所、です。
    関数のマニュアルも読んでいない記事

最近のManpageマニュアルには、互換性維持のために残っているだけの関数だから、gets() は絶
対に使用してはならないと明記されていますよ。関数のマニュアルぐらい読んでから、記事にし
ていただきたいものです。

CとC++は似て非なる言語

著者は、業務用アプリにC言語を使用する前提で話を進めているのでしょうか?そうであれば、
記事のもって行き方に強引さが感じられます。

まるでC言語の延長上にC++があるような書き方がされていますが、今ではそれぞれの良さを活か
し、別の道を歩んでいる異なる言語ですね。 
訂正記事を載せた方がよいと思います

このような記事を私的な場所で書かれるのであれば愛嬌で済みますが、日経BP社の中で公表され
たのですから、自分が書いた記事に責任を持つ必要があります。

各人が書かれたコメント等に、反論できますか?

あなたの主張「C言語の最大の欠点」が、ほんとに正しいですか?

あなたがC言語の勉強を開始した年(記事中。1992年)の20年も前からC言語が存在します(1972年)。
現在までに40年近くの歴史ある言語です。

その間に、先人達がC言語の文法などを様々に修正や規格化等などの作業が行われています。

もし筆者の主張が正しければ、この40年の間にその問題に対して何らかの対策が行われていたと
考えるべきだとは思いませんか?

対策が取られていないという事実だけを見れば、それはC言語の「欠点」ではなく、C言語を使っ
ている本人側の問題と考えるべきではないでしょうか?

このような記事を日経BP社の中で書かれた場合は、本人のみならず会社としての信用に影響が及
ぶと思います。

今すぐ、訂正記事を書かれることを願います。

こんな記事を提灯にするようではムックの内容も期待できない

getsではなくfgetsを使うのは前世紀からの常識だったと思うのだが。

そもそも「文字列の扱いが非常に面倒」なんて言ったら、行列演算/GUI/webサービスetc.は面倒
じゃないのかと。

Cをメインに使う開発現場なら各種ライブラリの整備ぐらいしているだろうに。

コンパクトな処理系とライブラリを組み合わせるCのスタイルは「欠点」ではなく「特徴」だ。 
    C言語最大の欠点?

タイトルを見て面白そうだなと思ったが、内容があまりにも稚拙。。。
私が中2ぐらいに書いた文章かと思いました。
甘酸っぱい気持ちになりました。
    C++のことはもうそっとしておいてあげてください

っていうか、twitterで話題になってるけど絶望的な記事ですなこれは。誰がOK出してここに掲
載されてるの?ノーチェックなの?
    なんかむなしいなぁ

40年間プログラマやってる現役なのですが,皆さんのおっしゃってることに,同意します.

高速で,メモリの消費の少ない設計方針で,C#,Javaで,悪戦苦闘しているプログラマみたい.
適材適所って,死語なんでしょうね..
欠点ではなく特性

一般的にはキー入力や表示といった機能を提供するプラットフォームを開発し、アプリケーショ
ンはその機能の上に実装することでバッファオーバーフローなど発生させずに低コストで開発し
ています。

この記事はサンデープログラマレベルですね。
見事な反面教師!

批判が多いですね。このレベルの記事は反面教師として閲覧したらどうでしょう。

会社に収益をもたらす技術情報は無料提供サイトに期待できません。これはインターネット時代
の常識であり、知らない人は経験が足りないどころか、嘲笑の対象とされます。無料記事の公開。
それはあくまでも宣伝であり、ページビューを稼ぐ道具です。この意味では、IT Proはしっかり
したビジネスモデルをお持ちです。すごい!、の一言です。

誰か問題のムックの中身をチェックしてみてくれ~っ

■_ 謎

「下の本」ってナニ?


COBOLの下の本のP.149のCOBOL命令の穴埋めの答えを教えてくれませんか? - Yahoo!知恵袋


COBOLの下の本のP.149のCOBOL命令の穴埋めの答えを教えてくれませんか?

COBOL下の本を授業で使っている人の解答をお願いします。 

わけわかんねー

■_ 新言語

JVM 上で動作する ML 系の言語だとか。 Short introduction to Yeti



Short introduction to Yeti
What is Yeti?

Yeti is a ML-derived strict, statically typed functional language, that runs on JVM. 
Following tutorial is mostly meant for C/Java programmers (most of it will be trivial, 
if you happen to know any ML family language). Strict means that function arguments 
will be evaluated before function call (most imperative languages like Java are strict). 
Static typing means that consistency of expression types is checked at compile time. 
Yeti compiler infers the types automatically from the code, without needing explicit 
type annotations. Functional means that functions are first-class values (like objects 
are in OO languages).

■_ reddit に訊け


What are important languages to learn to understand different approaches and concepts? - Stack Overflow

What are important languages to learn to understand different approaches and concepts?
異質のアプローチやコンセプトを理解するために学ぶ言語として重要なものは?


Matters of practicality are highly subjective, so I will simply say that learning 
different language paradigms will only serve to make you a better programmer. What is 
more practical than that?

Functional, Haskell - I know you said that you didn't want to, but you should really 
really reconsider. You've gotten some functional exposure with Clojure and even Python, 
but you've not experienced it to its fullest without Haskell. If you're really against 
Haskell then good compromises are either ML or OCaml.

関数型 Haskell

Declarative, Datalog - Many people would recommend Prolog in this slot, but I think 
Datalog is a cleaner example of a declarative language.

宣言型 Datalog

Array, J - I've only just discovered J, but I find it to be a stunning language. It 
will twist your mind into a pretzel. You will thank J for that.

配列 J

Stack, Factor/Forth - Factor is very powerful and I plan to dig into it ASAP. Forth is 
the grand-daddy of the Stack languages, and as an added bonus it's simple to implement 
yourself. There is something to be said about learning through implementation.

スタック Factor/Forth

Dataflow, Oz - I think the influence of Oz is on the upswing and will only continue to 
grow in the future.

データフロー Oz

Prototype-based, Javascript/Io/Self - Self is the grand-daddy and highly influential 
on every prototype-based language. This is not the same as class-based OOP and 
shouldn't be treated as such. Many people come to a prototype language and create an 
ad-hoc class system, but if your goal is to expand your mind, then I think that is a 
mistake. Use the language to its full capacity. Read Organizing Programs without 
Classes for ideas.

プロトタイプベース JavaScript/Io/Self

Expert System, CLIPS - I always recommend this. If you know Prolog then you will 
likely have the upper-hand in getting up to speed, but it's a very different language.

エキスパートシステム CLISP


Frink - Frink is a general purpose language, but it's famous for its system of unit 
conversions. I find this language to be very inspiring in its unrelenting drive to be 
the best at what it does. Plus... it's really fun!

Functional+Optional Types, Qi - You say you've experience with some type systems, but 
do you have experience with "skinnable* type systems? No one has... but they 
should. Qi is like Lisp in many ways, but its type system will blow your mind.

Actors+Fault-tolerance, Erlang - Erlang's process model gets a lot of the buzz, but 
its fault-tolerance and hot-code-swapping mechanisms are game-changing. You will not 
learn much about FP that you wouldn't learn with Clojure, but its FT features will 
make you wonder why more languages can't seem to get this right.

Enjoy!

■_

■_


一つ前へ 2010年10月(中旬)
一つ後へ 2010年11月(上旬)

ホームへ


Copyright (C) 2010 KIMURA Koichi (木村浩一)
リンクはご自由にどうぞ。

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