はてなキーワード: C#とは
訳してみた。あらためて、和訳はものすごく時間を要する作業だということがわかった。もうしないと思う。
注意:以下は意訳、適当訳、稚拙訳であり、誤訳を多々含んでいることは確実であり、Joel氏が本当に以下のように述べているとは限りません。
なぜMicrosoft Officeファイルフォーマットはこんなにもややこしいのか (そしてその対処法を幾つか)
Tuesday, February 19, 2008
先週、MicrosoftはOfficeのバイナリフォーマットを公開したが、このフォーマットは殆ど正気でないように見える。Excel 97-2003ファイルフォーマットは349ページのPDFファイルだ。でも待って、それで全部じゃない。このドキュメントには次の面白いコメントが書いてある。
それぞれのExcelワークブックは1つのcompound fileに収められている
つまり、Excel 97-2003ファイルはOLE coumpound documentで、それは結局、1つのファイル内にあるファイルシステムである。これは、理解するのにあと9ページはスペックを読まなくちゃならないぐらいには十分に複雑だ。そしてこれらの「スペック」は、普通我々が考えるようなスペックというよりは、Cデータ構造みたいに見える。これ全体が階層的ファイルシステムなのだ。
もしあなたが週末を、Wordドキュメントをブログにインポートしたり、あなたの個人的な財務データからExcelフォーマットのスプレッドシートを生成するような気の利いたコードを書くのに使おうと思ってこれらのドキュメントを読み始めたなら、このスペックのややこしさと長さがそんな気をあっという間に失せさせるだろう。普通のプログラマはこのOfficeバイナリファイルフォーマットについて次のような結論を下す:
この4つ全てについて、きみは間違っている。ちょっとだけ掘り下げて、これらのファイルフォーマットがどうしてこんなに信じがたいくらいに複雑なのか、なぜMicrosoftの悪いプログラミングを反映しているのではないのか、そしてそれを回避するためにあなたに何ができるか、を明らかにしよう。
理解すべき最初のことは、これらのバイナリファイルフォーマットはちょっと違ったデザインゴールを持って設計されたということだ。たとえばHTMLとは。
これらはすごく古いコンピュータで速く処理できるようにデザインされた。Excel for Windowsの初期のバージョンでは、1MBのRAM、20MHz動作の80386が Excelを快適に走らせることができるための妥当なものだった。このファイルフォーマット内には、ファイルを素早く開いたり閉じたりするための最適化が沢山仕込まれている:
これはライブラリを使うことを想定して設計されている。もしあなたがバイナリをインポートするものを1から書き上げたいと思ったら、Windows Metafile Format (何か図を描く場合) や OLE Counpound Storage みたいなものをサポートしなくてはいけなくなる。もしあなたが Windows上でやるのなら、そうしたことをたいしたことのない作業にするためのライブラリのサポートが存在する... そういったフィーチャーを使うことは(元々)マイクロソフトチームのためのショートカットだった。でもあなたが全部を自分でスクラッチから書くなら、全部の作業を自分自身でやらなくてはいけない。
オフィスはcompound documentsに対して広範囲のサポートを持っている。例えば、スプレッドシートをWord文書に埋め込んだりできる。完璧なWordファイルフォーマットのparserは、同じように、埋め込まれたスプレッドシートで何かインテリジェントなことが出来るべきだろう。
それは相互協調性(interoperability)を意識してデザインされてはいない。仮定されていたのは、WordファイルフォーマットはWordからのみ読み書きされなくてはいけない、ということで、それは当時においては十分に合理的なものだった。これは、Wordチームのプログラマがファイルフォーマットをどう変更するかについて決定を行う場合にはいつでも、彼らが気にするのは (a)何が高速か (b)Wordのコードベースにおいて最小の行数になるのは何か、だったことを意味する。SGMLやHTML-interchangeableといった標準ファイルフォーマットのようなアイデアは、最初にインターネットがドキュメントの相互交換を実現するまで現実のものにはならなかった。それはOfficeバイナリフォーマットが最初に考案されてから10年後のことだったのだ。ドキュメントを交換するのにインポーターとエクスポーターを使うことができるという仮定が常にあった。実際Wordは簡便な交換のために設計されたRTFと呼ばれるフォーマットを持っており、そのフォーマットは殆ど最初のころからあり、今も100%サポートされている。
それはアプリケーションの全ての複雑さを反映していなくてはいけない。 全部のチェックボックス、全部のフォーマッティングオプション、そして全部の、Microsoft Officeのフィーチャーは、ファイルフォーマットのどこかで叙述されていなくてはいけない。Wordのパラグラフメニューにある、"Keep With Next" と呼ばれるチェックボックス、これはパラグラフを、その後ろのパラグラフと同じページに置くのに必要な場合は、次のページに移動させるもの(?)だが、これもファイルフォーマットの中に無くてはいけない。そしてこれはつまり、あなたがWordドキュメントを正しく読み込める完璧なWordクローンを実装したいなら、そういったフィーチャーを実装しなくてはいけないということだ。Wordドキュメントをロードする競争力のあるワードプロセッサを作っているのなら、ファイルフォーマットからそのビットをロードするコードを書くのには1分しかかからないかもしれないが、ページのレイアウトアルゴリズムをそれに対応させるのに何週間もかかるかもしれない。もしあなたがそうしない場合、カスタマーがあなたのクローンでWordファイルを読み込んだら、全部のページがぐちゃぐちゃになってしまうだろう。
それはアプリケーションの歴史を反映していなくてはいけない。 このファイルフォーマットに見られる多くの複雑さは、古く、複雑で、愛されず、めったに使われないフィーチャーを反映している。それらはファイルフォーマットのなかに後方互換性のためにまだあり、そしてMicrosoftにとってその辺りのコードを残しておくことには何らコストはかからない。しかしあなたがこれらのファイルフォーマットをparseおよびwriteする一貫した完全な仕事をしたいと思うなら、Microsoftのインターンが15年前にやったのと同じことを全て、またやらなくてはいけない。要点は、何千人年の仕事が今のWordやExcelには費やされてきたのであり、これらのアプリケーションの完璧なクローンを作りたいと本当に欲するなら、あなたは何千人年を費やさなくてはならないことになる、ということだ。ファイルフォーマットは単に、アプリケーションがサポートする全てのフィーチャーの簡潔なサマリーなのだ。
手始めに、小さな例を一つ、深く見てみよう。Excelのワークシートは色々なタイプのBIFFレコードの集まったものだ。私はスペックの一番最初のBIFFを見てみたい。1904と呼ばれるレコードだ。
Excelファイルフォーマット仕様のこのレコードについての記述は非常に曖昧なものだ。そこでは単に、1904レコードが「1904日付システムが使われているかどうか」を示すレコードだ、と述べているだけだ。ああ、使えない仕様書の典型的な一例だ。あなたがExcelファイルフォーマットで何かしている開発者で、そしてファイルフォーマット仕様にこう書いてあるのを見つけたなら、あなたがMiocrosoftは何かを隠しているのだと結論付けたとしても無理はない。この情報の断片は十分な情報をあなたに与えはしない。あなたには幾ばくか外部の情報が必要で、私は今ここで、それを提供しよう。Excelワークシートには、2種類ある。日付のエポックが1900/1/1のもの(これには、Lotus 1-2-3 との互換性のために故意に入れられた閏年に関するバグがあるが、ここでそれについて述べるのは退屈すぎる)、および、1904/1/1のものだ。Excelは両方をサポートしているが、それはExcelの最初のバージョンはMac版であり、それは単に簡単だったという理由でOSのエポックを使っていて、しかしWindows版のExcelは1-2-3のファイルをインポートできなくてはならず、そしてそれは1900/1/1をエポックとして採用していたからだ。あなたが涙ぐむのも無理はない。歴史のどの時点においても、プログラマが正しいことをしなかった、という時はないのだが、しかし現実にあなたが手にしているものはこれなのだ。
1900と1904のファイルタイプは両方とも世の中には広く存在しており、それは通常、ファイルがWindowsとMacのどちらで作られたかによる。一方のタイプから他方のタイプへ黙って変換するのはIntegrity的に問題があるので、Excelはファイルタイプを変換することをしない。Excelファイルをparseするためには、あなたは両方を扱わなくてはならない。それはファイルからこのbitをロードするだけの問題ではなく、あなたが日付表示と両方のエポックを扱うparsingのコードまで書き直さなくてはいけないということを意味する。実装には何日かかかるだろうと私は思う。
実際、あなたがExcelクローンの作業をするなら、日付の扱いについて、あらゆる種類の微妙なディティールを発見することになるだろう。Excelは日付の値をいつ変換するのか? 表示の整形はどうやっているのか? なぜ1/31は今年の January 31と翻訳され、また一方で1/50はJanuary 1st, 1950と翻訳されるのか? Excelのソースコードと同じだけの量のドキュメントを書かないがぎり、振る舞いに関しての微妙なビットを全て完全に記述することはできない。
そしてこのレコードは、あなたが扱う何百もあるBIFFレコードの最初の1つに過ぎず、しかももっとも単純なものなのだ。他のレコードの殆どは、より多くのプログラマーを涙に暮れさせるぐらいには十分複雑だ。
唯一導き得る結論はこれだ。
MicrosoftがMicrosoftとOfficeのファイルフォーマットをリリースしたことは大変有用なことだが、しかしそれでOfficeファイルフォーマットをインポートしたり保存したりするのが楽になるということは全く無さそうだ。それらは狂気じみて複雑で、リッチなアプリケーションで、そしてあなたは人気のある20%の部分を実装して80%の人々を幸せにするというくらいのことしかできない。バイナリファイル仕様によってなされるのは、多く見積もっても、著しく複雑なシステムのリバースエンジニアリングにかかる時間を何分か削減するくらいだろう。
オーケー, 私はいくつか回避法を教えると約束した。良いニュースは、殆どの良く知られたアプリケーションにとって、Officeバイナリファイルフォーマットを読み書きしようと試みることは誤った決定だということだ。あなたが真剣に考えなくてはいけない代案が2つある。Officeそのものにそれをやらせるか、書き込むのが簡単なファイルフォーマットを使うかだ。
ヘビーな仕事はOfficeにやらせよう。WordとExcelは実に完全なオブジェクトモデルを持っており、COMオートメーションの手段が可能で、これであなたは何でもプログラムでやるようにできる。多くのシチュエーションでは、Office内のコードを再利用するほうがそれを実装しようとするよりも良い。ここにいくつか例がある。
この手のアプローチは、全ての種類の一般的なOfficeタイプについての、サーバ上であなたがやりたいと思うであろうアプリケーションで、うまくいくだろう。例えば:
これらのケースの全てにおいて、Officeオブジェクトにインタラクティブ動作でないことを教えてやる方法があり、だから表示をアップデートするのに煩わされたり、ユーザに入力を促す必要はない。ところで、このようなやりかたでいく場合には、gotchas(?)がいくつかあり、そしてそれはMicrosoftは公式にサポートしているものではない。だからあなたがそれを始める前にはKnowledge baseの記事を読むように。
書き込むファイルにはもっとシンプルなフォーマットを使いなさい。単にOfficeドキュメントをプログラムで生成したいなら、殆どいつでもOfficeバイナリフォーマットよりももっと良いフォーマット、WordやExcelでも問題なく開くことができるようなフォーマットが存在する。
いずれにせよ、全てのOfficeファイルを完全に読み書きできるような、文字通りのOffice競合製品を作ろうとする(その場合には、何千年もの作業があなたに予約される) のでない限り、Officeバイナリフォーマットの読み書きをするというのは、何であれあなたが解決しようとしている問題を解決するためのもっとも労働集約的な方法だ。
おもいっきり同意しかねる。オリ増田はこれから情報系の大学生になる人だろう?
C#やJava、その他 lightweight 言語などのメモリアロケーションを自動でやってしまうような言語から入門しても内部動作の理解ができない。
文字列の連結は a . b でおk!ってだけでは情報工学を専門とする学生ではお粗末すぎる。
Cから学ぶのはプログラミングだけが目的ではなくて、コンピュータがどうやって動いているのかを理解しやすいからでもあるのだ。
プログラミング入門として、オブジェクト指向をとりあえず脇においておけるのもいいかもしれない。
その後オブジェクト指向として C++ に移行するのが大学のカリキュラムとしては王道じゃないかな。
ランクの高い大学だとその後 Java とかは、知っているものとしますので予習しておいてください、という流れになるんだろうね。
後は lightweight 言語のどれか1つを趣味でやっておけば、大抵の言語は入門ぐらいなら1日でできるようになる(なってほしい、ちゃんと概念を理解、体験していればなるはずだ)。
Cはお勧めしない。なぜかと言うと、Cは言語使用があまりにいい加減だから。特に型関係がひどいのだが、型の概念をきちんとつかめないと、問題をプログラムに落とすのが下手になるので、俺はCはお勧めしない。
C#かJavaがいいよ。どちらもC言語に似ているといわれるが、とっつきやすいように字面を似せているだけで、どちらもCとはまったく違う言語になっている。Cの悪いところはばっさり切り落としているので、その分勉強しやすい。これはC++を薦めない理由でもある。C++はCと互換性を維持しているので、ぐちゃぐちゃになってしまった。CとC++は本当にそれじゃないとダメな局面にきたときに勉強すればいい。
C#もJavaも入門コンテンツがネットに転がっているので、好きな奴を読めばいい。
C#とJavaを薦める別の理由は、そのライブラリが極端に充実していることがある。Cでプログラムを書いていると、たまに、何で俺がこんなことをやらないといけないんだ?世の中で何万人が同じことを回転だよ?、と思うようなことがある。言葉を変えると、非常に基本的な機能が無かったりする。C#とJavaは、基本的な機能の膨大なライブラリを含むのでそれを利用できる。
C#もJavaも良質の統合開発環境がある。C#にはVisual Stuido .Net Express for C#が、JavaにはEclipseが無料で提供されている。Javaには.net版もあるが、もうサポート停止だし互換性もよくないのでお勧めしない。
C#もJavaも型に厳しい。世の中には型に寛容な言語というものもあって、そういう言語が活躍する局面もあるが最初にきちんとした型を覚えておくというのは、スポーツや他の勉強と同じく他の言語と同じ。
Visual Studio express for C#には膨大な日本語オンラインヘルプが付いてくる。これは心強い。言語の基本からライブラリまでカバーしているので、旅先に本を持っていかなくてもPCがあればプログラミングには事足りる。
高専の化学っぽいところ出て、大学の化学っぽいところに編入して、
東京来て、初めての仕事でPHPで、誰に頼ればいいかもわからず、
使ってた言語?VB4とHSP2でしたが何か。
初めての仕事で学んだこと
その後もいろんな会社で
とか、けっこう酷いことをして、たくさんの人に迷惑をかけましたが、
今ではそれなりにIT土方をやっている。
…という俺から見ると、PHP初心者罵倒は、見るたびに、なんだか恥ずかしさを思い出す。
ああ、明日も仕事だし、勉強するね。うん。みんなごめんなさい。それは全部俺がやった事です。
あれです。
ごめんなさい。
> 例えばDVDが普及した今、VHSの技術が専門の人なんて何の役にも立たないわけ。
> 今まで磁性テープを20年くらいやってきたオッサンに、
> いきなり光学の話フォローしろってのも酷な話。
研究者かなんか?それだったらVHSが廃れたからっていきなり首切られることはないよね。
自分の分野の話になって恐縮なんだけど、例えばTCP/IPについて
誰よりも深い見識があったとして、そんなことは何の金蔓にもならないの。
単なる技術オタク。ExcelやCOBOLやVBも同じ。今有効な技術はいずれ廃れる。
で、今までCOBOLしか出来なかった人がJavaが出来ませんって駄々こねて
ドロップアウトしたり、VB6がVB.NETになったぐらいで狼狽する人が世の中には
腐るほどいるんだけど、そんなの元から自分の分野に対する見識がなくて、
小手先のどうでもいいテクニックだけでその場その場を切り抜けてきたことの
ツケが回ってきただけで、本当にその分野を理解している人間なら、ある日を境に
自分の持ってる知識がゴミの塊になることなんてあり得ないんです。
少なくとも自分のまわりの優秀な技術者はみんな最新技術なんか難なく習得しているよ。
最新技術についてこれるから優秀、というわけでは断じてない。
これはたぶんインターネットやコンピュータのことも指していると思うんだけど、
ことプログラミングに関して言えば、半世紀前からこの分野は本質的には「全く」
進歩していないよ。確かにJavaとかRubyとかC#とか流行りの言語はどんどん
生まれてきているけど、これらは既存の概念をパズルのように組み合わせただけの
代物で、概念そのものはずっと昔からある。それらをマスターしていれば
技術の移行には半日で十分。それが出来ない人はまだまだ未熟だ。
とりあえず私の所感としては、スペシャリスト、ゼネラリストに関係なく
「同じ所にとどまろうと思うなら、全速力で走り続けなさい」
オレはスーツなんてカッコいい服も着れず、ギークみたいなスマートな考えや自己表現もできず、
工場勤務の「作業着」な組み込みソフトウェアエンジニアだった。
何となく地味な感じがし、それが嫌で組み込み系の開発から離れ、Web系とかオープン系?的な仕事に移った。
From マイコン上でC/アセンブラ To Windows/Unixサーバ上でJava/C#/VB/Perl...+色々なライブラリ/フレームワーク
スーツを着て直接お客さんに会う機会も出来たし、瑣末なモノだけど自分が利用したオープンソースに対してパッチを送ったりもした。
でも、なんか違う。本当のスーツには敵わないし、ギークみたいにいろんな事を知らない。なんか仕事の達成感も少ない。
今になって思ったよ「作業着」を着て開発してた時がすごく楽しかったって。
何時も「作業着」を着てコードゴルフをしてた気がする。(必要に迫られてだけど)
Webアプリ作りなんかより色々と考える時間が多かった。独自の制御アルゴリズムとかね。
上で書いた地味な感じというのは、着てる服が「作業着」で工場勤務だからオレって土方だよなぁって当時は自分で思ってたから。
でも、今やってる事の方がよっぽどIT土方だなぁって思ってる。
なんかここ↓見てたらモノ作りしたくなった。
http://monoist.atmarkit.co.jp/
いや、そんだけです。
だいたい、セグメンテーションフォルトを起こすような言語は嫌い
Haskelわけわかんないし
Java重苦しいし、いちいちclass Hogehoge { public static void main() { ... } }書くのがめんどくさいし、API多すぎ
オブジェクト指向したくなるような複雑なプログラムは最初から考えない(作れない)
言語が提供するGUIのツールはOSとは別に独自のレイヤー、世界感を持っててとっつきにくい
マルチスレッド、排他処理を扱うようなプログラムは脳味噌がついて行かないので書かない
Ruby、、、そもそもLL言語で大規模でオブジェクト指向なプログラム書きたくない。小規模ならオブジェクト指向要らない。
俺のマシンで実行できないAda/Basic/Fortran/Pascal その他いろいろ
VHDL、Verilog?FPGAやゲートアレイなんて持ってない、持ちたくない(苦手だもん)
HTML、XMLは日本語とタグが入り乱れるので、そのつど日本語入力の切替えが死ぬほど嫌になった。
だから、HTMLとXMLは全部手入力なんて真似は絶対してやらねえ。
Flex(Action Script)はコンパイラがJavaで実装されてて重すぎる。(シェルを使えばまし)
JavaScriptはブラウザごとの挙動の違いを吸収しきれる自身が無いので使わない。
1プログラムにつき、(コメント含めて)250行以上書きたくない
(本文には触ったこともない言語を思い込みで罵倒しているなど、嘘、おおげさ、紛らわしいが多数混入しています。それが全部わかった貴方はプログラミング言語マスターです。)
バカすぎる。俺は学生なんだが、
こんな質問に答えられるわけがないだろ。「お客様の主な役割について最も適したものをお聞かせください。」という質問に「学生」って答え作ってるんだから、学生にしたら上の質問を無効にしろよ。「システムを導入するにあたっての、あなたの立場を教えてください。」は確実に答えが選択肢にないんですが。学生は不可なのかと思って対象ユーザーをしらべたけど、ちゃんと学生も対象に入っている。
Visual C# 2005 Express Edition は、学生や、プロフェッショナルではない開発者を対象ユーザーと想定して作成されています。Visual C# 2005 Express Edition には、Visual Studio 2005 Professional Edition と同じ機能が多数用意されていますが、アプリケーション開発を簡単に始めることができるようにシンプル化されてもいます。
http://www.microsoft.com/japan/msdn/vstudio/express/faq/default.aspx#vcsharp学生向けを意識してるなら、質問もそれ向けに作ってくれよ。あれか製品自体は学生向けだけど、無料ダウンロードは学生禁止なのか?もうどうでもいいや。
あ、あと
どのプログラミング言語の話題に興味がありますか。にHTMLやXMLが入ってるのもアレ。HTMLがプログラミング言語って言うのは意外とマイクロソフトが広めてるのかもしれない。
http://anond.hatelabo.jp/20071030034313 の二番煎じ
あまりのアホさに、作ってて気が狂いかけた
方針
using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.IO; using System.Reflection; using Microsoft.CSharp; delegate void ConvertTemplateDelegate(TextWriter tw, Dictionary<object, object> args); static class TemplateGenerator { public static ConvertTemplateDelegate Generate(string code) { CompilerParameters param = new CompilerParameters(); param.GenerateInMemory = true; param.ReferencedAssemblies.Add("System.Web.dll"); CompilerResults rs = new CSharpCodeProvider().CompileAssemblyFromSource(param, ParseTemplate(code)); if (0 < rs.Errors.Count) { StringWriter sw = new StringWriter(); sw.WriteLine("Compile Error..."); foreach (CompilerError err in rs.Errors) sw.WriteLine(err.ToString()); throw new Exception(sw.ToString()); } return (ConvertTemplateDelegate) Delegate.CreateDelegate(typeof(ConvertTemplateDelegate), rs.CompiledAssembly.GetType("Template", true).GetMethod("Convert")); } private static string ParseTemplate(string code) { using (StringWriter sw = new StringWriter()) { sw.WriteLine("using System; using System.Collections.Generic; using System.IO; using System.Web;"); sw.WriteLine("public static class Template {"); sw.WriteLine("public static void Convert(TextWriter tw, Dictionary<object, object> args) {"); int index = 0; while (0 <= index && index < code.Length) { int i = code.IndexOf("<%", index); sw.WriteLine("tw.Write(\"{0}\");", EscapeString(i < 0 ? code.Substring(index) : code.Substring(index, i - index))); if (0 <= i) { i += 2; int i2 = code.IndexOf("%>", i); if (0 <= i2) { string cc = code.Substring(i, i2 - i); if (cc.StartsWith("=")) sw.WriteLine("tw.Write(HttpUtility.HtmlEncode(\"\"+({0})));", cc.Substring(1)); else sw.WriteLine(cc); i = i2 + 2; } } index = i; } sw.WriteLine("}}"); return sw.ToString(); } } private static string EscapeString(string code) { return code.Replace("\\", "\\e").Replace("\"", "\\\"").Replace("\t", "\\t").Replace("\n", "\\n").Replace("\r", "\\r").Replace("\\e", "\\\\"); } }
サンプル C# コード。ためしにテンプレートから Xml 生成して、標準出力してみる。
class Program { static void Main(string[] args) { ConvertTemplateDelegate func = TemplateGenerator.Generate(TemplateEngine.Resource1.template); using (StringWriter sw = new StringWriter()) { Dictionary<object, object> arg = new Dictionary<object, object>(); arg["title"] = "template sample"; arg["data"] = new string[] { "foo", "fooo", "<strong>foooooooooo!</strong>" }; func(sw, arg); Console.WriteLine(sw); } } }
サンプルテンプレート
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title><%= args["title"] %></title> </head> <body> <h1><%= args["title"] %></h1> <table> <% string[] data = (string[]) args["data"]; %> <% for(int i = 0; i < data.Length; i++) { %> <tr bgcolor="<%= i % 2 == 0 ? "#FFCCCC" : "#CCCCFF" %>"> <td><%= i %></td> <td><%= data[i] %></td> </tr> <% } %> </table> </body> </html>
出力例
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>template sample</title> </head> <body> <h1>template sample</h1> <table> <tr bgcolor="#FFCCCC"> <td>0</td> <td>foo</td> </tr> <tr bgcolor="#CCCCFF"> <td>1</td> <td>fooo</td> </tr> <tr bgcolor="#FFCCCC"> <td>2</td> <td><strong>foooooooooo!</strong></td> </tr> </table> </body> </html>
CodeDom 使って動的コンパイル……って、このコードのままだとセキュリティ的に大問題な気がするな。
素直に ASP.NET 使ったほうが楽だと直感した。
あと EscapeString すっごく自信ない。たぶん修正が必要だと思うw
Eclipse経由を諦めてAptana IDEをそのまま使うようにした。
なんかこれは、まんまEclioseなのかもしれない。同じコードから作られてるのかな?
使いやすいよ。
昨日の続きでこれをやった。
Windowsで簡単にRuby on Rails:Instant Rails+Aptana
http://japan.zdnet.com/sp/report/story/0,2000056431,20352478-3,00.htm
まずは、図11のようにテーブル名の単数形である「category」、「recipe」でそれぞれモデルを作成する。「GO」ボタンをクリックするだけだ。
まったくもって何を言っているのかわからない。
そして図11なる画面をどこで呼び出すのかもわからない。
「みちこさん?パソコンを立ち上げるっていうのは縦に置けばいいのかいのぉ・・・?」
つまりはそういう感じだ。
うりうり探してたら、初期表示画面の画面下部のタグにGenerators画面があった。
scaffoldって絞首とか処刑とかそういう意味じゃなかったっけ?
で、なんなんだ!?
なんだかよくわからないまま連載終了。・・・くっ。
Aptana Eclipseプラグインで始めるRuby on Rails
http://blog.codezine.jp/editor/2007/06/aptana_eclipseruby_on_rails_1.php
前にも見たことがあるこれにもどってきた。
現段階の環境構成でAptana IDE経由でRubyのHello Worldを試す。さくさく。
おー。
この一連のコラムが、いままでの中で一番わかりやすかった。(目次はわかり難い)
http://blog.codezine.jp/editor/2007/08/ruby_on_railsscaffold_1.php
Aptana IDEのブラウザ内臓ってどこから呼び出すんだろ?
→下部WindowにあるServerタグのところにアイコンでLunchBrowserというのがあった。
設定ついでにワークスペースにエンコードの設定の欄を発見。utf-8に変換した。
(エンコードの状態をステータスバーなどに表示させておく方法はないのだろうか?探したが見つけられなかった。)
Generatorsタグが消えてしまった。
→パースペクティブがRubyになってた。これをRuby on Railsに。
Rake tasksを実行したりするとGeneratorsのプルダウンが出なくなる。なんでだろう?
なんとかならないものか。
http://blog.codezine.jp/editor/2007/06/ruby_on_rails_migration1.php
RailsではmodelファイルはDBのテーブルと対になります。
いわゆるO/Rマッピングというやつです。
へーーー!!そういう意味だったのか。
IDE系統でメモリ食ってるのかな?落とすと300MB近くあく…。
1Gまでもっていかれちゃうと終了もままならなくなるので注意が必要そう。
Hello worldレベルでこんなんなってちゃ世話ない。
複数を組込むにはどうしたらいいのだろうか。
さすがにheader/detailでDB参照したい。
追記:なんか少し調べたけどもしかしてRuby on RailsってO/Rマッピングオンリー…?
そんなまさか…。いや、いくらなんでも…。
http://www.web-career.com/seminar/ruby_on_rails.html
作る内容をもっとシンプルなアイディア勝負なヤツに変えようとおもう。
オレとほとんど同じ境遇でワロタww
金融系のシステム会社入ってエクセルマクロで作業効率図って、先輩、上司に仕事と認めてもらえないあたりまで全く一緒。www
いや、安定するってのはわかるんだが、javascript、java、C#なんかで簡単にできることがなにもできない。
ソートするだけですらcobolのプログラム内部ではやらなくて(できないわけじゃないが)、一度ファイルを作ってjclからソート。
いまだに漢字とか使いにくいし。(まぁ、日本語cobolなんてのも世の中にはあるわけだが、あれもゴミだね。
ちなみに、cobolでもコメントになら全角文字打てるはずだぞ。
0x0A42 ?? 0x0A41 とかの漢字シフトコードいれるんだよ。
>俺は80文字×32行の緑文字を見つめながら、遠い夢を見続ける。
getter/setterを関数で書くと、後ろに()を付けないといけないから格好悪い!!
って人にオススメ?
template<typename T>struct _property{
virtual operator T() = 0;
typedef T _t;
};
class asdf{
int foo;
public:
struct __foo : _property<int>{
asdf &parent;
operator _t(){
printf("親クラス(?)のメンバへのアクセスが面倒...");
return parent.foo;
}
__foo(asdf &p) : parent(p){}
}y;
struct : _property<char*>{
operator _t(){
printf("ここに副作用付き処理を書ける!?\n");
printf("この関数が参照を返せばgetもどきも実装できる!?\n");
return "ふひひひ!やったね!!";
}
}x;
asdf(int v) : y(*this){ foo = v * v - v - v; }
};
void p(char*s){ printf("\n増田はこちらを振り返ると、\n悲しそうな顔をしてこう言った\n「%s」\n", s); }
int main(){
asdf a(127);
//生でprintfに渡すと型推論が行われない
//それ以外の関数だったら問題ないかも
p(a.x);
printf("\n");
//どうしてもと言うならキャストすべし
printf("\n%d\n", (int)a.y);
return 0;
}
VC8で動作確認してるよ!
はっきり言って普通にgetter/setter書くよりも手間多いね!
とりあえず俺のおすすめを書いておくよ。
まあでも結局、「プログラミングがしたいからプログラムを覚えよう」っていうのは身につかないんだ。
「PCにこれこれをさせたい!」と強烈に思って、なんとしてもやりきらなきゃいけない状況に追い込まれれば簡単に習得できるよ。「ゲームが作りたい!」「エロ画像自動で集めたい!」「卒論のデータをどうにかして分析しないといけない!」でもなんでも良いんだけど。
EXCELでテキストファイルから物凄い大量の入力をしてグラフを大量に印刷しなきゃいけないとかいう羽目になってVBAの達人になっちゃうとか、そんな感じ。
http://www.geekpage.jp/blog/?id=2006/12/13
プログラミング言語ヒエラルキーにおいて、上位が下位に対してどう見下してるのかを書いてみた。詳しくない言語も無理して調べながら書いてある。あと、他言語に理解の無い人みたいで生々しいかと思って、刺激的かつあまり真っ当でない内容ばっかにしてみたよ!((FORTRAN から Java に「GO TO も実装されてないんですか?」とかそういう、馬鹿にすることを目的とした偏狭で的外れな発言ってことだよ!))((ここにある中では、C# に多重継承が無いことを馬鹿にする C++ プログラマーが真っ当でない指摘のわかりやすい例かな))
みんなが普段どういう不当な見下しをしてるかも教えてね!
「C++ の難解な仕様と戦うぐらいなら C で関数ポインタを使ったオブジェクト指向の方がスマートだね」
「STL は糞」
「多重継承したくなったらどうするの?」
「CPAN 見たって C でコア部分を書いてるライブラリばっかじゃん」
「なんでわざわざ use strict なんて書かなきゃいけないの」
「Python って明示的に object を継承した場合としなかった場合で挙動が違うって本当なの?」
「ライブラリ環境が全然整備されてなくて最悪じゃん。C や C++ で書かれたライブラリをラップしてるだけのはずなのに機能が減りまくってるのも多いし」
「簡単な処理をコピペで実装してるだけだね」
「As とか書いてて混乱しない?」
「C# があるのにまだ使ってるんだ」
「冗長でわかりやすいですね(笑)」
「DIVISION の概念って本気で言ってるんですか?」
「記述がわかりづらいね」
「ペンタゴンで使われてるだけじゃん」
「ガベージコレクタが無い……?」(あるらしいです><)
「昔 Apple で使われてただけじゃん」
「Del…phi…?」
「コンパイルも実行も遅いらしいけど何に使うんですか?」
「処理も記述できないのに何言ってるの」
なにをいってやがるんだか。まあお説はもっともなんだけど。比べるもんじゃないでしょ。両方覚えて、適所で使え。
(書いてるうちに他人とかぶった…)