2009-10-26[n年前へ]
■「エクセル」と「無名関数」
ふと、エクセルほど無名関数(Mathematicaでいうところの純関数)を使っている開発環境はないのではな いか、と考えた(妄想ともいう)。もちろん、エクセルでも関数を定義したり、記述式を定義したりすることができる。しかし、実際にエクセルを使う状況を考えてみれば、「セルに処理を書き入れ(まく)り」「その処理記述に名前を付けたりはしないまま・コピペしまくり、使い回す」ことが多いと思う。これは、「エクセルが配列ベースの無名関数志向開発環境だ」と言えるのではないか、などと考えてみたのである。
たまに、Rubyでデータ処理し、その結果をエクセルで眺めることがある。そんな時、Rubyとエクセルの組み合せワザのようなことをすることもある。それは、たとえば、こんな具合のコードだ。
d=[] 10.times{d<<'=2*RC[1]'} d<<ARGV[0] puts d.join(',')'=2*RC[1]'の部分は、エクセルの関数である。そして、それ以外の部分はRubyの関数だ。RC[1]は「自分の右のセル」を指すので、次(右)のセルの2倍という関数である。たいていのデータは、左から右(あるいは上から下)に読み込んでいくので、この例の場合、次(未来)の値を使って演算をしていることが面白い、と感じたりする。
それでは、このRubyスクリプトをm.rbと名付け、
ruby m.rb > m.csvとして、m.csvを作成する。そして、そのcsvファイルを(セル表示名ををR1C1形式にした)エクセルで開くとデータ列ができあがる、ということになる。上の例であれば、下のような数値が入ったエクセルシートができあがる。
512 256 128 64 32 16 8 4 2 1
この例のような、複数言語を組み合わせた「闇鍋(やみなべ)ごった煮プログラミング」を上手く活用することはできないだろうか。…そういうことをよく考えるのだけれど、なかなか良いアイデアが思いつかない。何か、面白い位置づけ・適切な使い方がないものだろうか。
2009-11-15[n年前へ]
■クラスタで計算可能なスーパーコンピュータ向け「Excel」を開発中
「MS、スーパーコンピュータ向け「Excel」を開発中--クラスタで計算可能に」
Microsoftは米国時間11月16日、スーパーコンピューティング分野の主要なカンファレンスにおいて、強力なクラスタサーバ向けに再設計された「Excel」スプレッドシートのテスト版を発表した。
クラスタ上でのExcelのパフォーマンス改良を進めることで、通常ならば計算に数週間を要していたようなスプレッドシートでも、わずか数時間で稼動するようになると、Microsoftは説明している。
2009-11-20[n年前へ]
■誰もが同じように間違える「典型的な間違い」には「原因」がある
以前書いたように、(下に動画として張り付けた)「論理的にプレゼンする技術 聴き手の記憶に残る話し方の極意 (サイエンス・アイ新書) 」(ちなみに、「正しい事実+正しい論理=わかりやすい話」というのは、理系にありがちな“正しいけれど”“間違った勘違いだと私は考えています。だから、本書のタイトルは少し誤解を与えるかもしれない、と思っています)を書いた理由は2つあって、ひとつは以前書いた本の適切でない部分を直したかったことです。そして、もうひとつは、あまりにも、誰もが同じように間違える「典型的な間違い」が多いことに驚かされたからです。
そして、そのことを奇妙に感じ、その誰もが同じように間違える「典型的な間違い」を調べてみると、やはり当然のごとく「原因」があるんだ、ということがわかりました。ひとことで言ってしまえば、それらの多くは「ツールのデフォルト設定」でした。わかりにくい資料を作った人が悪いわけではなくて、ツールのデフォルト設定が、自然とそういったわかりにくい資料を生み出す仕組みになっていたわけです。
やはり、誰もが同じように間違える「典型的な間違い」が多い、という「結果」があるからには、それを生み出す当然の「原因」があった、という「わかりやすい自然な因果関係」があったのです。そんな間違いを生み出す「わかりやすい必然性」があったのです。
といっても、これは(これまでに出た)PowerPoint と Excel という道具を調べた限りでの話です。次に出る、PowerPoint2010では、その「同じように間違いを起こさせるツールのデフォルト設定」がどのようになっているか、に興味があります。というわけで、パブリックベータでその辺りを確認してみよう、と思っているところです。
2009-12-04[n年前へ]
■Thinkpad 加速度センサでExcel3次元グラフを未来のディスプレイ風にしよう
Ruby版 Thinkpad 加速度センサ類取得クラスを作ったので、さっそく何か加速度センサを使って遊んでみることにしましょう。まずは、とても簡単に「未来のディスプレイ」を作る風のことを、Ruby+Microsoft Excelで行ってみることにしましょう。
というわけで、Thinkpadを傾けると、それに応じてエクセルの三次元グラフを(傾けた方向に応じた)さまざまな方向から眺めることができるという次のようなスクリプトを書いてみました。
このスクリプトはまずエクセルで(適当な値を代入した)三次元グラフを作成し、(その後の30秒間にあなたがグラフを色々カスタマイズする時間を与えた上で)、30秒経た後にThinkpadの傾きに応じて三次元グラフを好きな方向からリアルタイムにグリグリ動かしながら眺めることができる、というスクリプトです。(動画は「Thinkpad 加速度センサ+RubyによるExcel3次元グラフ動画」で観ることができます)
require 'accelerometer' require 'win32ole' excel=WIN32OLE.new("excel.application") excel['Visible']=TRUE excel.Workbooks.Add() excel.Range("a1")['Value']=1 excel.Range("a2")['Value']=1 excel.Range("a3")['Value']=1 excel.Range("a4")['Value']=1 excel.Range("b1")['Value']=1 excel.Range("b2")['Value']=2 excel.Range("b3")['Value']=2 excel.Range("b4")['Value']=1 excel.Range("c1")['Value']=1 excel.Range("c2")['Value']=3 excel.Range("c3")['Value']=2 excel.Range("c4")['Value']=1 excel.Range("d1")['Value']=1 excel.Range("d2")['Value']=1 excel.Range("d3")['Value']=1 excel.Range("d4")['Value']=1 excel.Range("a1:d4").Select() excelchart=excel.Charts.Add() excelchart['Type']=-4100 sleep 30 # wait time for custumize accelerometer=Accelerometer.new 300.to_i.times do accelerometer.getAccelerometerData x=accelerometer.x y=accelerometer.y r=Math.sqrt(x*x+y*y) elevation=90-r.to_i rot=360-(Math.atan2(y,r)+Math::PI)/(2*Math::PI)*360 excelchart.rotation=rot # 0 to 360 excelchart.elevation=elevation # -90 to 90 sleep(0.2) end excel.ActiveWorkbook.Close(0) excel.Quit()このスクリプトを動かせば、Thinkpadを傾ければ、低い角度からグラフを眺めたり、左右に倒せば左右の異なる方向からグラフを眺めたりする…ということができます。「未来風」かはさておき、現実世界で行う動作に適切に対応した動作、つまりは「実感・体感できる」ソフトウェアを作る、というのは何だかとても面白いものです。
今回作ったスクリプトを動かしているようす、Thinkpad+Ruby+Microsoftエクセルでグラフを未来風にグリグリ動かしている様子を撮影した動画は、「Thinkpad 加速度センサ+RubyによるExcel3次元グラフ動画」として、公開しました。
2009-12-05[n年前へ]
■Thinkpad 加速度センサ+RubyによるExcel3次元グラフ動画
「Thinkpad 加速度センサでExcel3次元グラフを未来のディスプレイ風にしよう」を操作しているようすを、ケータイのカメラで撮影してみました。それが、下の動画になります。Ruby版 Thinkpad 加速度センサ類取得クラスを使い、Excel 2007のグラフを視点を操作している、という具合の動画です。パースペクティブを適切につけておくと、上下方向の視線移動に関してはかなり自然に眺めることができます。(この動画実行のためのRubyソースは上記記事を参照してください)
Excelの三次元グラフが、ElevationとRotationという、天頂近くで精度が低下しやすい座標指定方式なのと、Thinkpadの加速度センサが2軸方式で、鉛直線中心の回転を取得することができなかったりするところが(東芝のPCなどでは3軸取得が可能だったりするのですが)、「少しの変さ」をかもしだしていたりしますが、そこはそれ、Microsoft ExcelのグラフをノートPCの方向を変えると、それに応じた色々な方向から眺めることができる、というのは何だか面白い、とは思いませんか?