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

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

一つ前へ 2010年7月(下旬)
一つ後へ 2010年8月(中旬)

ホームへ

2010年08月10日

■_

最初は本当に「ときどき」しか書いてなかったんですがねえ(笑)

■_

Intridea Blog: Stop The Hate: Obj-C Deserves Your Love

Stop The Hate: Obj-C Deserves Your Love


My first foray into Objective-C was, for lack of a better description, a sink-or-swim 
situation. I was working for a previous employer and our lead iPhone developer had 
just been laid off; my old boss was in my office the next day asking me how quickly I 
could "get up to speed". "You know Ruby", he said, "How 
difficult could it be?" It was time to get some books.

わたしが最初に Objective-C に手を出した (foray into) したのは、better description を欠
いたあるsink-or-swim situation (のるかそるかの状況?) でした。わたしはそれ以前の雇い主
のために働いていて、わたしたちは iPhone developer をまさにレイオフしたところでした。わ
たしの古い上司 (my old boss) が翌日わたしのオフィスを訪れわたしにどのくらい短い時間で 
(Objective-C という言語を)理解できるか (how quickly I could "get up to speed") 
と訊ねてきました。「キミは Ruby がわかるよね」彼はこう言い、そしてこう続けました
"How difficult could it be?" と。
即座にわたしは本を何冊か買いに行ったのでした。
#チョー訳

The first point I would like to raise is that Objective-C, while itself quite elegant 
(at least in comparison to its namesake), is fairly useless on the Mac platform 
without the Cocoa framework. And it is this framework that I think a lot of Rubyists 
get hung up on. The other big sticking point is manual memory management through the 
use of retain and release.

わたしが第一に Objective-C について raise したいのはそれ自身はとてもエレガントなのに 
(少なくともその namesake と比較して、Cocoa フレームワーク抜きでの Mac プラットフォーム
上では fairly useless であることです。そしてこのフレームワークはわたしが Rubyist の多
くは get hung up on するだろうと考えるようなものでした。これとは別の big stricking 
point は retain (取得) と release (解放) を使ったマニュアル操作のメモリ管理です



Cocoa's roots start all the way back in the 1980s with the NeXTSTEP operating system 
which tagged along with Steve Jobs when he was tapped to lead Apple again in 1996. 
This is why Cocoa's core classes, such as NSArray and NSString, all begin with 'NS'. 
The naming scheme is a holdover from that earlier OS and while those two extra 
characters may not seem like much hassle, to a Rubyist they represent an unnecessary 
burden of verbosity. In addition, Cocoa makes extensive use of the delegate pattern, 
something that is rarely seen or needed in Ruby and can make it difficult to trace an 
execution path for those unfamiliar with the concept. One of the limitations of 
Objective-C, the inability to create difficulty in creating a function with a variable 
length argument list, is commonly resolved through the use of the poorly named hash 
userInfo, which frequently appears in method definitions without any connotation as to 
its purpose. And lest we forget those wonderfully verbose method names, I think even 
the most die-hard and grizzled veteran of Objective-C would agree that NSString's 
stringByReplacingOccurrencesOfString, could have been better-named.

Cocoa のルーツは Steve Jobs が1996年に Apple に復帰したときに彼と共にくっついてきた
(tagged along) ものである 1980年代の NeXTSTEP オペレーティングシステムにまで遡ります。
これが、NSArray や NSString のような Cocoa の コアクラスの名前が'NS'から始まっている理
由です。この命名方式 (naming scheme) は初期の OS から来た holdver であり、これら二つの 
extra キャラクターは may not seem like much hassle である一方で、Rubyist たちにとって
はそれらのキャラクターは不必要な burden of verbosity を表しているのです。これに加えて、
Cocoa はデザインパターンを extensieve use させ、不慣れなコンセプトでの実行パスのトレー
スを困難にする可能性があります。Objective-C の制限のひとつであるメソッドの目的に対する
一切の conotaion といったものがないメソッド定義でよく見られる可変長引数リストを持っ
た関数の生成における create difficulty に対する inability は、一般的には貧弱な hash
userInfo を通じて解決されます。そしてわたしたちがそのような wonderfully で冗長なメソ
ッドの名前を忘れてしまったとき、最も die-hard かつ grizzled な Objective-C の veteran
でさえも NSString の stringByReplacingOccurencesOfString というのがよい名前であったの
だということに同意するだろうとわたしは確信しています。


Rubyists are proud of that fact that they don't have to worry about memory management. 
The more knowledgeable Rubyists could tell you that the garbage collector, or GC, 
works by continually scanning objects in memory once a process has accumulated eight 
megabytes worth, checking to see if there are any pointers to those objects and then 
releasing them back to the OS if they do not. But most Rubyists would refuse to 
venture any farther down that dark path of memory management out of a simple need to 
retain their sanity. Indeed, for a good few weeks I struggled with this concept until 
my fellow iPhone student Paul Barry introduced me to a book that would change my 
outlook. Titled "Learn Objective-C on the Mac", it proved to be a treasure 
trove of information on object allocation. Specifically, chapter nine, which dealt 
with memory management, made it crystal clear what was going on underneath the hood 
when an object was created, and thus retained, and when it was released. The concept 
itself is simple: retaining an object increases its "retain count" by one; 
releasing it reduces that count; and when it reaches zero that space in memory is 
released back to the OS. Immediately the seemingly-random crashes my applications 
faced were decipherable and easily fixed while my hostility to Objective-C and the 
Cocoa framework melted away.

自分たちがメモリ管理について思い悩む必要のないことについて Rubyist たちは誇っています。
もっと knowloedgeable な Rubyist たちはあなたに一つのプロセスがせいぜい8メガバイトほど
しか使わなかった昔の、オブジェクトへの何らかのポインターがあるかどうかを検査してもしな
ければ OS にオブジェクトの領域を返すような、継続的にメモリ中のオブジェクトをスキャンす
ることで動作するガーベジコレクター(GC) のことを話すこともできるでしょう。しかし大部分
の Rubyist は、単に their sanity を得るためにメモリ管理の dark path が必要となる 
venture any farther down を拒絶するでしょう。はっきり言うと、わたしの fellow iPhone 
student である Paul Barry がわたしの outlookを変えるであろう一冊の本を紹介してくれるま
で、わたしはこのコンセプトとの格闘で数週間を過ごしたのです。"Learn Objective-C on
the Mac" というタイトルのついたその本は、オブジェクトの割り当てに関する情報の
treasure trove (貴重な財宝?) を探し出すものでした。特にメモリ管理について扱っている第9
章は、オブジェクトが生成されたとき、それが取得 (retain) されたとき、そしてリリースされ
たときのそれぞれの underneath the hood で行われていることを crystal clear (非常に明確?)
にするものです。コンセプトそれ自身は単純で、オブジェクトを取得 (retain) するとその
"retain count" を 1 増やし、解放するときにはそのカウントを減らすそしてカウント
がゼロになったときにメモリー空間は OS へ返します。わたしのアプリケーションが直面していた
seemingly-random crashes も即座に decipherable (解読→原因を突き止めた) され、簡単に修正
されました。一方で、わたしのObjective-C とCocoa フレームワークに対する
hostility (敵愾心) も氷解 (melted away) したのです。

As Rubyists, we tend to value the simple over the complex and prefer not to sweat the 
small stuff. Yet on a whole we also desire learning new concepts and many of us can 
attest to that being the driving factor behind leaving a former language of choice 
behind. On occasion, such as with Objective-C and Cocoa, our preference for simplicity 
and our desire to learn collide, head-on. But rather than tweet about how ugly Cocoa 
looks or how memory management in Objective-C is beneath you, I challenge you to dive 
further. After all, Ruby itself is built on Objective-C's forebear, C, and no 
programmer has walked away worse for wear after peeking under the hood. Learning 
Objective-C not only opens up the world of iOS application development but also makes 
us better Rubyists.

Rubyist として、わたしたちは複雑であることよりも単純であることに価値を置き、そして sweat
stuff ではなく small stuff を好む傾向にありました。
#だめだよくわからん
Yet on a whole we also desire learning new concepts
新しいコンセプトを学ぶという欲求と
and many of us can attest to
that being the driving factor
behind leaving a former language of choice behind.
Objective-C と Cocoa を使うような状況において、わたしたちの simplicity に対する 
preference と学習に対する欲求 (desire to learn) は正面衝突していたのです。しかし 
Cocoa の見てくれがどれだけひどいものなのかについて tweet したり
あなたの支配下にある Objective-C のメモリ管理がどんなものかについて tweet するのではなく、
I challenge you to dive further.
結局のところ Ruby それ自身は Objective-C の先祖 (forebear) である C の上に構築されていて、
プログラマーは誰一人として worse for wear after peeking under the hood を
walk away しませんでした。
Objective-C を学ぶことは iOS 向けアプリケーション開発の世界を開くだけでなく、
わたしたちをよりよい Rubyists にもするのです。

■_ イディオム


blog | Perlgeek.de :: Common Perl 6 data processing idioms

Thu, 22 Jul 2010

Common Perl 6 data processing idioms

NAME

"Perl 5 to 6" Lesson 27 - Common Perl 6 data processing idioms

SYNOPSIS

  # create a hash from a list of keys and values:
    キーと値のリストからハッシュを生成する
  # solution 1: slices
    解決策その1 スライス
  my %hash; %hash{@keys} = @values;
  # solution 2: meta operators
    解決策その2 メタ演算子
  my %hash = @keys Z=> @values;

  # create a hash from an array, with
  # true value for each array item:
    配列から、その要素に対して true の値を持ったハッシュを生成する
  my %exists = @keys Z=> 1 xx *;

  # limit a value to a given range, here 0..10.
    与える範囲の値を制限する。この例では 0..10
  my $x = -2;
  say 0 max $x min 10;

  # for debugging: dump the contents of a variable,
  # including its name, to STDERR
デバッグ用: 自身の名前を含む変数の内容をSTDERRにダンプする。
  note :$x.perl;

  # sort case-insensitively
大小文字の違いを無視してソートする
  say @list.sort: *.lc;

  # mandatory attributes
  class Something {
      has $.required = die "Attribute 'required' is mandatory";
  }
  Something.new(required => 2); # no error
  Something.new()               # BOOM

DESCRIPTION

Learning the specification of a language is not enough to be productive with it. 
Rather you need to know how to solve specific problems. Common usage patterns, called 
idioms, helps you not having to re-invent the wheel every time you're faced with a 
problem.

ある言語の仕様を学ぶことは、その言語を使って生産的になるのには十分ではありません。
特定の問題をどのように解決するのかというノウハウを知る必要があります。
イディオムと呼ばれる一般的に使われるパターンは
問題に直面するたびに毎度毎度あなたが車輪の再発明をする必要がない
ように手助けをしてくれます。

So here a some common Perl 6 idioms, dealing with data structures.

そこでここにいくつかのデータ構造を取り扱う一般的な Perl 6のイディオムを

Hashes
ハッシュ

  # create a hash from a list of keys and values:
    キーと値のリストからハッシュを生成する
  # solution 1: slices
    解決策その1: スライス
  my %hash; %hash{@keys} = @values;
  # solution 2: meta operators
    解決策その2: メタ演算子
  my %hash = @keys Z=> @values;

The first solution is the same you'd use in Perl 5: assignment to a slice. The second 
solution uses the zip operator Z, which joins to list like a zip fastener: 1, 2, 3 Z 
10, 20, 30 is 1, 10, 2, 20, 3, 30. The Z=> is a meta operator, which combines zip 
with => (the Pair construction operator). So 1, 2, 3 Z=> 10, 20, 30 evaluates to 
1 => 10, 2 => 20, 3 => 30. Assignment to a hash variable turns that into a Hash.

最初のソリューションは Perl 5 であなたが使っていたのと同じもので、スライスに対して代入
します。二番目のソリューションは zip 演算子 Z を使っています。which joins to list like 
a zip fastener:この演算子はジップファスナー (zip fasterner) のようにリストを join する
もので、1, 2, 3 Z 10, 20, 30 は 1, 10, 2, 20, 3, 30 となります。Z=> は zip を (ペア
構築演算子である) => と combine するメタ演算子です。ですからこの場合 1, 2, 3 Z=> 
10, 20, 30 を評価すると1 => 10, 2 => 20, 3 => 30 となります。
ハッシュ変数に対する代入は Hash へ変換されます
#なんか違う

For existence checks, the values in a hash often doesn't matter, as long as they all 
evaluate to True in boolean context. In that case, a nice way to initialize the hash 
from a given array or list of keys is

存在のチェックをするのには、ハッシュ中の値はそれが boolean コンテキストで True と評価
されるようなものであればたいていの場合は重要ではありません。そのような場合に、与えら
れたキーの配列やキーのリストでハッシュを初期化する nice な方法が次のやり方です

  my %exists = @keys Z=> 1 xx *;

which uses a lazy, infinite list of 1s on the right-hand side, and relies on the fact 
that Z ends when the shorter list is exhausted.

これは遅延を使っていて、右辺には 1 の無限リストがあり、
短いリストが尽きたときに Z が終了することを利用しています。


Numbers
数値

Sometimes you want to get a number from somewhere, but clip it into a predefined range 
(for example so that it can act as an array index).

あらかじめ定められた範囲に clip it into  したいことがあります
(たとえば配列の添え字として使われる可能性がある場合など)

In Perl 5 you often end up with things like $a = $b > $upper ? $upper : $b, and 
another conditional for the lower limit. With the max and min infix operators, that 
simplifies considerably to

Perl 5 ではたいてい、 $a = $b > $upper ? $upper : $bと、さらにもう一つ下限に対する
条件式を使うようなことになります。max 演算子と min 演算子を使うことでこれは次のように
はっきりと単純になります

  my $in-range = $lower max $x min $upper;

because $lower max $x returns the larger of the two numbers, and thus clipping to the 
lower end of the range.

$lower max $x は二つの数値のうちのより大きな方を返すので、この範囲の下限をクリッピン
グすることになります。

Since min and max are infix operators, you can also clip infix:

minとmaxは中置演算子なので、clip infix も可能です:

 $x max= 0;
 $x min= 10;


Debugging
デバッグ

Perl 5 has Data::Dumper, Perl 6 objects have the .perl method. Both generate code that 
reproduces the original data structure as faithfully as possible.

Perl 5には Data::Dumper があり、Perl 6のオブジェクトは .perl メソッドを持っています。
このどちらもオリジナルのデータ構造を可能な限り faithfully に再生成するコードを生成し
ます。


:$var generates a Pair ("colonpair"), using the variable name as key (but 
with sigil stripped). So it's the same as var => $var. note() writes to the 
standard error stream, appending a newline. So note :$var.perl is quick way of 
obtaining the value of a variable for debugging; purposes, along with its name.

:$var はペア ("colonpair" (コロンペア?)) を生成し、その変数名をキーとして使
用します (が、sigilsは取り除かれます)。ですからそれは var => $var と同じです。
note() は標準エラー出力ストリームに書き込みを行い、改行を追加します。ここで、
:$var.perl はデバッグのために変数の値を得るための quick way であることに注意してください
purposes,
along with its name.



Sorting
ソート

Like in Perl 5, the sort built-in can take a function that compares two values, and 
then sorts according to that comparison. Unlike Perl 5, it's a bit smarter, and 
automatically does a transformation for you if the function takes only one argument.

Perl 5 のときと同様に、組み込みの sort は二つの値を比較する関数を引数として受け取るこ
とができ、それを使った比較結果に従ってソートを行います。Perl 5と違うのは、多少賢くな
っていて、自動的に変換を行うという点です。


In general, if you want to compare by a transformed value, in Perl 5 you can do:

一般的には、変換後の値によって比較を行いたいのであれば Perl 5 では次のように行えます:

    # WARNING: Perl 5 code ahead
    my @sorted = sort { transform($a) cmp transform($b) } @values;

    # or the so-called Schwartzian Transform:
    my @sorted = map { $_->[1] }
                 sort { $a->[0] cmp $b->[0] }
                 map { [transform($_), $_] }
                 @values

The former solution requires repetitive typing of the transformation, and executes it 
for each comparison. The second solution avoids that by storing the transformed value 
along with the original value, but it's quite a bit of code to write.

最初の solution は、変形の repetitive typing とそれぞれの比較のためにそれを実行するこ
とを要求します。二番目の solution は元の値に結びついた変形済みの値 (transformed value) 
を格納することによってそれを排除していますが、ちょっとしたコードを書くことを要求してい
ます。


Perl 6 automates the second solution (and a bit more efficient than the naiive 
Schwartzian transform, by avoiding an array for each value) when the transformation 
function has arity one, ie accepts one argument only:

Perl 6 は二番目の solution を automate します(さらに、naiive なシュオーツ変換 
(Schwartzian transform) よりも多少効率が良いです。an array for each value によって)


変形関数 (transformation function) がひとつの引数をとるとき

    my @sorted = sort &transform, @values;


Mandatory Attributes

The typical way to enforce the presence of an attribute is to check its presence in 
the constructor - or in all constructors, if there are many.

ある属性 (attribute) の存在を強制するための typical way (典型的な方法) は
コンストラクターでその存在をチェックするというものです
- or in all constructors, if there are many.


That works in Perl 6 too, but it's easier and safer to require the presence at the 
level of each attribute:

そのやり方は Perl 6でも動作しますが、しかし the presence at the level of each
attribute を require することはより簡単で安全です:


has $.attr = die "'attr' is mandatory";

This exploits the default value mechanism. When a value is supplied, the code for 
generating the default value is never executed, and the die never triggers. If any 
constructor fails to set it, an exception is thrown.

この exploits はデフォルト値機構です。ある値が提供されたときにはデフォルト値を生成する
ためのコードは決して実行されることはなく、die は決して引き金を引きません。仮にいずれか
のコンストラクターが失敗したならば、例外が送出されます。


MOTIVATION

N/A


■_ もしも

Haskell が明日使えなくなったら~ とかの話。


Johan Tibell: Results from the State of Haskell, 2010 Survey

Results from the State of Haskell, 2010 Survey

(略)

What language did you use just prior to adopting Haskell – or, if Haskell is not your 
primary language now, what is that primary language?

I'm only showing options that garnered more than 1% of responses; this was not a 
multiple-choice question. I might change it to be a multi-choice question next time as 
many people said they couldn't pick one language. The reason I tried to stick with one 
language is that I wanted people to try to pick one instead of listing all the 
languages they knew.

Lots of people come from the C, C++, and Java which is not that surprising given the 
sheer number of programmers that use those languages. If you look the Clojure survey 
very few people come to Clojure from C and C++. Perhaps more C and C++ programmers 
come to Haskell instead of Clojure because Haskell is a statically typed, compiled 
language with pretty good performance.

A large number of people have come over from Python. Perhaps due to that community 
having a large number of early adopters who are willing to try new languages.

Ruby    6%
Scala   2%
Scheme  3%
Other   8%
Othe  r 8%
C      10%
C++    17%
Ptyhon 16%
Perl    3%
OCaml   2%
Java   15%
Common Lisp 2%
C#      5%

If Haskell disappeared tomorrow, what language(s) might you use as a 
"replacement"?

もし明日 Haskellがなくなったなら、あなたがその代替として使うであろう言語はなんですか
(複数回答可)

OCaml       39%
Scala       30%
F#          25%
Clojure     25%
Python      22%
Erlang      19%
Scheme      16%
Other       11%
Common Lisp 10%
C            8%
Ruby         7%
C++          7%
C#           6%
Go           5%
Java         4%
Prolog       4%
Agda         4%
JavaScript   4%
Smalltalk    2%
Perl         2%
Factor       2%
Objective-C  2%

Again, I'm only showing options that garnered more than 1% of responses.

    * Perhaps unsurprisingly, the top 4 languages are all functional.
たぶん驚くことではありませんが、
上位四つがすべて関数型です。

    * 29% of people in the Clojure community would move to Haskell if Clojure disappeared,
      according to the State of Clojure survey. 25% of Haskell programmers would move to
      Clojure of Haskell disappeared.

■_ Zedが

喜んでいる。


Shedding Bikes: Programming Culture And Philosophy

By Zed A. Shaw

The Best Email I've Ever Received

I received this email today:

    Thank you for the initial python lessons via email; they were enough to get me
    going and really change my families living conditions and quality of life. You
    have made a real and tangible difference in my world I just wanted to let you
    know that before I started asking stupid questions.

That made me smile quite a lot.

Go check out Learn Python The Hard Way, my free book I'm writing to help people learn 
programming.

いけね。まだ寄付してない。

■_

Rakudo * が遅いといわれても却ってうれしいくらいだと。


I'm glad to hear "Rakudo is slow!" - Perlbuzz
I'm glad to hear "Rakudo is slow!"

By Andy Lester on August 10, 2010 12:24 AM 

I'm pretty tired of the sniping and punditry about the recent release of Rakudo Star. 
However, David Golden has put together a great article about what the Rakudo Star 
release means both to the team and to the public.

Key points from his article:

    * Rakudo Star is the first prototype of an end-user distribution tarball

    * There is no way reactions to Rakudo Star can possibly live up to the hopes and 
      dreams of those involved the project (and I say that it can't live up to the 
      expectations of those outside the project, either)

    * Rakudo Star still is a significant step forward for Perl 6

    * If anyone was waiting for Perl 6 to rescue Perl, then they'll need to keep 
      waiting.

(略)

■_ 本日の巡回から

2010年08月09日

■_

・電池
いい加減アドエスの電池がへたってきていたので、 新しい電池を買いました(6000円ちょっとはなあ)。 今までが嘘のようにローバッテリーになることがなくなったのですが、 交換した古い電池どう処分すればいいんだろう? 乾電池ならばわかるんですが。
WILLCOM Advanced/W-ZERO3[es] バッテリー(追加用) EABL15

・合成の誤謬
なんつーのを最近良く考えたりします。

・国会図書館
何年かぶりに行ってきました。 結構中身変わってましたね~。 検索端末が HP の PC 使ったものになってて台数もかなりありました。 入場のときに渡されるカードも Felica っぽいのになってました (これをキーにして検索端末やらを操作する)。 でまあ、行った目的は見事に果たせたのですが、詳しくはまた。

・浜の真砂は尽きるとも~
ということでまた致命的な間違いをしてしまって、 shiro さんからそれはちがうと教えていただきました。 ありがとうございます。

Any Perl 5 programmer who's worked with Perl 5 more than a
 few months has learned about how invaluable the Data::Dumper
 module is.

 何ヶ月かでも Perl 5で仕事をしていれば、Data::Dumper モジュールの使えなさ
 (invaluable)を知っていることだろう。

の箇所ですが、invaluableは「value=値をつける」という動詞にableが
ついて否定されたものなので、「値段をつけられない」=「かけがえのない、貴重な」
という意味になります。

(valueには「高く評価する」の意味もあるので、そっちに引きずられると
ついinvaluableが「高く評価できない」かな、と思ってしまいますが)

  

全体を通して読んだときに、なーんか意味が通らないような感じだなあ とは思ったのですが、やはり放置してはいけませんでした ○| ̄|_

■_ ソート

ついったでのやりとりで出てきたリンクなんですが Template:Sorting - Wikipedia, the free encyclopedia 結構知らないのがあった(^^;

Exchange sorts Bubble sort Cocktail sort Odd-even sort Comb sort Gnome sort Quicksort
Selection sorts Selection sort Heapsort · Smoothsort · Cartesian tree sort · Tournament sort
Insertion sorts Insertion sort Shell sort · Tree sort · Library sort · Patience sorting
Merge sorts Merge sort Polyphase merge sort · Strand sort · Timsort
Non-comparison sorts Radix sort · Bucket sort · Counting sort · Pigeonhole sort · Burstsort · Bead sort
Others Topological sorting · Sorting network · Bitonic sorter · Batcher odd-even mergesort · Pancake sorting

Library sort とかってなに。ってリンク先に飛んで確認すると 2006年発表のアルゴリズムだったり。イントロソートもわりと最近だけど ほかにもあるのだなあ。と感心した次第。

■_


Twitter / mala: Amazonウィッシュリストで送るときはギフト包装に ...

Amazonウィッシュリストで送るときはギフト包装にしないと誰から送られたのか分からないし、
ギフト包装にすると請求先住所が相手にバレます。

ある方に、その人のウィッシュリストから一点選んで贈ったのですが 何も反応がなかったのはギフト包装にしなかったからなんだろか。 ギフトを選択したと思うんだけどなあ。 まあいいや。何ヶ月も前の話だし。

■_ 最初は Perl?


Twitter / mattn: そんなダサい事やってたのか「Oracleのクライアン ...

そんなダサい事やってたのか「Oracleのクライアントライブラリを埋め込んだOraperlや,
Sybaseを扱えるようにするSybperl,Interbase対応がなされたInterperlといった派生品が」 / 
モダンPerlの世界へ… http://htn.to/U7q3ka

これは↓の記事に絡めてのことだと思うんですが、 シェアードオブジェクトやDLLを実行時にリンクしてインタープリターを拡張。 とかいうのは Perl 5が最初だったような気がするんですが、さらに遡れるでしょうか?

Perl 5 になって、ビルドの手順に miniperl という拡張モジュールなしのものを作っておいて、 それを使ってさらにビルドを進めるというものになったので DOS (や Windows)対応がちょっと遅れたんですよね。たしか。 んで、eban さんが DJGPP 用のパッチを書いたような記憶が(自信なし)。

真意は違うだろうけど、時期やらを考えれば「そんなださいこと~」は ちょっと言いすぎじゃなかろうかとは思ったり。 専用のものとはいえ、拡張できるようにはなってたわけだし。


モダンPerlの世界へようこそ:第35回 DBI:生のSQLが散らばると言う前に|gihyo.jp … 技術評論社
(略)

DBperlとDBI

dbmは,使いどころによっては便利なものですが,本格的なデータベースのかわりになるもので
はありません。そのため,バージョン3.0のリリースから半年ほどたった1990年8月には,より本
格的なデータベースにも対応できるよう,Perlをコンパイルする際にユーザが自分の好きなライ
ブラリを組み込んで使えるようにする仕掛けが用意されました。この仕掛けを利用することで,
Oracleのクライアントライブラリを埋め込んだOraperlや,Sybaseを扱えるようにするSybperl,
Interbase対応がなされたInterperlといった派生品が生まれ,Perl本体とは別に維持・公開され
ていくようになったのですが,以前にも紹介したように,これらは個々のデータベースの特徴に
強く依存していたため,さまざまな問題を引き起こすことにもなりました。

たとえば,諸般の事情でOracleのデータベースとSybaseのデータベースに同時にアクセスしなけ
ればならなくなったとしましょう。当時,特定のデータベースクライアントに紐づけられたPerl
ではほかのデータベースにアクセスできないのがふつうでしたから,両方にアクセスしたいと思
ったら,まずはそれぞれに専用のPerlを用意する必要がありました。

また,Oraperlではデータベースの接続に「&ora_login($system_id, $username, 
$password))」というコマンドを利用しますが,Sybperlでは同じ用途に引数の順序が異なる「
&dblogin($user, $pwd, $server)」というコマンドを使うとか,SQL文を用意する際も,
Oraperlの場合はふつう「&ora_open($lda, $statement)」から「&ora_bind($csr, 
$var, ...)」と続けるのが,Sybperlでは「&dbcmd($dbproc, $str)」になるといった具合
に,種々のインタフェースがデータベースごとに異なるため,開発や保守,学習にかかるコスト
が高くなるという問題もありました。

そのような状況を改善するため,1992年にはMicrosoft社がODBC(Open Database Connectivity)
と呼ばれるリレーショナルデータベースにアクセスするための共通インタフェースをリリースし,
SQL業界でもメジャーバージョンアップとなるSQL92の制定が行われたのですが,Perlの世界でも
バズ・モシェッティ(Buzz Moschetti)氏らを中心にデータベースまわりの問題を議論するユー
ザグループが生まれ,インタフェースを統一するための話し合いが始まりました。

その成果は,当初はDBperlの名でまとめられていましたが,Perl 5のアルファ版が登場すると,
それまでの関数群は新しいオブジェクト指向プログラミング風の書き方にあらためられ,Perl 
5.000誕生前夜の1994年10月12日には最初のPerl 5用DBIモジュールが関係者向けのメーリングリ
ストに公開されました。これはすぐにPerl 5のコアにも取り入れられ,その直後にリリースされ
たPerl 5.000gammaにはDBIも同梱されていたそうですが,プロジェクトの全体的な進捗状況も考
慮した結果,作者のティム・バンス(Tim Bunce)氏は最後の最後でDBIをPerl 5.000のコアから
外してもらうことを決断。惜しまれながらもコアから外れたDBIは,ラリー・ウォール氏には
「あとから追加してもいいんだし」と言ってもらっていたものの,かれこれ15年がたったいまも
Perlのコアモジュールには戻っていないのですが,コアに入っていようがいまいが,DBIがPerl
界のデファクトスタンダードとして確固たる地位を築いていることはみなさんよくご存じの通り。
いまではどんな環境であれ,Perlが入っていてデータベースが使えることになっているならDBI
も入っていると期待してもよいでしょう。


■_ なつかしい

一時期仕事で使ってたのよ。29000シリーズ。


ASCII.jp:x86初期からK5まで AMDの歩みを振り返る|ロードマップでわかる!当世プロセッサー事情

独自のRISCプロセッサー「Am29000」

 さて問題はこの次である。AMDはこうしたx86互換製品とはまったく別に、「Am29000」と呼ば
れる独自のRISCプロセッサーを開発、販売していた。これは組み込み向けを意識したもので、元々
はAMDが1975年に発売したAm2900ファミリーの後継にあたる。

 「Bit slice」という名前で知られるこのシリーズは、演算器を4bitの倍数で適当に増やす(2
つ並べれば8bit、3つ並べれば12bitの演算が可能)ことを念頭に置いたユニークな製品である。
Am29000系はSunの「SPARC」などと同じく、レジスターウインドウを持つ32bit RISC CPUである。

 このAm29000ファミリーの最初の製品であるAm29000は、1988年に発表されて、特にレーザープ
リンター向けなどでは非常にシェアが高かった。Adobeの「PostScript」を最初に実装したター
ゲットが、Am29000というのは象徴的である。

 同シリーズはそののちも、バリエーションを増やしながら組み込みマーケットではそれなりの
シェアを握っていた。しかし、1995年にAMDは突如Am29000の発売を打ち切り、設計チームをまる
ごとx86向けの開発に移行させる。その結果として登場したのが「AMD K5」であり、これはよう
するに、「Am29050」(Am29000ファミリーの性能向上版。FPUやBTACなどを内蔵)にx86命令のデコ
ーダーを組み合わせたものである。

 追加されたデコーダ段で、x86命令をAm29000のRISC命令に変換、これをAm29000のエンジンで
処理するといった構造であった。残念ながら、Am29050そのものはシングルスケーラー・インオ
ーダー実行のプロセッサーであり、一応はスーパースケーラー動作の「Pentium」と、性能面で
競うのは困難だった。

 おまけに1995年末には、インテルが「Pentium Pro」をリリースする。こちらはスーパースケ
ーラーにアウトオブオーダー、さらに(当時としては極めて多い)10段以上のスーパーパイプライ
ン構造を取っており、Am29000の延長では太刀打ちできないことは明白だった。一応は途中でプ
ロセスを微細化し、117MHz駆動の製品が「AMD K5 PR166」(整数演算性能がPentium/166MHz相当
の意味)として販売される程度までは頑張ったが、ここで打ち止めとなった。

 次回はK6以降を解説する。

29000のはレジスタウィンドウというよりはスタックキャッシュにしてて、 SPARC のそれとはちょっと違うものだったような。 まあ、癖は強かったけど面白い石でした。

■_

リファクタリングの必要性を判定してくれるツールだとか何とか。


Perl Code Statistics - Find that smell of code in need of refactoring : perl

Perl Code Statistics - Find that smell of code in need of refactoring (gist.github.com)

I should note that i posted this specifically looking for criticism, so i would be 
grateful if down-voters could leave a word or two as to why they are doing so. :)


Result of running it over my Perl installation. Depth detection seems to be working 
fine now and finds some pretty ugly constructs.

### Average Block Length
12.1921178249061

### Average Block Size
351.142237945591

### Average Block Depth
1.37439390803084

### Top Ten Longest Blocks
  File                                           Line Lines   Size Depth    Dev.
================================================================================
site/lib/Module/ExtractUse/Grammar.pm               5  3689 102499     0  302.57
site/lib/ExtUtils/XSpp/Grammar.pm                 494  2944  45805     2  241.47
lib/perl5db.pl                                   1859  1686  61080     0  138.29
site/lib/Bio/SearchIO/blast.pm                    443  1414  53587     1  115.98
site/lib/DBD/Pg.pm                                246  1405  55545     0  115.24
lib/perl5db.pl                                   2165  1383  50915     2  113.43
site/lib/Bio/SearchIO/blast.pm                    460  1374  52164     2  112.70
lib/perl5db.pl                                   2255  1206  44745     1   98.92
site/lib/Bio/SearchIO/fasta.pm                    209  1189  44556     1   97.52
site/lib/Bio/SearchIO/fasta.pm                    219  1168  43980     2   95.80
lib/perl5db.pl                                   2294  1144  42619     4   93.83

### Top Ten Biggest Blocks
  File                                           Line Lines   Size Depth    Dev.
================================================================================
site/lib/Module/ExtractUse/Grammar.pm            3694  1029 106845    12  304.28
site/lib/Module/ExtractUse/Grammar.pm               5  3689 102499     0  291.90
lib/perl5db.pl                                   1859  1686  61080     0  173.95
site/lib/DBD/Pg.pm                                246  1405  55545     0  158.18
site/lib/Bio/SearchIO/blast.pm                    443  1414  53587     1  152.61
site/lib/Bio/SearchIO/blast.pm                    460  1374  52164     2  148.56
lib/perl5db.pl                                   2165  1383  50915     2  145.00
site/lib/ExtUtils/XSpp/Grammar.pm                 494  2944  45805     2  130.45
lib/perl5db.pl                                   2255  1206  44745     1  127.43
site/lib/Bio/SearchIO/fasta.pm                    209  1189  44556     1  126.89
site/lib/Bio/SearchIO/fasta.pm                    219  1168  43980     2  125.25

### Top Ten Deepest Located Blocks
  File                                           Line Lines   Size Depth    Dev.
================================================================================
site/lib/Math/BaseCnv.pm                           71     5    428    20   14.55
site/lib/XML/Tidy.pm                               56     7    562    18   13.10
site/lib/Bio/Tools/Run/StandAloneNCBIBlast.pm     187    12    888    13    9.46
lib/CPANPLUS/Internals/Constants/Report.pm        301     4    204    13    9.46
site/lib/CPANPLUS/Internals/Constants/Report.pm   301     4    204    13    9.46
site/lib/Net/SFTP/Foreign/Common.pm               314     4    204    13    9.46
site/lib/Module/ExtractUse/Grammar.pm            3694  1029 106845    12    8.73
lib/CPAN/Distroprefs.pm                           157    35   1213    12    8.73
lib/CPANPLUS/Internals/Constants/Report.pm        300    11    637    12    8.73
site/lib/CPANPLUS/Internals/Constants/Report.pm   300    11    637    12    8.73
site/lib/Net/SFTP/Foreign/Common.pm               312     7    425    12    8.73


右側の数字の見方が良くわからん。Size は何かの単位でのプログラム(スクリプト)の 大きさとして、Depth は呼び出しの最大の深さ? Dev. はなんだろう。

■_ ふとした疑問

またもついったからですが


Twitter / Rui Ueyama (植山類): A Retargetable C Compiler本 ...

A Retargetable C Compiler本のおかげでCの宣言の文法がわかってきた。これ人間に読みづらい
けどコンピュータでもパーズしづらい。複雑さの意味がない。

C の宣言どうこうはおいといて(えーっ)、FORTRAN の空白を無視する字句解析って 結構実装も大変そうな気もするんですがどうなんでしょうか。 入力がカードやテープだったので、人間からの入力としてそういう仕様が 都合よかったのだろうかとは思うのですが(ん、COBOLはどうだ?)、 そのために払った労力はどのくらいなのかというのが気になりました。

んでも、Cの宣言って、宣言だけ切り出せれば 演算子順位法でも結構行けそうな気も。 最初の C コンパイラーのソースって読めるんだろか。

■_ もしも明日 Haskell がなくなってしまったら

以前 Clojureであった話ですが Results from the State of Clojure, Summer 2010 Survey - Chas Emerick - Muck and Brass Haskell 版です。 アンケートの生データは以下のリンクから取れます (前者が Google Docs、後者が HTML)。 https://spreadsheets.google.com/ccc?key=0AiZ8xw4sxde1dGVsZkY1S0R3WUt6aTRaTGJQUVp0MUE&hl=en
http://www.johantibell.com/files/state-of-haskell-2010.html


Johan Tibell: Results from the State of Haskell, 2010 Survey

Results from the State of Haskell, 2010 Survey

One week ago, I sent out a survey where I asked Haskell developers a few quick 
questions about their background and Haskell usage. Like the State of Clojure survey, 
I was trying to figure out

    * where Haskell programmers "come from",
      Haskellプログラマーはどの言語から移って来たか

    * in which domains Haskell is being used,
       Haskell が使われている領域は

    * to what extent Haskell is used commercially, and
      Haskell を広く商業的に使われるようにするには

    * what the major weakness in the Haskell ecosystem are.
      Haskellのエコシステムの抱える主な弱点とは

I got 804 responses, which is more than I expected. Since the survey was sent out to 
the main Haskell mailing lists, posted on my blog, and announced on Twitter there's 
most likely some selection bias in the results. However, given the number of replies, 
I still think the results are indicative of the community as a whole.

回答は804通。

Without further ado, here are the results, together with some comments by me. You can 
find a link to the raw data at the end of this post.

How long have you been using Haskell?

The Haskell community continues to grow. Almost 75% joined the last three years.

How would you characterize your use of Haskell today?

    * Lots of people use Haskell in their spare time for open source work.
    * Lots of people, like me, first discover Haskell in school.
    * I'm glad to see that as many as 25% are able to use Haskell at work, to some extent.
    * Many people are also currently tinkering with Haskell, perhaps looking for some
      "real" project to try it out on.

(略)

What language did you use just prior to adopting Haskell – or, if Haskell is not your 
primary language now, what is that primary language?

I'm only showing options that garnered more than 1% of responses; this was not a 
multiple-choice question. I might change it to be a multi-choice question next time as 
many people said they couldn't pick one language. The reason I tried to stick with one 
language is that I wanted people to try to pick one instead of listing all the 
languages they knew.

Lots of people come from the C, C++, and Java which is not that surprising given the 
sheer number of programmers that use those languages. If you look the Clojure survey 
very few people come to Clojure from C and C++. Perhaps more C and C++ programmers 
come to Haskell instead of Clojure because Haskell is a statically typed, compiled 
language with pretty good performance.

# C や C++ が多かった

A large number of people have come over from Python. Perhaps due to that community 
having a large number of early adopters who are willing to try new languages.

# 新しい、トライする言語として など

If Haskell disappeared tomorrow, what language(s) might you use as a "replacement"?

Again, I'm only showing options that garnered more than 1% of responses.

    * Perhaps unsurprisingly, the top 4 languages are all functional.
    * 29% of people in the Clojure community would move to Haskell if Clojure disappeared,
      according to the State of Clojure survey. 25% of Haskell programmers would move to
      Clojure of Haskell disappeared.

(略)

余裕があったら元データからもっと詳しく見てみたい。 ってまあ元記事にチャート(グラフ)がたくさんあるんですけどね。

■_ ねた

まあ、スレからみれば脱線なんですが。


あそびにいくヨ! 守礼皇15号 
528 風の谷の名無しさん@実況は実況板で [sage] 2010/08/09(月) 22:21:45 ID:Y7geN5340 Be:
    まあGP02が核バズーカを使用しても宇宙空間ではあんな大惨事になるはずがないというのはガチ 

533 風の谷の名無しさん@実況は実況板で [sage] 2010/08/09(月) 22:26:45  ID:uv00naRi0 Be:
    >>528
    エネルギー保存の法則で、地表で衝撃波になるエネルギーは全て熱線や放射線になるそうだ
    詳しいことは軍板に聞いてくれ 

536 風の谷の名無しさん@実況は実況板で [sage] 2010/08/09(月) 22:32:40 ID:uv00naRi0 Be:
    >>533
    追記
    ttp://mltr.ganriki.net/faq09e02d.html#16302

    やっぱタダではすまないようだな 

544 風の谷の名無しさん@実況は実況板で [sage] 2010/08/09(月) 22:39:00 ID:AewUGyiX0 Be:
    >>536
    高層大気でのEMP効果は、ガンマ線が空気を電離するせいだから
    いわゆる「宇宙空間」だと電離する空気が無くてあんまし効かない気がするぜ。 

実際のところどうなんでしょ。 劇中のあれはいくらなんでもやりすぎ(威力ありすぎ)な気がするのですが。

■_ 本日の巡回から

2010年08月08日

■_

・買った
玄人のひとりごと 11 が出てたので買った。 10巻から2年くらい開いてるのね。 南倍南勝負録 玄人(プロ)のひとりごと 11 崖の上の玄人の巻 (ビッグコミックススペシャル)

んで、 『エピソードでたどるパソコン誕生の謎』 をみかけたのでちょっと中身を見てみたのだけど、 史上最初のコンピューターを ENIAC だとするのはまあいいとしても、 EDSAC は完全無視とかバベッジの名前はちょっとだけ出てくるのに チューリングは皆無とか最初のノイマン型コンピューターは EDVAC だとか (完成時期からすればEDSAC などが先行)。 ENIAC を最初とするかどうかは議論の余地があるとしても、 EDSAC を無視 (索引にも見あたらなかった) というのは問題じゃあなかろうかと思います。

■_ 本日の巡回から

■_

これもまたありがちな


Excel VBAのプログラミングのツボとコツがゼッタイにわかる本を購 | OKWave

Excel VBAのプログラミングのツボとコツがゼッタイにわかる本を購入しましたが…

なんか、説明が細かすぎるし、思ってたより、本が大きいし…。

一応、この本読みたいと思いますが…。

私は、C言語・Prelはやったことがあります。

うまく、質問できるかわかりませんが、

ExcelのマクロやVBAを夏休み中に一通り出来るようにしたいと思っています。

皆さん、お勧めの本はありますか?

よろしくお願いします。

ANo.2

言いたいことはなに?。
文章の主旨が2・3転しているが、質問に書かなければならないことか。
・在る本に対する不満(どの本か書いてない)
・言語経験あり
・勉強の決意
・お勧めの本
ーー
大型書店でEXCELVBAの本を手にとって、300ページぐらいの本を択び購入して、その解説例題をまずやったら。この上は700ページくらいの本だが、はじめには大部すぎる。
市販されているVBAの本は、初心者向けしか売れないから、初心者向けで、どれも似たり寄ったりのレベルと内容。どれかに決めて読み通す・パソコンで解説例題をやってみる、が大切では。
質問に書いている言語経験も、そんなに役立たないだろう。職業として経験したものではないでしょう。各1冊の本を読んだ程度じゃない。
ーーー
時どきこのコーナーに本を紹介してくれとか、勉強法を聞くものがでる。
しかし、やる人は質問などしないで、自分で決めてやっていると思う。1ヶ月の間に完全マスターのような受験思考パターンはやめて、自分で興味を持続させることが大切です。1ヶ月ではそれなりにしか判らない。
VBAはEXCELの機能の影のようなものだから、EXCELの機能を良く勉強しておくことが根底に必要でしょう。
あるいはこの質問コーナーにどういう質問が出て居るか調べるのも有意義かも。
VBAより前に、文章の作り方を訓練できるならしたほうが、色んなところで(例えば対人コミュニケーション、就職活動などに)役に立つように思う。

ANo.1

aloha8861

お勧めの本?

自分で探すしかありませんね
だって 冒頭の本ではわかりにくかったんでしょ?

ワタシはそれ わかりやすいと思いますし・・

感覚は人それぞれなんで答えようがありません

ただ、 夏休み中に一通りできるようなるのは
まず不可能だと思います

具体的な作成課題があって それを軸にやればある程度上達はするでしょう
しかし 理解できたとしてもその範囲に限られるでしょう

VBAで扱える範囲は以外に広いです

■_ これって

ファクトリーパターン調べろ。でいい話じゃあ。 それだと突き放しすぎ?


「new 式」 で、変数を 式 として指定することはできますか? | OKWave

「new 式」 で、変数を 式 として指定することはできますか?

例えば次のような感じで、変数clの内容によりclassAあるいはclassBを new するようなことがしたいです。

class base [ ... };
class classA : public base { .... };
class classB : public base { .... };
classA* ca;
classB* cb;
base* cl;
cl = classA;
ca = new cl;
cl = classB;
ca = new cl;

これにより、多種のclassをnewする際にいちいち

pa = new classA;
pb = new classB;
pc = new classC;
pd = new classD;
............

としないで、

for (n=0; n<xxx; n++)
   p[n] = new cl[n];

…みたいに簡潔に書けないかなと考えてます。
よろしくお願いします。

ANo.3

VS2008(VC++9)だとfunction,lambda,arrayが使えないので代わりにこんなかんじ:

#include <iostream>
#include <map>
#include <string>

using namespace std;

class base {
public:
    virtual void hello() const =0;
};

class classA : public base { void hello() const { cout << "classA\n"; }};
class classB : public base { void hello() const { cout << "classB\n"; }};
class classC : public base { void hello() const { cout << "classC\n"; }};
class classD : public base { void hello() const { cout << "classD\n"; }};

base* makeA() { return new classA; }
base* makeB() { return new classB; }
base* makeC() { return new classC; }
base* makeD() { return new classD; }

int main(){
    typedef base* (*createfn)();
    map<string,createfn> factory;
    factory["classA"] = &makeA;
    factory["classB"] = &makeB;
    factory["classC"] = &makeC;
    factory["classD"] = &makeD;

    const char* names[] = { "classA", "classB", "classC", "classD" };
    for ( int i = 0; i < 4; ++i ) {
        base* p = factory[names[i]](); // 名前からクラスを生成
        p->hello();
        delete p;
    }
}

お礼

回答、ありがとうございます。
最初のListは理解できなかったのですが、今回のは良く分かりました.
newしたobjectのポインタを同じクラスのポインタに代入する方法を
含めて勉強してみます。

ANo.2

Tacosan

ん~,
p[n] = new cl[n];
書くとして, p の型はどうするつもりなんだろう.
オブジェクト指向的には
class base { virtual base *create() = 0; };
class classA : public base { classA *create() { new classA; } };
(以下略)
として
base *p = anObject->create();
というのがよくある?

補足

回答ありがとうございます。
生成済みのInstanceから子を産ませるという方法でしょうか。
この質問ですこし考えたのですが、create()したものをbase
のpointerに入れてもclassAなどの独自methodにはアクセス
できないので、同じ派生クラスのポインタに代入できるような
方法を勉強してみたいと思います。


ANo.1

うーん...やれなくはないけどエレガントじゃありませんよ。

#include <iostream>
#include <map>
#include <functional>
#include <string>
#include <array>

using namespace std;

class base {
public:
    virtual void hello() const =0;
};

class classA : public base { void hello() const { cout << "classA\n"; }};
class classB : public base { void hello() const { cout << "classB\n"; }};
class classC : public base { void hello() const { cout << "classC\n"; }};
class classD : public base { void hello() const { cout << "classD\n"; }};


int main(){ 
    map<string,function<base*()>> factory;
    factory["classA"] = [](){return new classA;};
    factory["classB"] = [](){return new classB;};
    factory["classC"] = [](){return new classC;};
    factory["classD"] = [](){return new classD;};

    array<string,4> names = { "classA", "classB", "classC", "classD" };
    for ( int i = 0; i < 4; ++i ) {
        base* p = factory[names[i]](); // 名前からクラスを生成
        p->hello();
        delete p;
    }
}

# Visual Studio 2010 (VC++10) で動作確認済

補足

回答、ありがとうございます。
VC++2008 Exp で compile すると次の Errorが出ます。
    'function' : 定義されていない識別子です。
対応方法を教えていただけますでしょうか。
よろしくお願いします。


■_ ありがち(その n)

ポインターは宣言してもポインターを作るだけで、指すべき対象を作るわけじゃないと。


char型ポインタについて質問です。 - Yahoo!知恵袋

以下のソースをご覧ください。

#include <stdio.h>

int main() {
    int c; char *s;
    if((c =fgetc(stdin)) != EOF) {
        *s = c; // ここでセグフォールト
        printf("*s = %s\n", s);
    }

    return 0;
}

「*(ポインタ変数名)」で通常の変数と同様に
扱うことが可能のはずなので、以下のプログラムを書きました。

#include <stdio.h>

int main() {
    int c; char s;
    if((c =fgetc(stdin)) != EOF) {
        s = c;
        printf("s = %c\n", s);
    }

    return 0;
}

しかし、此方はセグフォールトになりません。

上記のとおり、*をつければポインタ変数も
通常の変数と同様に扱うことができるはずなのですが、
前者で*sにint型値を代入するとメモリアクセス違反に
なる理由がわかりません。

原因をご教授願います。
よろしくお願いします。

回答
ポインタは場所と型を示すだけで、
示された領域が有効かどうかは
プログラマーが管理しなければならない。

文字列は'\0'で終端されていなければならない。


Copyright (C) 2010 Yahoo Japan Corporation. All Rights Reserved.

■_ alias

久しぶりに見たなあ


スレを勃てるまでもないC/C++の質問はここで 16 
273 デフォルトの名無しさん [sage] 2010/08/07(土) 20:27:24 ID: Be:
    >g++とgccの違いはデフォルトでC++のファイルとして扱うか
    >というところが違うだけだったはずです。
    結局違いって何よ? 

276 デフォルトの名無しさん [] 2010/08/07(土) 21:31:11 ID: Be:
    >>273
    g++はgccにc++オプションをつけたアライアス 

286 デフォルトの名無しさん [sage] 2010/08/07(土) 22:02:54 ID: Be:
    >>276
    g++ = gccなんだね
    thx 

alias は「アライアス」とは読まんよ >276

エイリアスとは【alias】 - 意味/解説/説明/定義 : IT用語辞典
エイリアス 【alias】

偽名、別名、通称などの意味を持つ英単語。ITの分野では、ファイルなどの実体を別の名前で参
照するためのシンボルといった意味で使われることが多い。

Mac OSで、よく使うファイルやフォルダの分身を別のデスクトップやランチャーに置き、すぐに
参照できるようにする機能をエイリアスという。エイリアスを削除しても本体には何の影響もな
く、エイリアスはいくつでも作成でき、どこに置いてもよい。Windowsでは同様の機能をショー
トカット、UNIXでは似た機能をシンボリックリンクという。UNIXでエイリアスと言った場合はコ
マンドを別名で登録する機能ことを言う。

(略)

■_ Erlang プログラミング

訳が…という話が

Erlang プログラミングは読んでいると頭が痛くなってくる ... 翻訳ひどいなぁ。
http://twitter.com/voluntas/status/20558234328

オライリーの Erlang 本 ... 翻訳 @shibukawa  で監修 @itawasa で出し直して ... お願いだから orz
原本が凄く素敵な分、悲しく見えてくる。
http://twitter.com/voluntas/status/20560061978

原著はとても素晴らしいです。幅広く「今」の Erlang 事情を考慮して書いてありますので凄くお薦めします。
RT @ymotongpoo: 原著は @kuenishi にチラ見させてもらったときに大変良かったことを覚えています。
http://twitter.com/voluntas/status/20560726367

原文抜粋: A common way to use dirty operations while ensuring data consistency is to
serialize all destructive operations in a single process.
http://twitter.com/voluntas/status/20561097706

Erlang プログラミング: きわどいオペレーションをデータの一貫性を保証しながら使用する共通的な
方法は、全ての破壊的オペレーションを単一のプロセス内で直列化することです。
http://twitter.com/voluntas/status/20561113071

.@ymotongpoo 訳: 安全性が保証されない操作の中でも、データの一貫性を確保する際には、すべての
破壊的操作を単一プロセスの中でシリアライズするのが一般的な方法です。
http://twitter.com/voluntas/status/20561160156

  

Togetter - 「オライリージャパン 「Erlangプログラミング」の日本語訳に関する問題点など」

さてどーすっかね。

■_

ン年ぶりに国会図書館行ってくるか。

2010年08月07日

■_

・なんというか
客足(客単価だったかな)が落ちてきている居酒屋業界が対策(?)として、 注文を席に設置されたタッチパネル端末でできるようにして人件費を削減し、 メニューに載っているものの値段を安く固定 (250円 と500円だったかな)したとか なんとかいうニュースを見て、なんというか絶望的な気分になってきた。

ってそれは最近この辺の本を立て続けに読んだせいかも。
浜 矩子の「新しい経済学」  グローバル市民主義の薦め  角川SSC新書 (角川SSC新書) ユニクロ型デフレと国家破産 (文春新書) グローバル恐慌―金融暴走時代の果てに (岩波新書) スラム化する日本経済 4分極化する労働者たち (講談社プラスアルファ新書)

・パワポたん
前作? の Amazon.co.jp: 電撃PC [超解]Excelたん: 枚田 香, 朝霞 シキ, 笹井 さじ: 本 はスルーしたんですが(内容そのものは良くできていたと思いますが、 自分が知っていることがほとんどだったので)、 Amazon.co.jp: 電撃PC [超解]パワポたん 社会人までに身につけたいプレゼン力を磨け!: 枚田 香, 朝霞 シキ, ひづき 夜宵, 256: 本 は買ってしまいました。 いや、なんつーか、なんのために(パワーポイントつかって)プレゼンするの? といったことも書かれていますし、 スライド作成に対するアドバイスもポイントを抑えていると思います。
電撃PC [超解]パワポたん 社会人までに身につけたいプレゼン力を磨け!
さて次はなにが? (Word?)

そしてもう一冊
先行販売っぽいのですが、まあ見つけてしまったし 安かったしぱらぱらと眺めた分には面白かったので買ってしまったのですが、 実際面白かった。
間違いだらけのソフトウェア・アーキテクチャ―非機能要件の開発と評価 (Software Design plus)

  Amazon.co.jp: 間違いだらけのソフトウェア・アーキテクチャ― 非機能要件の開発と評価 (Software Design plus): Tom Engelberg, 長谷川 裕一, 土岐 孝平: 本
内容紹介

ソフトウェア工学における幻の著『Downward Bound for Software Architecture』をベースにソ
フトウェア開発におけるアーキテクチャの真髄を解説。巷間を賑わすITアーキテクトの真の姿・
あるべき姿を問い,様々な開発手法に対してそれが本当に役立つのか極めて現実的な見地から批
判を加える。一方でSEI(カーネギーメロン大学ソフトウェア工学研究所)が提唱するATAMやADD
を応用した実現手法の紹介など,アーキテクチャの構築だけではなく,実際に効果的だったリフ
ァクタリングやメトリクス測定なども惜しみなく解説する。 "

  

かくたにさんとかは読むといいと思うよ!(多分知ってるだろうけど)

■_ 落とし穴

まあこれは…


しーげんごかいぎょうこーど(ひょっとしたら Windows 限定?) - 今日の雑記

に悩まされた一日でした。いい加減体で覚えてくださいよまったくもう。

何かと言うと、

    input >> 0x0d 0x0a /* こういうバイナリが来たとしてください */

んで、それを例えば、

for(i = 0; i < len; i++){
    putchar(buff[i]);
}

とするとですねえ、

    output >> 0x0d 0x0d 0x0a

となるんですよねえ...。

原因は何かと言うと、2バイト目の「0x0a」で、こいつは「putchar(0x0a);」とか「
printf("%c", 0x0a);」とかすると、自動的に、

    output >> 0x0d 0x0a

となるんですよねぇぇぇぇぇぇぇぇ...。

ボクの3時間を返して!<のまえにお前の知識の浅はかさがそれを生み出している事をもうちょ
っと考えろ

いまさらテキストモードなくすとかも問題ありなんだろうなあ >Windows向けとか

■_ Perl 6 has data dumping built in

Ruby の p メソッドみたいなもん?


Perl 6 has data dumping built in - Perlbuzz
Perl 6 has data dumping built in
By Andy Lester on August 5, 2010 11:03 AM

Any Perl 5 programmer who's worked with Perl 5 more than a few months has learned 
about how invaluable the Data::Dumper module is. The ability to say

何ヶ月かでも Perl 5で仕事をしていれば、Data::Dumper モジュールの使えなさ (invaluable)
  を知っていることだろう。そして


何ヶ月かでも Perl 5で仕事をしていれば、Data::Dumper モジュールのありがたみ
(invaluable) というものを知っていることだろう。


#あれ、「ありがたみ」って辞書にない?

use Data::Dumper;
print Dumper( \%hash );

is a godsend to debugging data structures of any complexity.

とできることは、複雑なデータ構造をデバッグするのに godsend (幸運の賜物) である。

Perl 6 has this dumping built in.

Perl 6 はこのダンプ機能を組み込みで持っている。

uniqua:~/rakudo/lab $ cat dumper
#!/usr/local/bin/perl6

use v6;

my %hash = (
    'this'     => 'that',
    'year'     => 2112,
    'matcher'  => regex { ^ M(r|rs|s)\. \s+ (\w+) \s+ Wall $ },
    'rational' => 0.5,
    'num'      => (0.5).Num,
);

say %hash.perl;
# Or %hash.perl.say

uniqua:~/rakudo/lab $ ./dumper
{"num" => 0.5, "this" => "that", "year" => 2112,
"rational" => 1/2, "matcher" => { ... }}

Regex dumping does not display the actual regex yet, but Patrick Michaud says it's 
coming soon.

Regex のダンプはまだ実際の regex を出力しないけれども、Patrick Michaud は
これはすぐに実装されるだろうと述べている。と。

■_ さいごのひとつ

まあ確かに、ループの最初の一回目と最後の一回は見分けられたら便利なこともあるけど (Perl だと $. の値がびみょーに変わって見分けがつくようになってたなあ。たしか)。


python: how do i know when i am on the last for cycle - Stack Overflow

for i in range(len(results_histogram)):
    if i!=len(results_histogram)-1:
      url+=str(results_histogram[i])+','

my if statement is checking whether i am on the last loop, but it is not working. what 
am i doing wrong?
To avoid the question slightly, you seem to have rewritten str.join:

','.join(results_histogram)

If you get an error like TypeError: sequence item 0: expected string, int found, then 
you can convert the intermediate results to a string with

','.join(map(str, results_histogram))

str.join is undoubtedly more efficient than concatenating multiple strings in a loop, 
because in Python, strings are immutable, so every concatenation results in the 
creation of a new string, which then has to be garbage collected later.

Specifically, your example is "not working" because you skip the last 
element entirely, when you only want to skip adding the comma. This is clear and 
obvious with a small example:

>>> x = [1,2,3]
>>> for i in range(len(x)):
...   if i != len(x) - 1:
...     print str(x[i]) + ',',
... 
1, 2,

So you could rewrite your example as

for i in range(len(results_histogram)):
    url += str(results_histogram[i])
    if i!=len(results_histogram)-1:
      url += ','

But you should still stick with str.join.
I agree with @Mark Rushakoff in that using join would be the best. I wanted to just 
comment on this but I do not have enough rep to do so =(

Anyways, also look into the built-in enumerate() function. The documentation can be 
found here.

A way you could've coded your solution using enumerate would be:

for i, res in enumerate(results_histogram):
    url+=res
    if i != len(results_histogram)-1:
       url+=','

Assuming url is declared somewhere previously. Again, using join for your situation 
would be better. This is just showing you enumerate for future situations where you 
might want to do something besides string concatenation.
Mark is certainly right for your example, but sometimes cases like this occur where 
there doesn't exist such an elegant alternative. Then you could do something like:

if len(results_histogram):
    url += str(results_histogram[0])
    for i in range(len(results_histogram))[1:]:
        url += ',' + str(results_histogram[i])


Using a variable to increment through a list is generally unnecessary. A slice will 
return everything except the last element.

This example follows your syntax:

for el in results_histogram[:-1]:
    url += str(el) + ','

Or you can complete the whole thing with a generator expression:

','.join(str(el) for el in results_histogram[:-1])

まあふつーは、join でうっどぼーだよねえ。

■_ Lisp のわけ

なぜ Lisp を選ぶのかという理由


Top Reasons To Use Lisp

There several reasons to learn a new language. Lisp is on the languages that I like a 
lot, although I haven't been lucky to use it for work.

Here is what I believe are some good reasons to give Lisp a chance:

    * It has a very regular syntax: everything is an s-expression (expression with 
      parenthesis), so there is no surprises in terms of syntax. After you learn how
      to create functions and work with data types, there is not much to worry about.

      非常に regular な構文を持っている: すべては S 式 (カッコを伴った式) であり、
      そのため構文においてびっくりするような要素はない。関数の作り方を学んで、どのよう
      にデータ型を扱うかを学べば、それほど不安になる要素はない。

    * It has a huge library: if you decide to use Common-Lisp, the languages comes 
      already with a ton of useful functions.

      大規模なライブラリがある: Common-Lisp を使うことを選択すれば、それには
      山ほどの有用な関数がすでにある。

    * It is multi-paradigm: unlike Java that forces you to write OO code, Lisp supports
      several paradigms: functional, OO, declarative (Prolog style), and even imperative.

      マルチパラダイムの言語である: オブジェクト指向のコードを書くことを強制する Java
      とは違って、Lisp はいくつかのパラダイムをサポートしている: 関数型、オブジェクト指向、
      宣言型 (Prolog スタイル)、そして命令型すらも。


    * Third-party libraries exist: different from a few years ago, libraries for Lisp 
      are available for most applications. There are a few web sites like clbuild that 
      provide all libraries you need in a simple-to-install package.

      サードパーティ製のライブラリがある:


    * It is a compiled language: unlike languages such as Python and Ruby that are 
      interpreted, Lisp is compiled (to machine language, not to an intermediate
      language such as Java). This makes it extremely fast compared to other dynamic
      languages. Its compiler also has options to generate typed expressions, so that
      you can get the ultimate speed when working with integers and floating point
      numbers.

      コンパイル型の言語である: Python や Ruby のようなインタープリットされる言語とは
      異なり、Lisp は (Javaのように中間言語にではなく機械語に) コンパイルされる。
      このことは、ほかの動的言語と比較したときに Lisp を extermely に高速にするものである。
      Lisp コンパイラーは型付の式 (typed exoressions) を生成するオプションも持っている
      ので、整数や浮動小数点数を使うときに ultimate speed を得ることが可能。


    * It is a modern language: implementations such as sbcl (available for Windows too), 
      and clojure (for Java) make it possible to create modern applications that are
      just as fast as any other language (including C).

■_ 気になる

ついったでまつもとさんいわく


Twitter / Yukihiro Matsumoto: Ruby合宿にPython Tシャツを着ていこうとし ...

Ruby合宿にPython Tシャツを着ていこうとしたら、家族に反対された。

まつもとさんがなぜ Python Tシャツを着ていこうとしたのか。ではなく、 なぜ家族がそれに反対したのかが気になる(笑)

■_ 本日の巡回から

■_ 目利き

組み込みプログラマー雑談スレッド その15 
646 仕様書無しさん [] 2010/08/06(金) 15:46:17 ID: Be:
    日本で出ているソフト関係の本って、技術書と呼ばれるようなものの大半は
    ほぼ漏れなく海外の本を和訳したものか、ヘルプファイルを紙に印刷した
    だけの単なる関数リファレンスじゃない?

    初心者向けの本は、ツール付属のサンプルコードの内容を掻い摘んで解説
    しているとか、インストールのダイアログ画面をハードコピーしてページ
    数を水増ししたようなのとか。 

647 仕様書無しさん [sage] 2010/08/06(金) 15:47:15 ID: Be:
    藁をもつかむ思いで買ったけど糞本だとガッカリ 

648 仕様書無しさん [sage] 2010/08/06(金) 15:50:25 ID: Be:
    どんだけ田舎の本屋なんだ?
    よほど置かれている本が限られている小さな本屋なんだな 

649 625 [sage] 2010/08/06(金) 18:00:48 ID: Be:
    田舎の小さな本屋に組込みの専門書なんて置いてないだろ 

651 仕様書無しさん [sage] 2010/08/06(金) 20:53:51 ID: Be:
    アマゾンのレビューも競馬予想みたいなもんだしな。 

655 仕様書無しさん [] 2010/08/07(土) 16:30:54 ID: Be:
    >>647
    糞本を大量に掴んで学習しないと良い本に巡り会えない 

656 仕様書無しさん [] 2010/08/07(土) 17:30:12 ID: Be:
    町に出たとき大きな書店めぐるといいよ
    できれば工学部のある大学近辺とかメーカーの研究所がある近辺とかがベスト 

657 仕様書無しさん [sage] 2010/08/07(土) 17:34:39 ID: Be:
    新宿紀伊国屋とかいいな 


655 のいう通りだよなあ。

2010年08月06日

■_

夏休みらしい。

■_ 頻出質問

もう MMIX とかでいいよ。


おすすめのプログラミング言語を教えてください | OKWave

おすすめのプログラミング言語を教えてください

理由とともに回答をお願いいたします。

ちなみに私はこれからプログラミング言語を覚えようと思っている初学者です。

ANo.3


C++ にしろ Java にしろ C# にしろ, 「C に似てるといえば似てるけど違う」と思った方がいい
です. 制御構造などの構文では似ていますが, そうでないところではわりと違いは大きいです.

ANo.2

cとjavaもしくはVB,php。
それぞれの特徴を掴んで自分が求めているものを選んで下さい。

覚えるならCですけど、使うなら他の奴の方がいいと思います。

Cってクセはあるけど機械よりなので学ぶのにはいいと思う。
それがあると、javaとか便利だなって思うし。
先にjavaとかVBしちゃうとやりたいことが出来なくてストレス貯りそう。

使うのが目的なら適当に選んでやっちゃえばいいと思います。

お礼

 ご回答ありがとうございます。

 覚えるならC言語なんですね。うーん、C++とか他にもCがつく言語がありますが、それら
  はCと似たような言語なのかそれとも全く違うのでしょうか。

とにかくおすすめのC言語とJavaのことを調べてみますね。

ANo.1

うーん?
プログラミング言語を覚えることが目的ですか?
そのプログラミング言語で何らかのソフトウェアを作ることが目的ではないのでしょうか?

言語によって得意/不得意があります。
例えばWebアプリケーションを作るなら、Java,Perl,PHP,Ruby,ASP.NETなどの言語を使うのが良いです。
Windowsアプリケーションなら、VB.NET,C,C++,C#.NETの方が良いです。
Flashでゲームを作るのならAdobe Flash(Action Script)になりますし、
機械を直接制御するならCやアセンブラを使います。

何をしたいかによってお勧めが変わってきますので、やりたいことを補足してください。

 ご回答ありがとうございます。

 将来プログラマーの職業に就きたいと思っていて、なれるかどうかはわかりませんがもしなれ
たら色々な言語を学ばなければいけないと思うので、どうせ学ぶなら早いうちから色々学んでお
こう思いこのような質問をいたしました。

ですから今現在こういうソフトウェアを作りたいという明確な目的はありません。プログラミン
グ言語を覚えることが目的です。

プログラマーなら必ず知っていなきゃいけないようなプログラミング言語を学びたいと思ってお
ります。

■_ Perl 6

Rakudo * がリリースされた影響か、Perl 6ネタが良く目に付くようになった気が。


What to respond to "Perl 6 isn't Perl any more" - Perlbuzz

What's happening in the world of Perl programming, including Perl 5, Perl 6, the CPAN 
and Parrot?

What to respond to "Perl 6 isn't Perl any more"

By Andy Lester on August 5, 2010 11:08 PM 

Now that Rakudo Star is out, and people are able to easily install and work with an 
early implementation of Perl 6, the pundits and cranks have to put aside their tired 
Duke Nukem jokes and talk about how different Perl 6 is from Perl 5. They gripe that 
everything is different and scary, "it shouldn't be called Perl any more." 
I'm tired of it, and it makes no sense.

#Perl 5と Perl 6はもはや別言語でしょ。という意見が出てたけど、それいったら
# 4→5でもかなり変わってるじゃん。と。

I bet none of those cranks remember Perl 4 and the shift to Perl 5.

    * Perl 4 didn't have lexical (my) variables
    * and there were no scalar filehandles
    * and you couldn't pass filehandles as parameters to functions except with typeglobs
    * and the package separator was ', not ::
    * and really nobody used packages anyway
    * and there was no object support whatsoever
    * and that meant no modules to speak of
    * and you couldn't pass around regexes as scalars (qr// operator)
    * and on and on.

Even with all those differences, we survived. In fact, we thrived.

The Pink Camel, first edition of Programming Perl, covering Perl 4, was only 450 small 
pages long, and a third of that was a section called "Real Perl Programs." 
(Imagine! Actual programs!) The Blue Camel, the 2nd edition, covering Perl 5, was over 
600 bigger pages.

You know what I thought when I got my copy of the Blue Camel? It wasn't "Boy, 
this sure isn't Perl any more." No, I thought "Holy shit, look at all the 
stuff I can do." I couldn't even read the book straight through, because I kept 
skipping around, my mind amazed at the possibilities in front of me.

There are those who will read this and say "Yeah, but Perl 5 could still pretty 
much run any Perl 4 program, but Perl 6 won't be able to run Perl 5." And that's 
true. And it's irrelevant.

Perl 6 is still Perl, and is still called Perl, for many reasons, but only one that 
matters.

Perl 6は依然として Perl であり、今でもいくつかの理由によって Perl と呼ばれている。
が、それは重要ではなくて

Larry Wall says that Perl 6 is still Perl.

Larry Wall が、Perl 6 は依然として Perl だと主張している。

Larry has his reasons. Some he's mentioned in past State of the Onion addresses. Maybe 
you don't agree with his reasons, or his decisions. But it doesn't matter one damn bit 
what you think. It's his decision. All arguments are a waste of time and brain cycles.

Laryy には彼なりの理由というものがあって、そのいくつかは State of the Onion で
過去に言及している。

So when someone says "Perl 6 should have been named something else," I suggest
a response of "OK, whatever you say. Now, isn't it cool that you can use list
reduction to say my $sum = [+] @list;?"



This blog is licensed under a Creative Commons License.

■_

ほかの用事と被っていけなかったんですが (懇親会は元から参加希望にしていなかった)


Twitter / やましろ: 速報値として書くと、JVM勉強会の定員が180人で、 ...

速報値として書くと、JVM勉強会の定員が180人で、そのうち懇親会くるって人が120人ぐらいい
たのに、実際に参加したのが48人…とか…怖すぎるだろJK。ATNDで懇親会の申し込みを完結する
のが躊躇するレベル…

こりゃあ幹事さん大変だ。

■_ 本日の巡回から

  • ASCII.jp:okama 版美少女アリス早くも重版・挿絵は51点も!「新訳 ふしぎの国のアリス」
  • R で実践する統計的検定の初歩 - @IT
  • Amazon.co.jp: リンカ・ローダ実践開発テクニック: 坂井 弘亮: 本
  • Amazon.co.jp: まんがサイエンス 12 (ノーラコミックス): あさりよしとお: 本
  • バカが征く
  • 競争にもまれても強くならない。:島国大和のド畜生
  • あずまきよひこ.com: ENTRY [モス]
  • TIFFライブラリに潜む脆弱性をつぶすパッチ(その2)(3/3):CodeZine
  • 昨日の朝ごはんだ
  • Colorful Pieces of Game::集え! ナイコン野郎ども!
  • ■_

    眠い。寝る。

    2010年08月05日

    ■_

    Java VM 勉強会行きたかったでござるよケンイチ氏 ○| ̄|_

    ■_ Perl 6 and Perl 5 are different languages

    Perl 4と Perl 5、Python 2 と Python 3でそれぞれ同じ名前を引きずっているのは 混乱の元だとか主張されてたのは新山さんでしたっけ?

    
    Journal of masak (6289)
    Perl 6 and Perl 5 are different languages
    
    [ #40481 ]
    
    Today at the YAPC::EU keynote, the inimitable Larry Wall, accompanied by his guardian 
    angel and his guardian devil, made a poll asking which ones in the audience believed 
    Perl 5 and Perl 6 are the same language, and which ones believed they are two 
    different languages.
    
    # guardian angel → 守護天使
    # guardian devil → 守護悪魔?
    
    
    (略)
    
    One thing about the tuning fork that I really like is that it's basically two 
    universes in one. We could've had
    
        (a) Perl 6 taking off early and essentially killing Perl 5, precluding its 
            renaissance as Modern Perl, or
    
        (b) Perl 6 floundering so badly and for so long that Perl 5 took over with such 
            force that no-one bothered to develop Perl 6 anymore, and a "Forever Five" 
            condition in the community was announced.
    
    Instead we find ourselves in a junctional universe where both languages are thriving 
    and evolving. And they're different, not least because Perl 5 is older, more mature, 
    and more used in business-oriented environments. But Perl 6 is getting there too, and 
    the two languages will start playing together on increasingly equal footing, just like 
    half-a-generation-apart siblings would.
    
    I like that.
    

    ■_ それ C++で

    Ruby のブロックみたいなもの。

    
    C++ can have lazy lambda enumerators too!
    
    Simon Ask Consulting
    
    C++ can have lazy lambda enumerators too!
    (C++ だって遅延λ enumerator をもてるよ!)
    
    Expressive languages such as Ruby and Python have made it painful for many of us to 
    type out a full for-loop in C and C++. With lambda expressions in C++0x and a slightly 
    horrible amount of template code, we no longer have to!
    
    The Goal
    
    Note! C++0x is very new and not even finished yet, so you need to make sure to use a 
    compiler that doesn't care about that, such as GCC 4.5 or above.
    
    In Ruby, you can loop over the elements in the array foo, and print them out on the 
    screen, like this:
    
    foo.each { |x| puts(x) }
    
    This calls a method each on the object foo with a code block (i.e. lambda function) as 
    the only argument. This is how Ruby works.
    
    これは、唯一の引数としてコードブロック(要するにλ関数)を伴って、オブジェクト foo の
    each メソッドを呼び出すものです。Ruby ではこのように動作します。
    
    Wouldn't it be neat if we could do the same in C++? Here's our goal:
    
    C++ でもこれと同じことができたらすばらしいことじゃあないでしょうか?
    わたしたちの目標は:
    
    Array<int> foo;
    
    // ... add some elements to foo
    
    foo.each([](int x) { printf("%d\n", x); });
    
    Furthermore, chains of transformations to an array or list can be done like this:
    
    foo.select([](int x) { return x > 2; })
       .map([](int x) { return x + 100; })
       .each([](int x) { printf("%d\n", x); });
    
    If you are familiar with Ruby, the above should be immediately readable to you. If not, 
    it's simple: First we select the elements of foo for which x > 2 is true, then we 
    add 100 to each of them, and print all the results. It doesn't have to get much more 
    complicated than this before a simple for-loop becomes a horrible mess to maintain.
    
    With C++0x and lambda expressions, we can do this! I will explain how, but first let's 
    introduce the concept of lazy enumerators.
    
    In Programming, Lazy means … Something, can't be bothered to type it out.
    
    (以下略)
    

    ■_ マルチバイトの

    grep ほどではない?

    Hena Hena Nikki ~悔い倒れの日々~(2010-08-04)
    http://quruli.ivory.ne.jp/diary/?date=20100804#p05
    "GNU sed のマルチ・バイト対応による速度低下
    
    定番ネタ。
    
    $ ls -l
    合計 102M
    -rw-r--r-- 1 shindoh staff 102M 2010-07-11 00:25 sample.txt.lzma
    $ sed --version
    GNU sed 4.2.1版
    [...]
    $ lzma -cd sample.txt.lzma  > /dev/null
    13.476u 0.630s 0:14.35 98.2%    0+0k 0+1io 0pf+0w
    $ lzma -cd sample.txt.lzma | sed -r 's|[ \t]+([^ \t:]+):[^ \t]+| \1|g' > /dev/null
    625.557u 10.268s 10:30.86 100.7%        0+0k 0+0io 0pf+0w
    $ lzma -cd sample.txt.lzma | env LC_CTYPE="C" sed -r 's|[ \t]+([^ \t:]+):[^ \t]+| \1|g' > /dev/null
    465.192u 8.666s 7:50.56 100.6%  0+0k 0+1io 0pf+0w
      

    まあ正規表現エンジン違うんですが。 GNU grep と GNU sed。

    ■_ C++ には

    闇の軍団というのがいるらしいですが。 http://www.reddit.com/r/programming/comments/cue3d/the_dark_side_of_c_pdf/

    The Dark Side of C++ (PDF) : programming
    http://www.fefe.de/c++/c%2b%2b-talk.pdf
    
    The Dark Side of C++
    Felix von Leitner
    CCC Berlin
    felix-cpp@fefe.de
    August 2007
    Abstract
    Most of the perceived benefits of C++, when viewed from a different
    vantage point, turn out to have or even be downsides.
    The Dark Side of C++
    
    (略)
    
    Gratuitous Bjarne Quote at the end
    
    Whole program analysis (WPA) can be used to eliminate unused virtual
    function tables and RTTI data. Such analysis is particularly suitable for relatively
    small programs that do not use dynamic linking.
    
     No shit, Sherlock.
     It will be ready right after Duke Nukem Forever runs on the Hurd.
    
    PS: Thanks to helpers and contributors, in particular Stefan Reuther.
    
      

    挙げられている Dark side に目新しいものはない。かな?

    ■_ 本日の巡回から

    2010年08月04日

    ■_

    うーむ、コミケ企業ブースは(行くのが)きついなあ。 もひかん(ではない)さんとことかに行ってみようとは思うのだけど。 コミックマーケット78販売グッズのお知らせ | キャーティア大使館 広報課

    ■_ 御大

    あそびにいくヨ! 守礼皇13号 
    328 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:08:08 ID:1ByABwfiP Be:
        全然ミリヲタが寄り付かないなこのアニメ。
        スタッフはアクション押してるけど、評価されてないのか?
        HOTDとはえらい違いだ。 
    
    329 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:09:19 ID:6IPi7KYO0 Be:
        >>328
        ミリタリーだけじゃ手に負えないからじゃねw 
    
    332 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:11:31 ID:9EanXWFYP Be:
        >>328
        ミリオタというかガンオタならそこそこいるな 
    
    333 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:12:47 ID:AMNUOnGT0 Be:
        ミリオタはストパンに行くんじゃないかね。 
    
    334 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:15:40 ID:qSWk+SjP0 Be:
        ミリタリーっていうか銃はちゃんと実在するものを出してるってだけで撃っても全然当たらないし銃オタが喜びそうなこだわった描写とかないだろ 
    
    335 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:16:43 ID:1ByABwfiP Be:
        >329
        実在する兵器より強い反物質ハンマーとか出てるから
        ミリヲタには不快感があるんだろうかね。 
    
    336 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:18:08 ID:YuOL3Pr40 Be:
        今のところ3点なんとかっていう撃ち方?くらいか 
    
    338 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:18:20 ID:oXax3Evw0 Be:
        まあ、ミリオタ板の住人の質も下がってるし、HOTDは神様が原作だから向こうに群がるのは当然 
    
    339 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:20:18 ID:rqCizdHHP Be:
        >>335
        それ言ったら超兵器はこれからも色々出てくる訳で…
        むしろ>>334みたいな部分が足りないんだろうけど、基本殺伐とした話じゃないからね。 
    
    341 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:22:51 ID:0waNLMVI0 Be:
        軍オタなんか俺と同じで文句ばっかり書くと思うぞ
        来ない方がいい 
    
    342 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:23:11 ID:DlwIQztx0 Be:
        ミリヲタが好きなのは軍隊とか警察であって、なんちゃって軍団とか超絶体術で、ありえ
        ないド派手なガンアクションは嫌いなんじゃないかな。 
    
    345 風の谷の名無しさん@実況は実況板で [] 2010/08/04(水) 17:35:27 ID:8fTSuMk10 Be:
        アシストロイドがほしい まいにちたわむれて遊びたい
        我々の世界でいうアイボみたいなものなんだろうな。
    
    346 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:37:24 ID:SvLycPAv0 Be:
        家事もできるからなあ 
    
    347 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:39:26 ID:MVFooS9u0 Be:
        アシストロイドはとりあえずねんどろいどプチで欲しい
        で、一体だけ無彩色の奴を混ぜて貰って、俺カスタム 
    
    351 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 17:54:20 ID:YuOL3Pr40 Be:
        ttp://medimo.tv/blog/comicalive/?p=2244
    
        一般販売もしてくれよ 
    
    352 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 18:03:07 ID:rqCizdHHP Be:
        >>351
        http://bit.ly/dijoAJ
        こっちには裏表紙も。
        メガネケースやタンブラーは絵が使い回しでつまらんな。 
    
    354 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 18:10:25 ID:R+jDldXo0 Be:
        >>338
        HOTDの原作者ってすぐ作品書けなくなって放り出すゴミカスってイメージだったがありゃあ神様なのか? 
    
    355 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 18:18:43 ID:rqCizdHHP Be:
        >>354
        ミリタリ描写と作品の行く末は無関係、つーとこなんだろw 
    
    356 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 18:22:19 ID:3LBlRF2ki Be:
        ヨン様、少年法あたりの評価も入ってるんじゃないの>HOTD 
    
    357 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 18:26:53 ID:0waNLMVI0 Be:
        >>354
        それは現在に視点を置いた感じ方だ。1990年頃に視点を置くと感じ方が変わる 
    
    358 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 18:27:55 ID:ieLbmhhF0 Be:
        >>357
        ちょっとノストラダムスの鍵探しに行ってくる 
    
    359 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 18:29:27 ID:/wuxEQfK0 Be:
        >>357
        確かに完結したシリーズが1つあるらしいが… 
    
    360 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 18:30:44 ID:FIApQv/d0 Be:
        アシストロイドのプラモデル出してくれよ 
    
    361 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 18:32:19 ID:9EanXWFYP Be:
        >>360
        ぬいぐるみなら出るらしい 
    
    362 風の谷の名無しさん@実況は実況板で [sage] 2010/08/04(水) 18:34:20 ID:0waNLMVI0 Be:
        1990年はボードシミュレーションゲームが衰退してコンピューターシミュレーションゲームが勃興した時期だった
        国産ボードSMGの末期を盛り上げた作家として佐藤大輔は登場した。そして消えた。
        次に登場した時は仮想戦記作家としてだった。1991年~1995年くらいまでは仮想戦記が輝いていた時代だった
        その時の栄光が彼の評価になっているのだろう 
    
    

    そういや、RSBC って元はボードゲームのタイトルだったけか。 完結云々は、「征途」に「皇国の守護者」加えて二つでもいいんじゃないかなあ。 皇国~は、あれで終わりにするかという意見が多分多いのだろうけど、 あの先話を続けても勝ちまくる新城を見るだけになって、面白くないんじゃないかと思う。 ありがちな三国志の if もののように。 ってこれは前にも書いたな。

    そういう予想を裏切って面白いものができるならそれは望外の喜びではあるけれど。

    ■_ 誰かやってみないか?w

    C言語のプログラミングについて c言語で涼宮ハルヒの憂鬱の YUKI.N>また図書館に ... - Yahoo!知恵袋
    
    C言語のプログラミングについて
    c言語で涼宮ハルヒの憂鬱の
    YUKI.N>また図書館に の初めから最後までを再現したいわけです。
    どのようにプログラムを組めばいいかおしえてください。
    
    ちなみに一文字ずつカタカタカタってでてくるものが理想です。
    
    
    よければ完成したのをもらえればうれしいです。
    
    

    まあスイッチ入れて即ってのはあれだと思うけども。

    ■_ 本日の巡回から

    ■_

    
    melancholic afternoon
    8月3日_
    VC8ではエラー, gcc 4.5ではOK. どちらが正しいのかな.
    
    int main()
    {
        for (int i = 0; ;) {
            int i = 0;
        }
    }
    
    

    これは、for の初期化式と本体とでスコープが別(本体のほうが内包されている) なのかどうかという解釈の問題なんでしょか。

    ■_ 訳している余裕がナッシング

    正規表現というか文字列比較のときの「大小文字の違いを無視する」のは意外に面倒というお話。

    
    Crazy Coding Conundrums : Case insensitive comparison: A lot more complicated than you might think!
    
    Crazy Coding Conundrums
    
    Case insensitive comparison: A lot more complicated than you might think!
    
    Inspired by a discussion on the relative merits of scala vs. java which brought up 
    sorting a list of strings based on the result of a call to toLowercase(), I offer you 
    a trip around the world to convince you that string comparison is a lot more complex.
    
    If you are a java user and don't want to read it all, the take-away lesson is simple: 
    You should be using java.text.Collator which is better than Collections.sort(list, 
    String.CASE_INSENSITIVE_ORDER) which is better than just calling toLowerCase() on 
    everything.
    
    To explain why string comparison is so much more nuanced, we'll visit three 
    interesting locales, each throwing a unique wrench in the works.
    
    Example 1: The Eszett character
    
    (略)
    
    Bonus Example: Lower case. Upper case. And Title case??
    
    Astute folks may have observed that Character.toTitleCase() exists in the java 
    standard library.
    
    What's that you ask? Well, in some languages, there are single characters that look 
    like 2 characters. For example the ‘dz'. That's one character in some languages. 
    This is very similar to the germans who have enshrined the much used ß ligature into a 
    unique character. However, unlike the ß which has pretty much lost all resemblance to 
    the original character, and which can never appear at the beginning of a word, these 
    characters are mostly just a kerned version of the original, and CAN appear at the 
    beginning of the word. In unicode speak these are called digraphs. These have 3 and 
    not 2 capitalization forms: all lowercase, all uppercase, and the first part of the 
    digraph uppercased, the second part lowercased. This is what you'd use when you want 
    a word with just the first letter capitalized, and you use the all-caps version only 
    if you need an all-caps rendering of the word (i.e. rarely). This obscure little 
    factoid actually was useful for me when writing lombok: The method that turns “foo” 
    into “getFoo” will use toTitleCase() and not toUpperCase().
    
    And there ends our trip round the world. I hope you enjoyed it. Though now you know: 
    That feeling of despair when someone mentions i18n? You're entirely correct in 
    feeling it. It's a pain in the tusch!
    
    
    © 2010 Reinier Zwitserloot | Thanks, WordPress | Barthelme theme by Scott Allan Wallick | Standards Compliant XHTML & CSS | RSS Posts & Comments
    
    

    もうひとつ。

    
    When Free Software is Not Free
    
    When Free Software is Not Free
    
    The Free Software movement was created with the assumption that software should be 
    freely modified by its users. The main premise being that having the rights of using a 
    program also means the right of modifying it when necessary.
    
    Free software exists today in different forms, and it is widely used, however in many 
    situations it hasn't provide what it proposed.
    
    Consider the case of the Linux Kernel used on Android Phones. You are free to download 
    and study it if you have a suitable Internet connection. After all, the software is in 
    many ways the same used in any other Linux machine.
    
    However, if you really plan to use this software to do any useful improvement you are 
    out of luck. First of all, changing the operating system in one of these devices will 
    break all warranties. I wouldn't even be surprised if it make the mobile phone stop 
    working.
    
    You only hope of getting your modifications into the OS is making changes in a 
    simulated environment and then submit a patch to Android developers. Then, if they are 
    interested in your patch you might have a chance of seeing it in the next version of 
    the Android OS, when released by your vendor.
    
    The same thing would happen if you used the iPhone, which has a BSD-based kernel.
    
    Free For Whom?
    
    (略)
    
    

    まあ、この話については自分も書きたいことがあるのだけど 140字ではおさまらない。

    2010年08月03日

    ■_

    7割方仕上げたところで活動限界が来ました○| ̄|_

    ■_

    
    なぜポインタで引っかかる人が多いのか 
    458 デフォルトの名無しさん [sage] 2010/08/02(月) 22:18:46 ID: Be:
        下記は完全に同じ意味ですか?
         p->a;
         (*p).a;
    
        同じだとしたら、なぜわざわざ
         ->
        という演算子を用意したのでしょうか?
        由来とかあったら教えてください。 
    
    459 デフォルトの名無しさん [sage] 2010/08/02(月) 22:26:58 ID: Be:
        Cの目的の一つにタイプ量を減らすことってのがあったな。 
    
    460 デフォルトの名無しさん [sage] 2010/08/02(月) 22:43:06 ID: Be:
        (void)p->a->b->c;
        (void)(*(*(*p).a).b).c;
        いちいち先頭に戻って挿入するなんて考えられない
    
        (void)p[0].a[0].b[0].c;
        これもなんか嫌だよ 
    
    461 デフォルトの名無しさん [] 2010/08/02(月) 22:45:29 ID: Be:
        どんだけネストしてんだよw 
    
    462 デフォルトの名無しさん [sage] 2010/08/02(月) 22:57:31 ID: Be:
        超巨大構造体ですか? 
    
    463 デフォルトの名無しさん [sage] 2010/08/02(月) 23:02:44 ID: Be:
        (void)foo->super(foo)->hoge(foo->super(foo));
        (void)(*(*(*foo).super)(foo)).hoge)((*(*foo).super)(foo));
        一時変数使えよって感じだな
    
        DirectXとかlibjpegとかCore Foundationでは構造体と関数ポインタでこんなことやっていたと思う
        オブジェクト指向っぽく書けるから良く使う手法だけどね 
    
    464 デフォルトの名無しさん [sage] 2010/08/03(火) 00:20:42 ID: Be:
        >>460
        > (void)(*(*(*p).a).b).c;
        配列のポインタとか、関数のポインタとかが複数からむと、そんな記述に現実なるじゃん。
        何故構造体だけが -> なんてものを用意されて優遇されているのか。 
    
    465 デフォルトの名無しさん [sage] 2010/08/03(火) 00:27:01 ID: Be:
        配列[]も関数()も構造体->も後置
        *だけが前置 
    
    466 デフォルトの名無しさん [sage] 2010/08/03(火) 00:52:40 ID: Be:
        優遇前 (*p).a *(p+i) (*p)()
        優遇後 p->a p[i] p() 
    
    467 デフォルトの名無しさん [sage] 2010/08/03(火) 07:29:00 ID: Be:
        関数ポインタpfに対して(*pf)();とpf();が同じになるのだから、
        ドット演算子もこの仕様に変えたら
    
        p.a.b.c;
    
        って書けるじゃん。 
    
    
    

    ■_ call by

    最近なんかまたあれなので

    http://www.atmarkit.co.jp/fwin2k/itpropower/admin-kun/230/adminkun230.html
    
    値渡し/参照渡し MOYO Laboratory
    http://moyolab.blog57.fc2.com/blog-entry-10.html
    
    C++ で学ぶ JavaScript の参照渡し (入門編) - F99a.q8oVE::Blog
    http://blog.f99aq8ove.net/archive/2009/05/1241948336.html
    
    C++ で学ぶ JavaScript の参照渡し (入門編) - ◆F99a.q8oVE::Blog
    http://blog.f99aq8ove.net/archive/2009/05/1241948336.html
    
    [JavaHouse-Brewers:26214] Re: 文字列引数の参照渡し
    http://java-house.jp/ml/archive/j-h-b/026214.html
    
    参照渡し
    http://wisdom.sakura.ne.jp/programming/java/java23.html
    そのかわり、JAVA言語は配列、及びオブジェクトは参照渡しなのです
    
    第 7 回 「参照渡し」という用語の誤解 | 連載! とことん Visual Basic
    http://msdn.microsoft.com/ja-jp/ff394162.aspx
    8. 結局のところ「参照渡し」は何を渡すのか?
    
    引数 - Wikipedia
    http://ja.wikipedia.org/wiki/%E5%BC%95%E6%95%B0
    
    値渡しか、参照渡しか
    http://www.aerith.net/design/argument-j.html
    
    参照渡しとは【call by reference】 - 意味/解説/説明/定義 : IT用語辞典
    http://e-words.jp/w/E58F82E785A7E6B8A1E38197.html
    
    「参照渡し」まとめ - Life like a clown
    http://d.hatena.ne.jp/tt_clown/20100521/1274430640
    
    

    渡された引数の内容を書き換えられるから参照渡しだという意見が根強いのだけど、

    class ByVal {
       class Sample {
           int x;
           String m;
           Sample(int i, String s) {
               x = i;
               m = s;
           }
       }
    
       void assign(Sample sample) {
           System.out.println(sample.x + sample.m);
           sample = new Sample(2, "sub");
           System.out.println(sample.x + sample.m);
       }
       void modify(Sample sample) {
           System.out.println(sample.x + sample.m);
           sample.x = 3;
           sample.m = "modify";
           System.out.println(sample.x + sample.m);
       }
       void test() {
           Sample sample = new Sample(1, "main");
           System.out.println(sample.x + sample.m);
           assign(sample);
           System.out.println(sample.x + sample.m);
           modify(sample);
           System.out.println(sample.x + sample.m);
       }
    
       static public void main(String args[]) {
           System.out.println("start");
           ByVal t = new ByVal();
           t.test();
           System.out.println("end");
       }
    }
    

    フィールドの書き換えは確かにできるのだけど、「代入」はできないんですよね。 呼び出し元に戻ると呼び出し先で行った「代入」は反映されてない。 「参照渡し」(call by value) であるならこれができてないといけない。 数日前の西尾さんのところで書かれてた 「参照渡しは左辺値を渡し、値渡しは右辺値を渡し…」ってやつですね。 http://d.hatena.ne.jp/nishiohirokazu/20100726/1280161627

    ■_ らしく

    Python らしい書き方を教えておくれというお願い。 確かに最初のこれはなんともという感じのできですな

    
    Learning Python; How can I make this more Pythonic? - Stack Overflow
    
    I am a PHP developer exploring the outside world. I have decided to start learning 
    Python.
    
    The below script is my first attempt at porting a PHP script to Python. Its job is to 
    take tweets from a Redis store. The tweets are coming from Twitter's Streaming API and 
    stored as JSON objects. Then the information needed is extracted and dumped into a CSV 
    file to be imported into MySQL using the LOAD DATA LOCAL INFILE that is hosted on a 
    different server.
    
    So, the question is: Now that I have my first Python script running, how can I make it 
    more Pythonic? Are there any suggestions that you guys have? Make it better? Tricks I 
    should know about? Constructive Criticism?
    
    Update: Having taken everyone's suggestions thus far, here is the updated version:
    
    # -*- coding: utf-8 -*-
    from __future__ import with_statement
    
    import simplejson
    import re
    import datetime
    import time
    import csv
    import sys
    import hashlib
    import os
    
    # Bot Modules
    import tweelay.red as red
    import tweelay.upload as upload
    
    debug=True
    
    def process_tweets():
      data=[]
      last_id=0
      for i in range(20):
        last = red.pop_tweet()
        if not last:
          break
    
        t = TweetHandler(last)
        t.cleanup()
        t.extract()
    
        if t.get_tweet_id() == last_id:
          break
    
        data = data + [t.proc()]
        last_id = t.get_tweet_id()
    
        time.sleep(0.01)
    
      if not data:
        return False
    
      c = CSVHandler(data)
      c.pack_csv()
      c.uploadr()
    
    class TweetHandler:
      def __init__(self, json):
        self.json=json
        self.tweet=None
        self.tweet_id=0
        self.j=None
    
      def cleanup(self):
        """Takes JSON encoded tweet and cleans it up for processing"""
        self.tweet = unicode(self.json, "utf-8")
        self.tweet = re.sub('^s:[0-9]+:["]+', '', self.tweet)
        self.tweet = re.sub('\n["]+;$', '', self.tweet)
    
      def extract(self):
        """Takes cleaned up JSON encoded tweet and extracts the datas we need"""
        self.j = simplejson.loads(self.tweet)
    
      def proc(self):
        """Builds the datas from the JSON object"""
        try:
          if debug:
            tweet = self.j['user']['screen_name']+": "+self.j['text']
            print tweet.encode('utf-8')
          return (self.j['user']['id'], self.j['user']['screen_name'].encode('utf-8'), self.j['text'].encode('utf-8'), self.j['id'], self.j['in_reply_to_status_id'], self.j['in_reply_to_user_id'], self.j['created_at'], 4 )
        except KeyError:
          if self.j['delete']['status']['id']:
            if debug:
              print "DEL %s" % self.tweet_id
          else:
            print ";".join(["%s=%s" % (k, v) for k, v in j.items()])
        finally:
          print "----"
    
      def get_tweet_id(self):
        """Return Tweet ID"""
        if self.j['id']:
          return self.j['id']
    
        if self.j['delete']['status']['id']:
          return self.j['delete']['status']['id']
    
    
    class CSVHandler:  
      def __init__(self, data):
        self.data = data
        self.file_name = self.gen_file_name()
    
      def gen_file_name(self):
        """Generate unique file name"""
        now = datetime.datetime.now()
    
        hash = hashlib.sha1()
        hash.update(str(now))
        hash.update(str(len(self.data)))
    
        hash_str = hash.hexdigest()
        return hash_str+'.csv'
    
      def pack_csv(self):
        """Save tweet data to CSV file"""
        with open('tmp/'+self.file_name, mode='ab') as ofile:
          writer = csv.writer(ofile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
          writer.writerows(self.data)
    
      def uploadr(self):
        """Upload file to remote host"""
        url = "http://example.com/up.php?filename="+self.file_name;
        uploadr = upload.upload_file(url, 'tmp/'+self.file_name)
        if uploadr[0] == 200:
          print "Upload: 200 - ("+str(len(self.data))+")",self.file_name
          print "---- ---- ---- ----"
          os.remove('tmp/'+self.file_name)
        else:
          print "Upload Error:",uploadr[0]
    
    if __name__ == "__main__":
      while True:
        process_tweets()
        time.sleep(1)
    
    
    See python.org/dev/peps/pep-0008 – Nicholas Knight yesterday
    
    Functions and documentation strings are your friends. As far as I can tell, this 
    script gets a tweet, does nothing with it, and then waits a little, rinse, repeat.
    
    
    Instead of:
    
      i=0
      end=20
      last_id=0
      data=[]
      while(i<=end):
        i = i + 1
        ...
    
    code:
    
      last_id=0
      data=[]
      for i in xrange(1, 22):
        ...
    
    Same semantics, more compact and Pythonic.
    
    Instead of
    
    if not last or last == None:
    
    do just
    
    if not last:
    
    since None is false-ish anyway (so not last is True when last is None). In general, 
    when you want to check if something isNone, codeis None, not== None`.
    
    In
    
      if(j['id'] <> last_id):
    
    lose the redundant parentheses and the obsolete <> operator and code instead
    
      if j['id'] != last_id:
    
    and also remove the redundant parentheses from other if statements.
    
    Instead of:
    
      if len(data) == 0:
    
    code:
    
      if not data:
    
    since any empty container is false-ish.
    
    In
    
    hash_str = str(hash.hexdigest())
    
    code instead
    
    hash_str = hash.hexdigest()
    
    since the method already returns a string, making the str call redundant.
    
    Instead of:
    
      for item in data:
        writer.writerow(item)
    
    use
    
      writer.writerows(data)
    
    which does the loop on your behalf.
    
    Instead of
    
      ofile = open('tmp/'+file_name, mode='ab')
      ...
      ofile.close()    
    
    use (in Python 2.6 or better, or in 2.5 by starting the module with
    
      from __future__ import with_statement
    
    to "import from the future" the with statement feature):
    
      with open('tmp/'+file_name, mode='ab') as ofile:
        ...
    
    which guarantees to do the close for you (including in cases where an exception might be raised).
    
    Instead of
    
    print "Upload Error: "+uploadr[0]
    
    use
    
    print "Upload Error:", uploadr[0]
    
    and similarly for other print statements -- the comma inserts a space for you.
    
    I'm sure there are more such little things, but these are a few that "jumped to 
    the eye" as I was scanning your code.
    
    Pythonic python does not use integer flow control very much. The idiom is almost 
    always for item in container:. Also, I would use a class to hold a 'User object'. It 
    will be a lot easier to use than simple container types likes lists and dictionaries 
    (And arrange your code into to a more OO style.) You can compile reg-exes before hand 
    for a little more performance.
    
    class MyTweet(object):
      def __init__(self, data):
        # ...process json here
        # ...
        self.user = user
    
    for data in getTweets():
      tweet = MyTweet(data)
    
    
    Instead of ....
    
      i=0
      end=20
      last_id=0
      data=[]
      while(i<=end):
        i = i + 1
    
    you can use...
    
    for i in range(20):
    
    but overall, it's not very clear where this 20 comes from?? magic #?
    
    
       1. Every method variable name I've ever seen in Python was lowercase with no underscores.
          (I don't think this is a requirement and may not be standard practice.)
    
       2. You should really break up the logic into multiple, single-purpose methods.
    
       3. Take 2 a step further and create some classes to encapsulate related methods together.
    
    

    ■_

    http://www.lifehacker.jp/2010/08/100729support-details.html
    http://stackoverflow.com/questions/2575234/setting-processor-to-32-bit-mode
    
    Mono Projectのライセンスについて | OKWave
    http://okwave.jp/qa/q6083153.html
    
    

    2010年08月02日

    ■_

    ・しょぼーん
    湘南シーレックス消滅 球団の思惑不発で - 野球 - SANSPO.COM ファームで独立採算てのは難しいのかねえ。

    ・Erlang
    第二回 Erlang 基礎勉強会まとめ - cooldaemonの備忘録 の、 本を購入するとしたら始めの一冊は何が良いか? → * 本は購入せずに作りたいものを作る。その後に プログラミング Erlang などを読むのが良い。 とか 私の個人的経験ですが、始めに本を購入した言語は、手足のように使える状態になった試しがありません。 「○○を作りたい」という意思が無ければ、モチベーションが続かないからです。言語はモノ作りの道具であるという事を忘れてはいけないと考えております。 いうのに欠けるので今ひとつやる気にならないのかなと思ったり。 じゃあ何に力を入れているのかと言われると困っちゃうわけなんですが。

    ・センゴク
    次は三週間後とな?

    ・ムダヅモ無き改革
    ASIMO のなかにあって制御しているのは(ぴー)だった!?

    ■_ G

    
    ガーベジとガベージ - 質問・相談ならMSN相談箱
    
    ガーベジとガベージ
    
    どちらが正しい言い方なのでしょうか?
    正直別にどうでもいいことかもしれませんが、
    どこかすっきりしないので教えてください。
    
    
    質問者が選んだベストアンサー
    
    私は正しいほうがどちらかとは言えませんが、
    自分はアメリカに在住していて聞いてる発音、喋っている発音としては
    「ガーベジ」のほうが近いと思います。
    
    正直言うと私が住んでいるところでは、「ガーベッジ」という感じですね。
    これは日本語に方言があるようにアメリカでも発音の違いはあります。
    ですから正しい発音は分かりませんが、私の場合は「ガーベジ」が近いと思います。
    
    
    一応スペルで行くと「Garbage」のbの前にrが来ることから、ベの前にーがつくほうが自然かと。
    
    参考までに。
    

    ほう。

    ■_ その発想はなかった

    
    C言語:可変長文字列配列について質問です。 - Yahoo!知恵袋
    
    C言語:可変長文字列配列について質問です。
    
    C言語の新仕様(といっても新しくなったのは大分前ですが…)より、配列のインデックスにint
    型の動的変数を使用することができるようになったので、これを利用して可変長文字列配列を作
    成してみました。
    
    大まかには、標準入力から受け取った文字列を一文字ずつ
    fgetc(stdin)で取得し、それが'\n'でなければ次の文字を
    格納するためのスペース確保にインデックスをインクリメントし、
    '\n'ならば文字取得を終了し、printfするという仕様です。
    
    ある程度は動くのですが、なぜか50文字前後を入力した辺りから
    セグフォールトを吐くようになります。
    
    ちなみにソースコードは次のようになっています。
    【main関数内】
    int get_number;
    int cmd_siz = 1;
    char cmd[cmd_siz];
    ~中略~
    for(;;) {
        printf(" >>> ");
        if ((get_number = get_line(cmd, &cmd_siz)) == -1) {
            warnx("%s::Input error.\nProgram is aborting...\n", argv[0]);
            break;
        } else if (get_number > 0) {
            printf("%s\n", cmd);
        } else {
            printf("%s::Input error.\n", argv[0]);
        }
    }
    
    【get_lineの定義】
    int get_line(char *cmd, int *n) {
        int c, i = 0;
    
        for(*n = 1; (c = fgetc(stdin)) != EOF; ) {
            if(c == '\n') {
                cmd[i] = '\0';
                return i;
            }
    
            cmd[i++] = c; (*n)++;
        }
        cmd[i] = '\0';
        return (i == 0 ? -1 : i);
    }
    
    40文字程度ならば正常に動くのに、50文字程度になると突然エラーを吐くのが非常に不思議です。
    エラーの原因をご教授願います。
    
    また、もし可変長文字列配列のアルゴリズムにおいて、
    上記のものより優れているものがありましたら、
    そちらもご教授いただければ嬉しいです。
    
    
    
    
    可変長ってのは、定義するときに(スタティックな定数ではなく、プログラム中の値で)配列の大
    きさを決められる、ということであって、***一度定義してしまったら配列の大きさは変更出来
    ません。***
    
    つまり、このプログラムでは、
    int cmd_siz = 1;
    char cmd[cmd_siz];
    
    で長さ1の配列が確保されているだけ、です。当然これを超えてアクセスしていればどういう動
    作をするかは未定義。40だの50だのには意味はなくて「たまたま」です。
    
    必要な大きさが確定したところで配列の定義を行って下さい。
    
    

    勝手に拡張されていく配列ですかい。

    ■_ 本日の巡回から

    ■_ シャア専用

    みつからねー ○| ̄|_ ってアマゾンさんにありますね。んー

    Amazon.co.jp: 【数量限定】日清 カップヌードルシャア専用赤いチーズ入りチリトマトヌードルパック 77g: 食品&飲料 Amazon.co.jp: 【数量限定】日清 カップヌードルシャア専用辛さ3倍チリトマトヌードルパック 76g: 食品&飲料 Amazon.co.jp: 【数量限定】日清 カップヌードルシャア専用チリトマトヌードルパック 75g: 食品&飲料

    ■_

    くじけたので寝る。

    2010年08月01日

    ■_

    ・LL Tiger
    まだ書き残している分があったりするんですが。 それはあらためて。

    カップヌードル:辛さ3倍も! 「シャア専用」3商品限定発売 ミニガンプラ付き - 毎日jp(毎日新聞) 前にガンプラのおまけつきを発売したときは 7-11 限定じゃなかったっけか。 今回のは違うのかな(「数量限定」ではあるけど)

    ■_ 本日のネタ拾い

    ム板。

    C言語なら俺に聞け(入門編)Part 67 
    334 デフォルトの名無しさん [] 2010/07/31(土) 23:23:30 ID: Be:
        C++0x見れば分かるように、仕様がグジャグジャでどうにもならなくなってる。
    
        C++に未来なんてないよ。 
    
    335 デフォルトの名無しさん [] 2010/07/31(土) 23:26:03 ID: Be:
        C++0xってもう発売されてるんですか? 
    
    336 デフォルトの名無しさん [] 2010/07/31(土) 23:28:07 ID: Be:
        昨日大学生協に売ってたよ。 
    
    337 デフォルトの名無しさん [sage] 2010/07/31(土) 23:29:08 ID: Be:
        アニメイトで予約特典付けてもらった 
    
    338 デフォルトの名無しさん [sage] 2010/07/31(土) 23:31:18 ID: Be:
        いまアマゾンで50%offだぞ
        急げ! 
    
    345 デフォルトの名無しさん [sage] 2010/08/01(日) 02:21:20 ID: Be:
        プログラミング初学者が始めるのに適当な言語はCかPerlだと思うんだがどうだろう。 
    
    346 デフォルトの名無しさん [sage] 2010/08/01(日) 02:36:39 ID: Be:
        >>345
        さもなくばしね(or die)
        こんな文が羅列されてるスクリプト
    
        マクロや条件コンパイルの嵐で関連ファイルが数百を超えるようなソース
    
        電車に飛び込みたくなる理由もわかるような気がするw 
    
    347 デフォルトの名無しさん [sage] 2010/08/01(日) 02:38:50 ID: Be:
        C は文字列の扱いにつまづく
        Perl は 0 の扱いにつまづく
        今でも初学者用として BASIC は偉大だと思う 
    
    348 デフォルトの名無しさん [sage] 2010/08/01(日) 02:41:09 ID: Be:
        そんなレベルの話じゃないけどなw
        データとか振る舞いとかプログラムの「い」を覚えるには適当な言語じゃないかなw 
    
    349 デフォルトの名無しさん [sage] 2010/08/01(日) 02:43:38 ID: Be:
        「い」を覚えていない人にそう思わせるところが
        嫌らCと言われる所以と聞きました 
    
    350 デフォルトの名無しさん [sage] 2010/08/01(日) 03:33:44 ID: Be:
        >>346
        関連ファイルが数百を超えたからといってどうだというんです? 
    
    

    ん、Perl の0の扱いは基本 C と同じじゃ? ってあれか、while ループで読み込んだりしたときのあれか?

    Perl のソースコードはまあ…きついよね。いろいろとw

    ■_ A tutorial for writing monad tutorials (part I)

    モナドのチュートリアルを書くためのチュートリアル。

    
    A tutorial for writing monad tutorials (part I)
    
    (Somewhere between a parody, a caustic statement on the state of Haskell
    monad tutorials and real advice.  My tongue is firmly in my cheek and
    apologies to all those I'm about to insult.)
    
    There's been a nasty little thread on the Haskell mailing list today
    where a million people have tried to explain monads to a hapless
    learner.  Reading the responses, if I were the learner, I'd be confused,
    overwhelmed but inspired to learn more about these deeply confusing
    magical amazing things that no-one knows how to explain, but everyone
    has a story about (how they think) monads clicked for them.
    
    # モナドの解説を良く見かけるけど、それって読み手(学習者)を混乱させる
    #ような書き方してない? とか
    
    Here's my take on how to explain monads:  (Ah how easy it is for me here
    in my ivory tower where I'm right and the world is wrong :p ).
    
    First off, one rule:
    
    1) DONT USE THE WORD 'MONADIC'
       'MONADIC'(モナディック) という単語を使ってはいけない
    
    (つづく)
    
    

    ■_

     ちょっと気になって調べてたらこういうスレッドが見つかりました。

    
    IBM PCは如何にして生まれたか
    
    IBM PCは如何にして生まれたか
    
    1 :横島 :02/03/06 02:43
        我々はなぜPCを自作出来るのか?
        なぜアップグレードできるのか?
        なぜパソコンはPCに寡占化されたのか?
        IBM PCは如何にして生まれたのか?
        今や誰もがPCを扱うが、その背景を知ってる人は非常に少ない。でこく~る萌え。
    
    2 :横島 :02/03/06 02:45
        確かIBMがダメ社員を集めて短期決戦で作ったのがIBM PC。
    
    3 :横島 :02/03/06 02:49
        場所はフロリダ、ボガラトン。
        時は'80年。
        リーダーはドン・エストリッジ。
        APPLE全盛時代で、IBMのパソコンなぞ売れる保証は何もなかった。
        メンバーはDIRTY THIRTEEN(汚い13人)と呼ばれ、メインフレームがメインの
        当時のIBM社内では馬鹿にされ、相手にされず、完全な異端児だった。
    
    4 :横島 :02/03/06 02:54
        短期開発だったし、新しくハード、ソフトを開発する暇はない。
        ハードは当時性能的には2流のインテル8088。
        ソフトはビルゲイツとかいうみすぼらしい、でもこちらの言う事は良く聞く
        クソ餓鬼が慌てて買ってきたMS-DOS。
        こんな出来なりで大丈夫なのか?
        ・・・ボクが知ってるのはここまで。誰が詳しい話教えて下さい。
        今日はもう寝ます。でこく~る萌え。
    
    5 :ナイコンさん :02/03/06 13:54
        エストリッジって、開発終わってすぐ死んじゃったんだよね
        今のPCの隆盛を見て何を想ってるのかな
    
    6 :ナイコンさん :02/03/06 14:07
        >>4
        「知ってるのはここまで」っつー前に既に間違ってる。
        CP/M-86を買いにいったら、本人不在で奥さんに断られて、
        しょうがないからゲイツと共同で作ったのが「PC-DOS」。
        ゲイツが買ってきたわけではない(アイデアは...だが)
        MS-DOSがIBM-PCに載ったことはない(PC-DOSなんだよな)
    
    7 :ナイコンさん :02/03/06 14:10
        >>6
        http://www.page.sannet.ne.jp/manatee/secretdiary/main/faq.htm#Q9
    
    
    8 :ナイコンさん :02/03/06 14:12
        >>6
        ゲイツはシアトルコンピュータの86-DOSを買ってきて、
        IBMにはライセンス提供したんだよ。
        ちなみにIBMとの話はシアトルコンピュータ側には内緒。
    
    
    10 :ナイコンさん :02/03/06 15:05
        >>8
        なら86/DOSがPC-ATにそのまま載せられるかい?
        アイデアと構造はSeatleからもらったけど、そのままじゃ載らない。
        だからIBMと共同開発になったんだよ。
        (F16そのままじゃ役に立たないから、共同開発して三菱F2作ったよ
        うなもんだ)
        アイデアは...って書いたの、その辺のニュアンスわかってほしかっ
        たんだが。
    
    11 :ナイコンさん :02/03/06 16:26
        IBM PC開発陣はIBMのはみ出し者。
        故にIBMらしからぬ製品が生まれたなり。
    
        ビルゲイシは世界一の営業マン。
        故にチャンスを逃さず大企業へと変貌したなり。
    
        キルドールは成功にあぐらをかいて先を見誤った。
        故にチャンスを逃して衰亡の中冥途に旅立ったなり。
    
    12 :ナイコンさん :02/03/06 16:48
        >6
        キルドールを訪問したら(自家用飛行機に熱中してて)留守だった・・・というのは
        都市伝説だという話も聞いたが。
        20年以上前の話だ、真相はあるていどのところまでしかわからんだろ。
    
    13 :1 :02/03/06 17:54
        >>11
        当時の”メインフレームばりばり&ダントツ世界一コンピュータ会社”IBMがなぜ
        ”はみ出し者”=Dirty thirteen(s)に「やらせた」んでしょうかねえ?
        パソコン開発なんて正に「汚れ仕事」だと考えてたんでしょうか。
        今日の状況からは想像がつきません。
    
    14 :ナイコンさん :02/03/06 18:00
        >>10
        なんにしても買ったのはアイデアだけではなくて
        86DOSそのものを買い取ったわけだから、誤解されても
        仕方ないんじゃないか?
    
        OSクレクレ厨IBMが現れた。
         ↓
        その話は内緒でシアトルコンピュータから86DOSを$7500で買ってきた。
         ↓
        86DOSをベースにIBMと共同開発でPC-DOSを作るが、権利はほとんどMSのもの。
        (Win3.1まではIBMも権利を持っている)
         ↓
        IBM PC売れ売れ。ライセンス料でガッポリ。
         ↓
        (゚д゚)ウマー
    
    
    15 :1 :02/03/06 18:02
        >>8
        どうもです。その時のゲイツは、その後の展開についてどれくらい予想してたんでしょう。
        さすがに目先の敵(CP/M)に勝つ事しか考えてなかったのかな。
    
    16 :ore :02/03/06 18:14
        うまくいけばOS市場乗っ取れるかも。だめでもかなり儲かりそうだな。
        くらいじゃないかな。
    
        86DOSっていろんな名前で呼ばれてたりするけど、どれが本当の
        名前なんだろう?
        そういや86DOSつくったティム・パターソンは、その後MSへ移るが
        イマイチ報われてない気がする。MSX-DOSのCOMMAND.COMには
        バイナリで名前がクレジットされてるんだが。
        いつまでMSにいて今はどうしてるんだろうか。
    
    
    17 :1 :02/03/06 18:39
        ゲイツ的には
         失うものは何もない
         でも化け物のような(?)野心に溢れていた
         その為に出来ることは何でもやる。IBMの下僕になってやる。(将来は別)
    
        ただしその野心は、
    
         自分の開発したオリジナルなものを広く普及させたい
    
        という技術者のものではなく、
    
         買い物で良いから自分の会社の名前が入ったものを普及させて沢山儲けたい
    
        という営業的なものだったのですね。
    
    19 :11 :02/03/06 20:38
        >>13
        当時のIBMはパーソナルコンピューターに魅力を感じてなかったようです。
        そこで会社としては重要でない人を集めて開発に当たらせたそうです。
        社外から出来合のパーツを取り寄せたりオープンアーキテクチャを採ったりと、
        IBMとしては前代未聞の経過を持って完成したのがIBM-PCです。
        まさに開発陣は元より製品としてもはみ出し者でした。
    
    20 :横島 :02/03/06 20:54
        >>19
        どうもです。なる程です。
    
        >まさに開発陣は元より製品としてもはみ出し者でした。
        その「はみ出し者」、フロリダに隔離された「汚い13人」が人類史上最も普及した
        コンピュータである「IBM-PC」を生み出した。ドラマですね!
    
        或いはもし、当時のIBMが本気で取組んでいたら。
        重要プロジェクトとしてIBM「エリート」社員'sが担当していたらどんなPCが
        出来たのでしょうか?
         →恐らく肩の力が入り過ぎてH/W,S/W共自社開発のバリバリ最先端仕様。
          しかし、コスト高、使い勝手悪、信頼性今一で結局普及せず。
          ってところでは無いかな~と。
    
    21 :横島 :02/03/06 21:06
        >>会社としては重要でない人を集めて開発に当たらせたそうです。
    
        汚い13人(Dirty thirteens)がどんな意識で新しいPCを開発していたのかも
        すごく興味があります。
        (1)IBMの落ちこぼれとして、失意の中、惰性に流されながら嫌々仕事した。
          何でIBMに入社したのに、こんな僻地で、こんな仕事をしなきゃいかんの・・・
          なるべく手抜きして一丁あがりで作ってやる。
        (2)パソコンの将来性を信じ、自分を評価しない社に一泡吹かせてやると、
          リーダー(ドン・エストリッジ)の元に結束。内製技術や表面的なスペックに拘らず、
          将来の発展性や真の使い易さを徹底追求していった。
    
        同じ結果でも天と地ほどの差があります。私は(2)だと信じてます。
        Dirty thirteensに萌え~
    
        そしてドン、何で死んじゃったんだーっ!
    
    22 :11 :02/03/06 21:11
        >>20
        それこそIBM-PCの後継機、IBM-PS2の姿。
        新しい規格を作りクローズド化する事で互換機メーカー潰しを企んだ意欲作。
        しかし自由競争で活性化する互換機マーケットをうち崩せず普及しなかった。
        開発メーカーすら翻弄させるIBM-PCや恐るべし。
    
    23 :11 :02/03/06 21:13
        IBM-PC開発に関する本が出てますよ。
        図書館で借りて読んだことを思い出しながら書いてます。
        タイトルは忘れたのでスンマソン。
    
    24 :ナイコンさん :02/03/06 21:16
        >>10
        SCPの86DOSは手持ちにあるけど、元々XXシステム用として売られていたわけじゃない。
        CP/Mだって、Digital Researchが発売したのはGenericSystem用でBDOS以下、つまりBIOSコールできるように
        移植する作業が必要だったんだけどな。たまたま日本では8001とかX1とかマスプロダクションなマシンがあって
        メーカーが移植作業をすませていただけのこと。アメリカでもS-100用のFDCカードとかI/Oアドレスも割り込みも
        コントローラーチップも違うモノがあって、それに移植していた。
        だから、86DOSがPC/AT(PC-ATという名前の機械は存在しないよ)にそのまま載らないのを根拠にするのは非常に
        浅薄な論調だよ。なにしろ86DOSがそのまま動くマシンって一般には無かったしね。
        当時のシステムの事知らずに偉そうな事言わないの。
    
    25 :横島 :02/03/06 21:27
        >>24
        レスどうもです。とても勉強になります。今後も宜しくお願い致します。
        マターリ行きませんか。何せ20年も前の話だから・・・
    
    26 :ナイコンさん :02/03/06 21:28
        神が降臨したな・・・。
    
    27 :ナイコンさん :02/03/06 21:39
        >>10
        これに関する説はいろいろあるが、いろいろな本の話を私なりに統合するとこんなふう。
    
        IBMがPCを開発することになる。
         ↓
        そのPCのBASIC開発をMSに依頼
         ↓
        MSはOS供給元としてデジタルリサーチをIBMに紹介。
        デジタルリサーチには重要な客が行くからと連絡。
        (但しそれがIBMであるということは伏せて)
         ↓
        IBMがデジタルリサーチに行く。
         ↓
        キルドールは他の商用で不在で、副社長である彼の奥さんが応対。
         ↓
        IBM側の態度が偉そうな上に、守秘契約にサインするまで仕事の内容に関する話をしない。
         ↓
        奥さん爆発しIBMを追い返す。
         ↓
        OSの話がMSに戻りMSでOSも用意することにする。
         ↓
        シアトルコンピュータから86DOSを買ってくる。
         ↓
        86DOSをベースにMSとIBMでPC-DOSを作る
    
    
    28 :ナイコンさん :02/03/06 21:40
        そもそも、シアトルコンピュータが86DOSを作ったのは、デジタルリサーチが
        出す出すとアナウンスしていたCP/M86を自社の産業用コンピュータに乗せる
        予定だったのに、待てど暮らせど出なかったので痺れを切らして自社で
        作ったという話だから、結局商売敵をつくるタネを撒いたのはキルドール自身
        ってことになる。
    
    
    29 :横島 :02/03/06 21:43
        >>22,23
        >それこそIBM-PCの後継機、IBM-PS2の姿。
        パソコンが大きなマーケットを持つことが明らかになり、
        「パソコンなんて、フッ」と馬鹿にしていた(?)巨人IBMも本腰を入れて取組んだ。
        そのIBMエリート社員'sの開発したIBM-PS2は結局マーケットに全面的に受け入れられる
        事は無かった・・・
    
        この間まで「汚い13人」と馬鹿にしてたのに、落ちこぼれに負けたエリート社員'sの心境や如何に?
        おお、ここにもドラマが。
    
    30 :横島 :02/03/06 21:47
        先に結論(私の勝手な思い込みに過ぎませんが)を言ってしまうと
    
        「汚い13人」の方がエリート社員よりパーソナルコンピュータという物の
        本質を良く理解していた
    
        という事なのでは。嗚呼やっぱり、Dirty thirteens萌え~
    
    31 :横島 :02/03/06 21:56
        >>27
        ご馳走様です。おおっ凄いドラマじゃないですか!
    
        >デジタルリサーチには重要な客が行くからと連絡。
        >(但しそれがIBMであるということは伏せて)
        もしこれが、ゲイツの策略だったら!?
    
        >IBM側の態度が偉そうな上に、守秘契約にサインするまで仕事の内容に関する話をしない。
        > ↓
        >奥さん爆発しIBMを追い返す。
        もしこれがゲイツの真の目的だったら?
        いや普通ならこんな事は言いません。しかし「あの」ゲイツなら、ひょっとして・・・
    
    32 :ナイコンさん :02/03/06 21:58
        もうちょっと落ち着け。
        この板のスピードは遅いんだ。
    
    (このあと 360レスまでいきます)
    

    中身が濃いので抜粋しようもない。このあとも濃い話が続いています。

    しかし、IBM-PC で 68000 してたら…とかいうのはちょっと苦笑するレベルだわな。 23 が言及している本は何だろう。 多分自分も読んだことがあるような気もするんだけど。

    ITmediaアンカーデスク:IBM PCの父「ドン・エストリッジ」を思う ドン・エストリッジ - Google 検索 IBM PC鍵盤

    ■_

    
    offer.kaye at blogs.perl.org: A Gentle Introduction to Perl 6 Using Rakudo Star
    
    A Gentle Introduction to Perl 6 Using Rakudo Star
    
    By Offer Kaye on July 30, 2010 9:41 PM
    
    So, Rakudo Star was recently released and I decided to give it a try. So far, I like 
    what I'm seeing.
    
    The below is meant to serve as a gentle introduction to the Perl 6 language, if it 
    seems to be very "baby-Perl-6" that's because I'm learning the language as 
    I'm writing it. Plus, that's why I called it a gentle introduction! :)
    
    Installation on Windows 7
    
    Download the msi file available from GitHub, double-click and answer the questions 
    with "yes".
    
    The Perl 6 executables will be installed under C:\Rakudo\bin.
    
    インストールパッケージを実行すると c:\rakudo\bin に入りますよと
    
    Open the Control Panel and go to "System and Security" -> "System". 
    In the left side of the window you should see 4 links, click the bottom one - 
    "Advanced system settings". In the window that opens ("System 
    Properties" - "Advanced" tab), click on the "Environment 
    Variables..." button, which is at the bottom. In the bottom part of the window 
    which opens, there is a "System variables" window. Scroll down to the 
    "Path" variable, make sure it is selected and hit the "Edit..." 
    button. Jump to the end of the "Variable value" field and add 
    ";C:\Rakudo\bin" to the end - the ";" is important. Hit 
    "OK", "OK", "OK". Now open a new cmd.exe window and type 
    "perl6 -v". You should get the output:
    
    #コンパネ開いて環境変数設定と
    
        This is Rakudo Perl 6, version 2010.07-47-g9fd5eaa built on parrot 2.6.0 Copyright 2008-2010, The Perl Foundation 
    
    Congratulations, you're ready to program in Perl 6 on Windows 7 :)
    
    Hello, world!
    Open your text editor, type:
    say 'Hello, world!';
    
    (以下略)
    

    ■_ 本日の巡回から


    一つ前へ 2010年7月(下旬)
    一つ後へ 2010年8月(中旬)

    ホームへ


    Copyright (C) 2010 KIMURA Koichi (木村浩一)
    この文書の無断転載はご遠慮ください(リンクはご自由にどうぞ)。

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