「ASP.NET」を含む日記 RSS

はてなキーワード: ASP.NETとは

2017-09-19

どなたか教えてください。ASP.NET みたいなツール探してます

データベーステーブルカラム情報から自動的

クラス作成してくれるツールってありませんか?

ASP.NETがあるんですけど、

なんか最近話題にもなってないし、これから使ってもよいかからないので

このまま消えてくなら別のホットツール使いたいんです。


最近トレンドでは何を使うのがいいんでしょう?

っていうかこういうツールって何て名前なんでしょう?

上手くぐぐれなくて困ってます

2016-09-17

俺CSharpマン

低能ゆえにMVCが使いこなせず挫折ぎみ。

Asp.Netもっとシンプルで綺麗なHTMLを出力してくれればそれでいいんだけどなー。

2016-08-04

[] [ASP.NET] Microsoft.Web.Infrastructure が見つからない場合

ファイルまたはアセンブリ 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。 」

http://stackoverflow.com/questions/4742894/mvc3-deployment-dependency-problems

IIS を実行させているサーバの GAC に Microsoft.Web.Infrastructure.dllアセンブリキャッシュ存在しないようです。

プロジェクト参照設定にある Microsoft.Web.Infrastructure のプロパティを開いて「ローカルコピー」を True に設定して、発行(デプロイしましょう。

(C#でもVB.NETでもほかでも同じ...)

2015-08-09

amazon ASIN 抽出 Webサービス

高卒無職ハゲデブサイクオタキモヒキコモ中年男(45)なんだが

ASIN集めるの流行ってそうだったので Webサービス作ってみたって増田ったんけど

反応まったく無くて途方にくれる。

http://amazonasinsample.azurewebsites.net/

検索ワードからASINリスト商品リスト出す機能なんだけど、

だれかオレをなじって欲しい

友達0なんで誰かアドバイスくだちい

ところで私、C#,ASP.NET,MSSQL,HTML,CSSで開発できるようになりました。

誰か年収300万ぐらいでやとってもらえないだろうか

2015-08-03

asp.netmvcテンプレートがわけわからんのよ

ちょっと色々あってVS2013Com起動してさ。

そーいやmvcなるもんあったな、と。

んで空のプロジェクトじゃなくてインターネットApプロジェクト選択してみたわけ。

そしたらゾロゾロファイルが出来上がるわ。F5ですぐそれっぽいのが立ち上がるわ。

凄いけど......何が何だか

とりあえずモデルとビューとコントロールフォルダに色々突っ込めば良いんだろうけどさ、

【既にあるファイルは何をしている?何のためにある?】ってことを察することが出来ない。

まさかとは思うが、ソース全行追いかけろ?おいおい。

こりゃ空のプロジェクトで一から作るしかないな。

......こうやって予めセットでまとめられているテンプレートを以って、作られたサービスシステムってあるのかね。

2015-04-12

5年ぐらいC#使ってたけど、仕事で突然Javaを使うことになった

一か月ぐらいJavaと格闘してしまった。

MSSQLだったのがMySQLになって新たにTomcatMyBatisSpringを使うようになった

Frameworkがガラッと変わってとても使いづらかった。ASP.NET使ったら簡単にできるようなことを

上手く動かなくて面倒くさかった。こんな使いづらい言語だれが使うんだ!?とか普通に思っていた。

Java自体というより実質標準になっているFrameworkが面倒くさい

設定ファイルが多すぎ。意味不明過ぎ。あとエラーログが正確じゃなくてがわけわからん

正式ドキュメントが充実してない。一般のブログに頼る必要がある。

Eclipseも使い始めたけど、DBViewer使いづらい。やっぱMicrosoftと比べるとヒドイね。

DBViewerのスクリプト書くところで選択した領域だけ実行したいんだけど、どうやんだ、これ。

Eclipseも使いづれー

でも人口多いんだよなーJava。なんで使ってんだろ。みんな。Microsoftに比べて安いからか?

品質と使い勝手を天秤にかけてもJavaを使いたくなるようなものか?

まぁ、一回Frameworkの仕組みを覚えたら案外使いやすいかも、とも思う。

あと、Update期間めちゃくちゃ長いですね。Java6,7,8って10年ぐらいかかってんじゃないですか。

何が良くて使ってんだろみんな。

2015-03-11

ASP.NET 4.0 4.5 4.5.1 4.5.2 MVC で 404 になったら...

MVCアプリなどを .NET Framework 4系列で開発したら、該当するアプリケーションプールの設定をv4.0に設定しなくちゃだね、IIS 管理ツールで。

2015-01-17

増田です。



と思ったのですが、

言われてみるとプログラミングスキルって定義するのが難しい時代になりましたね。

基本的ポインタ使って画像処理ができるとか、ASP.NETフレームワーク自在に使えるとか

全然別のことですもんね。

ここでは単純にRedCoderになりたい、だけです。

社会人になってから目指す人の話もあまりいたことがないし、

そもそも才能がないと絶望的に難しい、とも聞いたこともあります


目指してる人とか目指したことあるから何か聞ければ良いかなーぐらいで書きました。


http://anond.hatelabo.jp/20150117134703

[]1月16日

○朝食:ころうどん(天かす、卵)

○昼食:なし

○夕食:なし

調子

就職活動の結果、1月26日ぐらいから3月末まで個人契約で、開発の仕事してみない? と提案された。

以前話しに上がった、運用保守仕事よりも緊急の案件らしく、対応にすぐ人がいるらしい。

正直、個人契約ってのが何なのかとかよくわかってないのだけれど、まあとって食われるわけもないな、と思い許諾した。

ASP.NETお仕事らしく、経験ないので下調べをしていた。

.Netは働いていた頃はずーっとやっていたので、それの応用で何とかなりそうと目星をつけた。

HTML/CSSが絡むと途端に知識がないので、不安だが)

こうやって、世話を焼いてくれている人は、僕が始めて就職した会社の偉い人で、

色々あって今もこうして面倒をみてくれている。

とても優しい人なので、その人への恩をちゃんと返すためにも頑張りたい。

とまあ、気負っても出来る事は出来るし、出来ないことは出来ないので、気楽に朗らかにやっていきたい。

Forza Horizon2

今日も地道にチャンピオンシップをこなす。

ゲームにも慣れてきて、今が一番楽しい時期な気がする。

お仕事が始まる前に、クリアしたいかなー。

2014-12-31

[]12月30日

○朝食:うどん(天かす、梅干しねぎショウガ

○昼食:なし

○夕食:祖母宅でお正月料理を山ほど

調子

普通

昨日書いた、睡眠障害ちっくな状況は変わらず。

ただ、体は疲れているのか、ゲームしながら待ち時間寝落ちしてしまった。

その時はぐっすり寝れたので、そんなに気にする事じゃないと思う。(というか、思おう)

その後、祖母宅でお正月料理を山ほど食べてきた。

そしてお土産も山ほどもらってしまった。

非常にありがたい。

そして、ちょっと思う所があり、Windowsセットアップをしていた。

予備PCMBAWIn7インストールした。

これを何に使うかというと、ちょっとプログラム勉強でもしようかと思っています

今年の夏頃まではプログラミングをしていたのだけれど、ちょっと僕の体調不良でお流れにしてしまいました。

が、プログラマとして再就職すると決めたので、もう一度勉強をしておかないと、と思った次第です。

まあ、どんな勉強をするのか? とかはまだ全然決めてないので、ゆっくり考えようと思う。

Web系は仕事ありそうだからWeb勉強しようかなあ、コンパイルしない言語をあまり触ってこなかったので、

JavaScriptとかがいいかなあ。

WebFlashとかJavaなんちゃらしか知らないから、基礎の基礎としてHTMLとかCSS

うーむ、悩ましいな。

一応、マイクロソフト信者って側面もあるからASP.NETとか?

あくま職業プログラマとしての勉強から仕事のあるなしで考えるのが無難かなあ。

仕事のあるなしとかガン無視していいなら、XNA同人ゲーム作るとかやってみたいなあ。

あっ同人ゲームかあ、作れたら楽しいだろうなあ。

ゲーム作るならどんなゲーム面白いかなあ。

せっかく、はてな村界隈で活動してるんだからはてなの何かを利用したゲームとかが面白い

増田文章ランダムで出てきて、それがモンスターに変身して戦う的なー?

って、まあそういうのも勉強にはなるだろうけど、就職に役立つか? って言われると微妙な気もするなあ。

うーん、今日のうちには決まらんなあ、のんびり考えよーっと。

○Halo5マルチプレイβ

楽しい

ドンとか壁ドンとかは、格好いいけど使うタイミングがよくわかんない!

けど勝てない!

勝てないどころか、普通に迷惑レベルで僕が弱すぎる。

3キル15デスとかが普通なので、ちょっとこれは迷惑すぎるなあ。

はいえ、やってて楽しいのは間違いない。

バトルライフルが好きな武器だなあ、体をパンパンと狙ってからのヘッドショットで一撃、って流れがたまらない。

(3回に1回ぐらいしかできないけど)

2014-11-29

Web開発者になりたい

増田のみんな、教えてくれ。

大卒ヒッキーニート

Wikiエンジンの開発(Windows Server、MSSQL)とWebデザインASP.NET,HTML,CSS)ができるようになった。

年収300万くらいの仕事もらえるかな?

Git辺りに公開すれば就職できるかな

2014-04-03

社会的技術負債をなくすには

社会的技術負債をなくすには

動的言語は使わない。

動的本をすべて捨てる(人の手に渡るような捨て方はしない ちり紙交換がよい)

動的DBは使わない。リレーションのない動的DBは使わない(mongoDBNoSQL系)

動的オープンを紹介してくるメデイアのステマ気づき騙されない

動的オープン無料育成研修セミナーには行かない

Silerが勧めてくる技術独立できない技術からやらない 関わらない

職務経歴書黒歴史(PHP Java JavaScript Ruby RoR Html5)を書かない

マニアックオープンソースは拾ってこない 広めない

Jser Phper Rubistにならない 奢らない

PHP Java JavaScript Ruby RoR Html5仕事は請け負わない

技術負債をなくすには

C# Objctive-cだけ使う

VisualStudio Xcodeだけ使う

VisualStudio Xcode機能をフル活用する

WindowsServerを使う

一定シェアを獲得したDBを使う

デザパタを覚える

コミュニケーションOffice 365 redMine,イラレGit Svnを使う

動的言語をこれ以上広げるな 罪を重ねるな 脆弱性をばら撒くな トラブルを撒くな

セキュリティに問題のある動的言語はどこにいってもトラブルになる

原発システムRuby,RoR,PHP,JavaScriptを使いたいと思うか?Silerはなら提案してくるだろう儲かるから

使えば必ず原発はハックされる

C# ASP.net2007年から海外では大流行だった 一方日本メディアは盛んにLAMP!LAMP!RoR!RoR!煽っていた

C#(静的言語)は14年前のソースが今でも使うことができる。VisualStudioにはソース自動バージョンアップ機能があり書き換えてくれる。 コード負債にならない コンパイルバグがわかる DLLバージョンをチェックしてくれる ブレイクポイント リモートデバッグ

動的言語オープン系は 手作業で直す どこにバグあるか実行しないとわからない 脆弱性が出るたび バージョンアップ機能追加のたびに修正することになる リファクタが使えない 負債言語

>14年前のソースが今でも使うことができる

この数字を見て動的言語関係者はびっくりしているだろう。 14年前のPHPソース 使えると思うか?関係者は首を横に振るだろう。時間と人手をかけて改修すれば使えるかもしれない(多くの場合作り直したほうが安上がりという結論になると思うが) 脆弱性仕様変更がたくさん埋まっているソースだ 修正には手間と時間予算がかかる

C#なら一瞬で最新の.netフレームワークバージョンに書き換えてくれる。エラーや警告の表示も一緒に出力されるから手直しが簡単

PHPを捨てたほういい理由

http://apps.wiki.fc2.com/wiki/PHP%E3%82%92%E6%8D%A8%E3%81%A6%E3%81%9F%E3%81%BB%E3%81%86%E3%81%84%E3%81%84%E7%90%86%E7%94%B1

今はRoRステマが醜くそれに騙されて使ってしまった人がいるが、今後、仕様変更バグ脆弱性は出続け、そのたびに全ソース検索し手動で手直しをしなければならなくなる それは新しいことをやっている時に起こるだろうし、今やっている新しいことが負債に変わる。作れば作るほど負債が増え、前に進むことができなくなる言語 それが動的言語 メンテナンスが常に必要でほっとけばハックされる。保守や改修に人が多く必要中間業者は儲かるのでメディア無料育成を通して広めてくる 煽っておいて自己責任の国 日本

静的言語サーバーサイドで何がいいかというと 自分は C# Asp.net(asmx or webApi) Ado.net 接続 & 非接続のDataSet 管理.exeアプリ(C# WinForms)をお勧めする やり方

もうお分かりいただけただろうか?動的言語とはSilerが定期的に仕事を得るために広めたガラクタ言語だったということを この言語いつまでも高い稼働の保守作業が必要だ。機能追加、言語仕様変更脆弱性修正するのにお金時間もかかる Silerはパンク屋だったのだ。 メーカー製の静的言語を使えばここまで時間も手間もかからなかった。

これ以上元請けはSilerが言われるがままにガラクタ言語を導入しないほうがいいだろう。技術者はSilerが無料教育してくれるからといってガラクタ言語を学ぶのはやめたほうがいい。(洗脳されて信者になるな) 特に技術者はこの言語マスターたからといって独立はできない。なぜなら、5人以上のプログラマーが働いてやっと出来上がるものほとんどだ。手間がかかるということは自分が一番よくわかっているはずだ。言語とともに使い捨てられる運命にあるのだ。IT経営者やSilerはその方が都合がいい。こき使ってやめられても独立できないのだから。雇ってはこき使って使い捨てる。まさにIT版のねずみ講  上のしか儲からないようになっている。 それに加えて酷いピンハネ。100万で売って7割以上搾取 一人送れば70万円入る世界だ。Silerにとって開発現場炎上すればするだけよい。言語脆弱性があればあるほどいい、システムが手間が掛かるなら掛かるほどいい その分人を送り込めるからだ。その辺にいる素人適当教育して3年開発の下駄はかせて送り、現場炎上させて新たに人を送り込んで利益を得ている。

メモ

#1 PHPで改修しようにも簡単には改修できなくて、その間にハックされ情報流出すること結構あるようだ @WikiPHP

#2 2013年 Javaフレームワーク Strutsサポートが終了した こういうフレームワークをメデイアで煽っておいて最後自己責任される。オープン言語はやってはいけない

#3 これはどの業界にも言える事だが、気合い、根性気合馬鹿から組織を乗っ取られないようにするにはどうすればいいか考えないといけない。コミュニケーション社員を懐柔し組織を乗っ取った筋肉馬鹿は面倒なことを気合根性で乗り切ろうするから失敗する。日本はそのしわ寄せがまず下くるから会社が壊れる。脳筋バカは最後まで居残る。(○ーイズ、○ルマー、○ニー、旧日本軍ジオン軍タバコ室や残業特定社員を仲良くさせるからだめなんだろう 履歴書の項目が少ないのも問題なんだろう 理系体育会系,血液型,さう脳とか履歴書は書く項目が少なすぎる

#5 仕事の最終目的コミュニケーションではない コミュニケーションするコストが高いといつのまにかそれが目的に置き換わってしまう事がある。コミュニケーションの得意な奴が本当に優秀な人をさしおえて前にでてくることだってある。Office 365RedMineイラレSVNなどでコミュニケーションコストを下げることで優秀な人が大声を張り上げなくても力を発揮できる環境を作るべきだ

#6 事務仕事のツール化、自動化、ロボット化、コミュニケーションコストを低くするツールの導入で、声が大きい人や事務だけ得意な人が権力を握ることを防ぐ事が出来る

#9思えばSiler業界自分たちが儲かりがたいためにガラクタ言語(Java,PHP,RoR,Ruby,Js,Html5,Flash)に人材を誘導しすぎた。出来損ない言語の非効率生産性保守作業は社会進化が遅れ世界とのソフト技術に差がついてしまった。人材も非効率的スキルしか身に付かなかった。それしかやらせてもらえなかった。

しょーもない言語社会の発展を止め、技術者を路頭に迷せた。有益言語を一つだけ覚えさせ、いろんな業界で使い回した方が業界的にも技術者的にも幸せになれたのではないか?

C#ロボット組み込み機器,医療機器,WEB,スマートフォン,ゲーム,CG デスクトップアプリ,業務用ツール 様々なところで使う事ができるのだ。

特にロボットはMocrosoft Robotics StudioというVisualStudioロボット版の開発環境2006年から出ており、ロボット産業を発展させることだってできたのだ。(そのころのIT業界JavaLampが主)

続き

http://apps.wiki.fc2.com/

2014-03-14

社会的技術負債をなくすには

技術負債をなくすには

C# Objctive-cだけ使う

VisualStudio Xcodeだけ使う

VisualStudio Xcode機能をフル活用する

WindowsServerを使う

一定シェアを獲得したDBを使う

デザパタを覚える

コミュニケーションredMine,イラレGit Svnを使う

社会的技術負債をなくすには

動的言語は使わない。

動的本をすべて捨てる(人の手に渡るような捨て方はしない ちり紙交換がよい)

動的DBは使わない。リレーションのない動的DBは使わない(mongoDBNoSQL系)

動的オープンを紹介してくるメデイアのステマ気づき騙されない

動的オープン無料育成研修セミナーには行かない

Silerが勧めてくる技術独立できない技術からやらない 関わらない

職務経歴書黒歴史(PHP Java JavaScript Ruby RoR Html5)を書かない

マニアックオープンソースは拾ってこない 広めない

Jser Phper Rubistにならない 奢らない

PHP Java JavaScript Ruby RoR Html5仕事は請け負わない

動的言語をこれ以上広げるな 罪を重ねるな 脆弱性をばら撒くな トラブルを撒くな

セキュリティに問題のある動的言語はどこにいってもトラブルになる

原発システムRuby,PHP,JavaScriptを使いたいと思うか?Silerはなら提案してくるだろう儲かるから

使えば必ず原発はハックされる

C# ASP.net2007年から海外では大流行だった 一方日本メディアは盛んにLAMP!LAMP!RoR!RoR!煽っていた

C#(静的言語)は14年前のソースが今でも使うことができる。VisualStudioにはソース自動バージョンアップ機能があり書き換えてくれる。 コード負債にならない コンパイルバグがわかる DLLバージョンをチェックしてくれる ブレイクポイント リモートデバッグ

動的言語オープン系は 手作業で直す どこにバグあるか実行しないとわからない 脆弱性が出るたび バージョンアップ機能追加のたびに修正することになる リファクタが使えない 負債言語

>14年前のソースが今でも使うことができる

この数字を見て動的言語関係者はびっくりしているだろう。 14年前のPHPソース 使えると思うか?関係者は首を横に振るだろう。時間と人手をかけて改修すれば使えるかもしれない(多くの場合作り直したほうが安上がりという結論になると思うが) 脆弱性仕様変更がたくさん埋まっているソースだ 修正には手間と時間予算がかかる

C#なら一瞬で最新の.netフレームワークバージョンに書き換えてくれる。エラーや警告の表示も一緒に出力されるから手直しが簡単

&blanklink(PHPを捨てたほういい理由){http://www.slideshare.net/neuecc/c-22979400?v=qf2&b=&from_search=42}

今はRoRステマが醜くそれに騙されて使ってしまった人がいるが、今後、仕様変更バグ脆弱性は出続け、そのたびに全ソース検索し手動で手直しをしなければならなくなる それは新しいことをやっている時に起こるだろうし、今やっている新しいことが負債に変わる。作れば作るほど負債が増え、前に進むことができなくなる言語 それが動的言語 メンテナンスが常に必要でほっとけばハックされる。保守や改修に人が多く必要中間業者は儲かるのでメディア無料育成を通して広めてくる 煽っておいて自己責任の国 日本

静的言語サーバーサイドで何がいいかというと 自分は C# Asp.net(asmx or webApi) Ado.net 接続 & 非接続のDataSet 管理.exeアプリ(C# WinForms)をお勧めする やり方

もうお分かりいただけただろうか?動的言語とはSilerが定期的に仕事を得るために広めたガラクタ言語だったということを この言語いつまでも高い稼働の保守作業が必要だ。機能追加、言語仕様変更脆弱性修正するのにお金時間もかかる Silerはパンク屋だったのだ。 メーカー製の静的言語を使えばここまで時間も手間もかからなかった。

これ以上元請けはSilerが言われるがままにガラクタ言語を導入しないほうがいいだろう。技術者はSilerが無料教育してくれるからといってガラクタ言語を学ぶのはやめたほうがいい。(洗脳されて信者になるな) 特に技術者はこの言語マスターたからといって独立はできない。なぜなら、5人以上のプログラマーが働いてやっと出来上がるものほとんどだ。手間がかかるということは自分が一番よくわかっているはずだ。言語とともに使い捨てられる運命にあるのだ。IT経営者やSilerはその方が都合がいい。こき使ってやめられても独立できないのだから。雇ってはこき使って使い捨てる。それに加えて酷いピンハネ。100万で売って7割以上搾取 一人送れば70万円入る世界だ。まさにIT版のねずみ講  上のしか儲からないようになっている。Silerにとって開発現場炎上すればするだけよい。言語脆弱性があればあるほどいい、システムが手間が掛かるなら掛かるほどいい その分人を送り込めるからだ。その辺にいる素人適当教育して3年開発の下駄はかせて送り、現場炎上させて新たに人を送り込んで利益を得ている。

メモ

#1 PHPで改修しようにも簡単には改修できなくて、その間にハックされ情報流出すること結構あるようだ @WikiPHP

#2 2013年 Javaフレームワーク Strutsサポートが終了した こういうフレームワークをメデイアで煽っておいて最後自己責任される。オープン言語はやってはいけない

#3 これはどの業界にも言える事だが、気合い、根性気合馬鹿から組織を乗っ取られないようにするにはどうすればいいか考えないといけない。コミュニケーション社員を懐柔し組織を乗っ取った筋肉馬鹿は面倒なことを気合根性で乗り切ろうするから失敗する。日本はそのしわ寄せがまず下くるから会社が壊れる。脳筋バカは最後まで居残る。(○ーイズ、○ルマー、○ニー、旧日本軍タバコ室や残業特定社員を仲良くさせるからだめなんだろう 履歴書の項目が少ないのも問題なんだろう 理系体育会系,血液型,さう脳とか履歴書は書く項目が少なすぎる

#5 仕事の最終目的コミュニケーションではない コミュニケーションするコストが高いといつのまにかそれが目的に置き換わってしまう事がある。コミュニケーションの得意な奴が本当に優秀な人をさしおえて前にでてくることだってある。 RedMineイラレSVNなどでコミュニケーションコストを下げることで優秀な人が大声を張り上げなくても力を発揮できる環境を作るべきだ

#6 事務仕事のツール化、自動化、ロボット化、コミュニケーションコストを低くするツールの導入で、声が大きい人や事務だけ得意な人が権力を握ることを防ぐ事が出来る

#7思えばSiler業界自分たちが儲かりがたいためにガラクタ言語(Java,PHP,RoR,Ruby,Js,Html5,Flash)に人材を誘導しすぎた。出来損ない言語の非効率生産性保守作業をしている間に社会進化が遅れ世界とのソフト技術に差がついてしまった。人材も非効率的スキルしか身に付かなかったしそれしかやらせてもらえなかった。

しょーもない言語技術者に学ばせて社会の発展を止め、技術者を路頭に迷よわすよりも、有益言語を一つだけ覚えさせ、いろんな業界で使い回した方が業界的にも技術者的にも幸せになれたはずだ

C#ロボット組み込み機器,医療機器,WEB,スマートフォン,ゲーム,CG デスクトップアプリ,業務用ツール 様々なところで使う事ができるのだ。

特にロボットはMocrosoft Robotics StudioというVisualStudioロボット版の開発環境2006年から出ており、ロボット産業を発展させることだってできたのだ。(そのころのIT業界JavaLampが主)

Amazon倉庫ロボット自動システム

http://gigazine.net/news/20121231-kiva-system/

それを開発している会社採用情報 採用言語C++ C# Java

http://www.kivasystems.com/careers-at-kiva/

PHP RoR JS Rubyなんてどこにも書いていない 数年もすれば仕様が変りバグ脆弱性を出す危ない言語だとわかっているのだろう こんな危ない言語は使ってはいけない

Mocrosoft Robotics Studio

http://www.saturn.dti.ne.jp/npaka/robotics/index.html

https://www.microsoft.com/en-us/download/details.aspx?id=29081

続きはWEB

http://goo.gl/2nwGh

2013-05-14

プログラミング大好き男に「どの言語が好き?」と訊ねられたとき、女はどう答えたらいいの?

あ、まず前提として、

貴女プログラミング大好き男を夢中にさせることが、

はたして貴女幸福にするかどうか、それはまた別問題だけれど。

はいえ、プログラミング大好き男たちは玉石混交ながら、

IT系の超かしこい男なども多く、

多くっつーかIT系でないのにプログラミング大好き男っていうのは超かしこ学生まぁこれは有望株)か研究者系なんか、

あとはまったくかしこくもないクセに頭いいつもりして「Lispやってます(キリッ ハローワールドくらいですが」とか言っちゃうアホしかいないわけで、

したがって、釣り師たる女たちにとっては、

なかなかあなどれない釣り場です。

では、プログラミング大好き男に「どの言語が好き?」と訊ねられたとき

貴女は、どう答えれば理想的でしょう?

まず最初に、その男COBOLのようなタイプレガシーコード

あとはC/C++、そして(TechEdに参加するほどではないけれど)VisualBasicが大好きな、

そんなタイプ場合は、

貴女はかれの目を見て、微笑みとともに質問など無視して、こう言いましょう、

「わたしが、仕様書を作ってあげる♪」

これこそまさに必殺の答えです。

そこでプログラミング大好き男が、えへへ、とやにさがったならば、

貴女は、ひそかに、「コピペ量産しやすい技術的ポイントを抑えた仕様書」あたりを

ひそかに練習しておきましょう。これで成功まちがいなしです。

しかし、ここでは、もう少しハイブロウな(?)いわゆるプログラミング好きの男の

落とし方をお伝えしましょう。

この場合貴女は、こう答えましょう、

「わたしは、JVM上のScalaが好き。

型推論もあるしラムダ式クロージャスクリプト言語みたいに書けるの、豊富組み込みのコレクションメソッドはいつも便利だし、

XMLリテラルCaseクラスによるパターンマッチもTraitベースMixi-inも、大好き♪」

もしも貴女がそう答えたならば、

その瞬間、プログラミング大好き男の目はきらりと輝き、

かれの貴女への恋心は、

20%増量になるでしょう。

なぜって、Scalaは、

ちょっぴりお洒落Ruby風味に記述できて、

Maybeモナド差し込んで、

コンパイルは遅いながらも、そこがまた

ちょっぴりメモリを多く積めばいい富豪プログラミングみたいなふんいきをかもしだしていて。

しか関数型言語としての不変変数・不変Listを実装して

質高くふるまっていて、なおかつ、

JVM上で動くくせにJavaが「やるやる」と言ったまま実装してなかったラムダ式と仮想拡張メソッド型推論を実装した功績もあって。

したがってScalaこそは、

本来なんの接点もないまったく縁もゆかりもない別々の世界に生きている、

インタプリタ言語大好きな綺麗系OLと、玉もあれば石も混じっている、そんなプログラミング大好き男たちが、

この世界で唯一(いいえ、JVM系列のJRubyClojure と並んで唯三)遭遇しうる場所です。


では、参考までに、危険な回答を挙げておきましょう。

プログラミング大好き男に「どの言語が好き?」と訊ねられたとき

貴女がこう答えたとしましょう、

MicrosoftVisual Basic for Applicationが好き♪ 週3回は Excelコーディングするの。」

その瞬間、プログラミング大好き男の貴女への恋心は消えます、

なるほどMicrosoftは、世界最大のOS供給メーカー

特にOfficeは平凡ながら、ま、無難にまとめてあるものの、

しかし、「新UIのリボンUI!」「メトロUI対応!」とかなんとか無意味な自慢を吹聴し、

VBAはさらプログラミングについての謬見を撒き散らした罪がありますからプログラミング大好き男にとっては天敵なんです。

ティーガー戦車乗りのオットー・カリウスは「ティーガー乗りなら誰でも片側の履帯がはずれ僚車に牽引されて帰ってきた経験を持つはずだ」 って言ったけど

社内SESIerなら誰でもクソみたいな前任者が書いたクソみたいなExcel-VBAコードを直した経験があるはずなんです。

また、もしも貴女が「PHPが大好き♪ あたしが書いたPHPのWebサイトが、さくらサーバに7件あるよ♪」

と答えたとしても、同様の効果をもたらすでしょう、

なぜって、PHPは、1990年代にはWeb系を目指す人にとっては簡単で要件を満たすWebサイトが簡単に作れる輝きの道だったものの、

しかし2000年代うそうからセキュリティ関係の問題で転落し、

いまや、あの貧弱な言語能力では、Rubyの魅力に遥かに及びません。

(注1)

またもしもたとえあなたプログラミング言語が大好きで、

「わたし、.NET FrameworkのC#が好き、フォームアプリでも書くけど、

最高に好きなのはASP.net♪ SQLServer連携も、ajax control toolkitもすっごくおいしいの。」

と、答えたとしたらどうでしょう

なるほど、貴女の趣味は高く、

しか.NET Frameworkは、C# が cool であるのみならず、

.NET Framework上で動く F# や IronPythonIronRubyマネーJScriptも最高においしいんですけれど、

しかし、貴女の答えを聞いて、プログラミング大好き男はきっとおもうでしょう、

(なんだよ、MS信者な女だな、カネかかりそう)って。

(注2)

貴女が、プログラミングが大好きで、言語の名を挙げるにしても、

たとえば、JavaScript(node.js)ならば安心でしょう、

なぜならば、JavaScriptは、かけだしのプログラミング初心者にもマニアにもともに愛されるめずらしい言語で、

貴女がその名前を挙げても必ずしも、(jQueryがやっとの初心者と思われることはあっても)あなたプログラミング言語おた宣言をしているとは受け取られないでしょう。

しろへぇ。ちゃんとprototypeは使ってる?」と聞かれたら「当たり前じゃない。むしろnode.jsでいいMVCフレームワークが分からないんだけど…」と話を振ってみましょう。

男は嬉々として、30個くらいのnode.jsフレームワークを教えてくれることでしょう。(まぁどれもどれで帯に短し襷に長しなんですが)

あるいはRighno上で動かしたコードをnodeへ移植する話とか、CoffeeScript、甚だしきはClojureScriptを振ってみてもいいかもしれません。

しかし、たとえば、世界が(つーか竹内先生ポール・グレアムが)誇る超絶関数型言語の名作、Common Lispにせよ、

selfと書きまくることと海外で使われてることに定評のあるPythonにせよ、

バージョンアップごとに言語仕様が変わり、かなり素敵なものではあるもののobsolatedな罠にはまりやすRubyにせよ、

まったく読めない$_だらけで頭悪い仕様リセットしてPerl6にする(そしてまた全く読めない)Perlにせよ、

気さくなクジラ飛行机さんがふるまう素敵においしい日本語プログラミング言語ひまわりなでしこにせよ、

基地外トリッキー言語の代表BrainFxck・Glass・Missa・WhiteSpaceにせよ、

そういう言語名前をいきなり挙げるのは、ちょっぴり微妙。

ましてや貴女が、「Haskellが大好き♪ わたし、プロジェクトオイラーの問題もうほとんどHaskellで、解いちゃった♪」

と答えたならば、どうでしょう

これはかなり博打な答え方で、

なるほど、Haskellは、純粋関数型でありつつも副作用のある操作が行える超絶名言語ゆえ、

あなたがそう答えた瞬間、プログラミング大好き男がいきなり超笑顔になって、

へぇ、やっぱりHaskellなら大抵の問題は4行以内くらいで解いちゃった?」とか言いながら

鼻の下がだら~んと伸びちゃう可能性もあるにはありますが、

しかし、逆に、(なんだよ、この女、プログラミングおたくかよ)とおもわれて、どん引きされる可能性もまた大です、

なぜって、必ずしもプログラミング大好き男がプログラミング大好き女を好きになるとは、限らないですから

しかも、この答えには、もうひとつ問題があって、

男たちは、女を導き高みへ引き上げてあげることが大好きゆえ、

もしも貴女が、「Haskellが大好き♪」なんて言ってしまうと、

そこにはもはや、男が貴女圏論モナド教育する余地がまったく残されていません、

したがって貴女のその答えは、

プログラミング大好き男の貴女への夢を潰してしまうことに他なりません。

ま、ざっとそんな感じです、貴女の目にはプログラマーたちはバカでスケベで鈍感に見えるでしょうが

しかし、ああ見せて、プログラマープログラマーで繊細で、おざなりに扱われると傷つきやすく、ローカル変数名前一つにも気を使い、女と自分の将来に夢を持っています、

貴女の答え方ひとつで、プログラマー貴女への夢は大きくふくらみもすれば、

一瞬で、しぼんでしまいもするでしょう。


では、スキットを繰り返しましょう。

「わたしは、JVM上のScalaが好き。

型推論もあるしラムダ式クロージャスクリプト言語みたいに書けるの、豊富組み込みのコレクションメソッドはいつも便利だし、

XMLリテラルCaseクラスによるパターンマッチもTraitベースMixi-inも、大好き♪」

そして、その瞬間、プログラミング大好き男の目がらんらんと輝いたなら、

貴女はこう重ねましょう、

それからね、いま、わたしが使ってみたいWebアーキテクチャは、

Play Framework、素敵なリアルタイム嗜好のアーキテクチャって噂を聞いたから。

あなたのお暇なときがあったら、わたしをPlayへ連れてって♪」

これでもう完璧です。

PlayFrameworkと、Play(遊ぶ・じゃれる)のダブルミーニングでかれの股間も刺激しちゃえます。

そうなったらこっちのもの

デートの日には、ペアプロ用に Happy Hacking Keyboard をばっちり決めて、かわいい下着をつけて(注3)、

github.comの通販で売ってるoctcatのTシャツか、facebookの「いいね!ボタンがムネのところにあるTシャツ、 あるいは初音ミク(ないし彼のお気に入りアニメキャラ。北米ならMyLittlePonyで鉄板なんだけど)のコスプレを着てゆきましょう。

その日からプログラミング大好き男は貴女の虜になるでしょう。

では、釣り師としての貴女の、愛の幸運幸福をお祈りします!

注1:

(と、書いたもののPHPの現状をよく知りません。グローバル変数だらけになるのとか旧ASPみたいなもんなのかなぁ。count($array); とか書くのアホと思うがpythonも同じだった)

(あと、マジで機能とかTwitter連携とか診断メーカー的なのでもPHPで7つも作ってる女子居たら付き合いたい)

注2:

もっとも。objective-Cなんていう言語をやることに比べれば個人で行う程度なら金のかからない手法もなくはないのですが。

注3:

プログラマーにとっての「かわいい下着」と、女性にとっての「かわいい下着」の定義にずれがあるので注意。

半数くらいのプログラマーしましまぱんつが可愛いと思ってる気がするので、妙齢の女性が着用するには抵抗あると思うが、ボーダー柄のコットンショーツ(ただしキャラ絵のは除く)とか、

過度でないていどにフリルがついたものオススメ。また、色は、レッドだとプログラミング大好き男は引いてしまう(だってそれはコンパイルエラーときの色だ)ので、薄ピンクホワイト、薄ブルー、せめて黒(に差し色でピンクとか)あたりに留めたい。

補記:

 元ネタhttp://tabelog.com/tokyo/A1301/A130101/13002457/dtlrvwlst/3464106/

補記2:

  「プログラマー」か「プログラマ」かの問題については、特に意味は無いが前者を採用した。

補記3:

 言うまでも無いけど、ネタです。 

 また、COBOLとVB、C++ではまったくもって難易度が違うことも分かっています。後者になるほど圧倒的に難しい。

2013-01-26

想像はるかに超える高速性と安定性を持つWindows Server

想像はるかに超える高速性と安定性を持つWindows ServerをメインにWindowsLinuxハイブリッド環境インフラを構築

http://gihyo.jp/admin/serial/01/gloops/0001

たとえばWindows環境メリットの1つに,

IISASP.NET,そしてC#で書かれたアプリケーション

想像はるかに超える高速性を実現していることが挙げられます

そのうえ,安定して動作しているのです。

Javaを中心としたプラットフォームのものと比べると,

もう全然比較にならないぐらい安定していると感じています

【全ての分野においてWindows圧勝

東京証券取引所の基幹システムとして稼動するWindows

ttp://itpro.nikkeibp.co.jp/article/NEWS/20090609/331590/?SS=imgview&FD=-654674548

HPCでもダントツパフォーマンスをたたき出すWindows

ttp://cloud.watch.impress.co.jp/docs/interview/20101224_416025.html

Windows上で稼動するメインフレーム

ttp://wsmgr.jp.brothersoft.com/screenshot-50450.html

NASパフォーマンス比較テストWindowsLinuxを圧倒!!

ttp://www.flexense.com/documents/nas_performance_comparison.pdf

BDレコのOSはやはりWindowsだった!!

ttp://it.slashdot.jp/story/12/04/24/0052242/

【一方Linuxは…】

Linux Daily Topics:2011年9月2日 Kernel.orgがトロイの木馬の侵入被害に|gihyo.jp技術評論社

ttp://gihyo.jp/admin/clip/01/linux_dt/201109/02

Linux カーネルの基盤サイトクラッキングの被害に - japan.internet.com

ttp://japan.internet.com/webtech/20110902/2.html

Linux Daily Topics:2011年9月15日 狙われるLinux… 今度はLinux Foundationが標的に|gihyo.jp技術評論社

ttp://gihyo.jp/admin/clip/01/linux_dt/201109/15

Linux Daily Topics:2011年9月2日 Kernel.orgがトロイの木馬の侵入被害に|gihyo.jp技術評論社

ttp://gihyo.jp/admin/clip/01/linux_dt/201109/02

Linux カーネルの基盤サイトクラッキングの被害に - japan.internet.com

ttp://japan.internet.com/webtech/20110902/2.html

Linux Daily Topics:2011年9月15日 狙われるLinux… 今度はLinux Foundationが標的に|gihyo.jp技術評論社

ttp://gihyo.jp/admin/clip/01/linux_dt/201109/15

MySQL.comのWebサイト不正コード 闇市場root権限も販売か

ttp://www.itmedia.co.jp/news/articles/1109/27/news027.html

またもOSSプロジェクトが被害に! Wineプロジェクト不正侵入を発表 | エンタープライズ | マイコミジャーナル

ttp://journal.mycom.co.jp/news/2011/10/13/115/index.html

全く使用するメリットが見出せないLinux

・安定性・信頼性

 Linux

 フリーソフトであるLinuxの安定性・信頼性はハッキリ言って問題外。

 1日連続で稼動させることすら困難。

 Windows

 いまやWindowsの安定性・信頼性はメインフレーム(汎用機)をも凌ぐ。

 世界中メインフレームが全てWindowsServerに置き換わったのがその証拠。

脆弱性

 Linux()

 Linuxで稼動している世界中サーバークラックされまくっている。

 シェアが全くないLinuxウイルス対策ソフトも皆無。

 Windows

 デフォルトスタンダードOSとしてあらゆる攻撃を受けてきたWindowsはいまや世界で一番強固なOSとなった。

 豊富ウイルス対策ソフトもさりながら、カーネル構造的に絶対に外部からクラックされることが無いOSとなった。

コスト

 Linux

 フリーソフトなのでOS無料

 しかし上記内容により安定稼動させるのはほぼ不可能。

 またサポート存在しないため自前で何とかするしかなくかえってコスト高となる。

 Windows

 OS無料ではないが従来のメインフレームOS比較すると安価

 もともと安定性に優れたOSであるため、誰にでも安定稼動させることが容易である

 サポート面もマイクロソフトを始め、各ベンダー完璧サポートを行える体制となっている。

 またコンピュータOSとしてほぼ100%のシェアを誇っているので情報豊富である

2011-08-14

デスマーチ中の村

お盆からと友人と飲むことになって、居酒屋にいったりスナックに行ったりした。

(すごーくどーでもいいことだけど僕はスナックという場所が好きになれない。

働いている方々も懸命だろうし、価値を作り出しているとわかっていても私に楽しい場所とは思えないし、あれだけのお金が動くのがよくわからない。

風俗で色々したほうがよっぽど良さそうだ。

会社飲み会二次会が、スナックでの上司のご機嫌取りになっているせいもあるのかもしれない。閑話休題

色々話してても、社会人なのでやっぱり仕事の話が少しは出てくる。

実は今日飲み会の前に以下の二つの記事を読んでいた。

ニートが揺るがす「勤労」の幻想無職たちは合法的略奪を目指す

http://d.hatena.ne.jp/Rootport/20110812/1313138224

【karoshi 過労死の国・日本(3)繰り返される悲劇

http://sankei.jp.msn.com/economy/news/110810/biz11081013390009-n1.htm

まあ、別に読んだからってどうってこともない。

面白いとは思ったけど、世の中で言われ尽くされてる事でもあるなー。そんな感じ。

みんな嫌でも会社や同僚のパワハラ恐れてシャー無しでやってんだ。と思った。

でも同時に声に出さないより何倍もいい。とも思った。

なにも言わなかったら何も変わらない。

なにもしなかったら何も変わらない。(僕はびびりな小市民だけど)

一部の中高年くらいの層は会社に尽くす事が喜び!みたいな感じでサービス残業している人がたくさんいた(今でもか?)

そういうのもわかっていたけど、さすがに自分年代はいないだろう。まだ新卒とかせいぜい3年目とか、その程度の集まりだ。

話の流れでフリーター派遣社員をやっている友人達の話が出た。

彼らには彼らなりの(ちょっと贅沢なものも中にはあるかもしれないが)理由があってそうなった。

その中の一人が正社員になろうと資格勉強を始め、職安にいったそうだ。

いいことじゃないか。と僕は思った。

以前から少しずつでもと勧めてはいたが、実際に行動したのは大きな進歩だ。

正社員になることがすべてとは思わないが、今の辛そうな生活からは抜け出せるかもしれない。

派遣社員は週4、5日働いて残業2〜3時間があって大変だと愚痴っていたそうだ。

うちも似たようなもんだが、正社員派遣社員には待遇に差があるし、サービス残業があるなら不満も出るなとも思う。

社会がもっといい方向に進めばいいよね。」くらいにしか小市民の僕には言えなかった。僕だって残業は嫌だし。

けどみんなの意見は違うようだった。

「甘い」

「うちは先月休み3日だぜ!」

「2〜3時間残業が続いただけで何言ってんだよ!」

社会をなめてる!」

あいつじゃ正社員にはなれない」

みんながみんな、彼らを否定していく。

そういえば一つ上の先輩社員デスマーチ中楽しそうに

「俺、最近毎日時間しか寝てねぇw」とか言っていた。

「僕もっとWeb系やりたいです!」と言っていたが未だにASP.NET以外知らないようだ。一応情報学科の大学院卒って聞いたんだが。

別に先輩が悪い訳じゃないと思う。(いや、勉強する気が無いようにも見えるし、その点は悪いのかもしれないが)

四六時中会社デスクの前でわけのわからない事をやらされていたら向上なんて出来ないだろう。

現場には、余裕がないのだ。とまず思った。

これは飲食店サービス業から金型作りの工場勤務、ソフトウェア開発まで全部同じだと思う。

でもそれ以上に彼らに共通している事は

「俺たちが苦しいのにあいつらは不平等だ!」

残業休日出勤努力の証!」

努力(苦労と混同していると思う)しないやつはいい思いなんてできない!(させたくない)」

という気持ちだった。強く感じた。

ウェブや本のなかでたくさん書かれているのに、直接同世代から聞くまでそんな考えは年寄りものだと思い込んでいた。

だれも自分能力不足だとは考えなかったし、

国の制度会社のせいにさえしなかった。

上や環境は変えられないから下を叩いて満足しようという気持ちが見て取れて、僕は言葉が出なかった。

先日友人がまた一人鬱病になった。

回復はしてきているようだがすこし心配だ。

小さい頃仲のよかった友人は鬱病と診断されて久しいが、きれいな家は売物件になっていた。

この国はずっとデスマーチ状態なのだ。村社会の国全体で行進しているのに、非力な僕一人が抜け出せる余地はない。

まだ少しお酒が残っているせいかこんなゴミみたいな文を二十歳そこそこの新卒若造が偉そうに書いてる(笑)

かまってちゃんです。ごめんなさい。じいちゃん、明日墓参りにいくよ。

寝よう。

2010-07-14

ASP.NETのマスターページ

MicrosoftWeb技術で「マスターページ」というのがある。ヘッダやフッタみたいな各ページに共通なパーツを記述するためのものだ。

で、技術書Webページを読んでると、それが「マスターベーション」に見えてしょうがないのよ。

2009-05-14

IIS+ASP.NET+SQLite

自分のための覚え書き。知ってる人からすれば全然当たり前のことかも…

IIS上で、Visual Studio 2008で開発したASP.NETWebサイトを動かす時に、SQLiteを使う方法

IISの動作しているマシンに「SQLite for ADO.NET 2.0」をインストール

それだけで良いと思ったけれど、以下のエラーが発生。

ArgumentException: 要求された .Net Framework データ プロバイダが見つかりません。これは、インストールされていない可能性があります。

いろいろ調べたら、手動でmachine.configを書き換える必要があるみたい。

そこで、machine.configに以下の行を追加。

	<system.data&gt;
		<DbProviderFactories&gt;
			<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.61.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /&gt;
		</DbProviderFactories&gt;
	</system.data&gt;

無事に動くようになりました。

2009-02-19

モダンPerl入門』を第1章だけ読んだ

巷のPerl Mongerな人たちの間で話題の『モダンPerl入門』を読み始めた。

第1章はオブジェクト指向トレンドの話で、とても興味深く読んだのだが、同時に「なんでこれPerlで実装せなあかんの?」と疑問に思った。ていうかオブジェクト指向やりたいならJavaC#でいいじゃん。

Perl5には本格的なOOPの仕組みが実装されていない。

継承という基本的な概念もないし、コンストラクタなんかも用意されていない。ゆえに、MooseとかのCPANモジュールを使って実装しなければいけないのだけれど、その分敷居が高くなって初心者には判りづらい。初心者でも現場に投入できるような、強力なオブジェクト指向機構が用意されているJavaC#といった言語StrutsASP.NETといったフレームワークなんかとは全然違う。

私はメインPHPASP.NET(C#)という人間で、Perlバッチプログラムとかクローラの実装とか雑用処理なんかに使っている。PHPは小規模プロジェクトアジャイルな開発がしたい時、ASP.NETは大規模プロジェクトに呼ばれた時用の懐刀という感じで使い分けている。PerlWebサービスを作ることももちろん出来るけれども、どちらかというとスピードが優先される開発に用いるものだと思うし、OOPを用いた大規模なプロジェクトPerlを使おうとする理由がよく判らない。無駄に難しいし、そもそも本書を読めるレベルPerlを理解している人の頭数がかなり少ないだろうから、実装しても保守コストがやたらかかる。Livedoormixiはてなのような大規模サイトPerlで動いているようだが。。。

モダンPerl入門』は内容も書き方も素晴らしい良書だけれど、その辺りが引っかかった。「PerlOOPを使う理由(APS.NETStruts+Java採用しない理由)」は何なのだろうか? 私のプログラマーとしてのスキルが低いだけだと思うが、よく判らないので誰か教えてくだしあ。教えてダンコーガイ

2008-02-27

Joel On Software私訳

訳してみた。あらためて、和訳はものすごく時間を要する作業だということがわかった。もうしないと思う。

注意:以下は意訳、適当訳、稚拙訳であり、誤訳を多々含んでいることは確実であり、Joel氏が本当に以下のように述べているとは限りません。

なぜMicrosoft Officeファイルフォーマットはこんなにもややこしいのか (そしてその対処法を幾つか)

Tuesday, February 19, 2008

先週、MicrosoftOfficeバイナリフォーマットを公開したが、このフォーマットは殆ど正気でないように見える。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コードベースにおいて最小の行数になるのは何か、だったことを意味する。SGMLHTML-interchangeableといった標準ファイルフォーマットのようなアイデアは、最初にインターネットドキュメントの相互交換を実現するまで現実のものにはならなかった。それはOfficeバイナリフォーマットが最初に考案されてから10年後のことだったのだ。ドキュメントを交換するのにインポーターエクスポーターを使うことができるという仮定が常にあった。実際Wordは簡便な交換のために設計されたRTFと呼ばれるフォーマットを持っており、そのフォーマットは殆ど最初のころからあり、今も100%サポートされている。

それはアプリケーションの全ての複雑さを反映していなくてはいけない。 全部のチェックボックス、全部のフォーマッティングオプション、そして全部の、Microsoft Officeのフィーチャーは、ファイルフォーマットのどこかで叙述されていなくてはいけない。Wordパラグラフメニューにある、"Keep With Next" と呼ばれるチェックボックス、これはパラグラフを、その後ろのパラグラフと同じページに置くのに必要な場合は、次のページに移動させるもの(?)だが、これもファイルフォーマットの中に無くてはいけない。そしてこれはつまり、あなたがWordドキュメントを正しく読み込める完璧Wordクローンを実装したいなら、そういったフィーチャーを実装しなくてはいけないということだ。Wordドキュメントをロードする競争力のあるワードプロセッサを作っているのなら、ファイルフォーマットからそのビットをロードするコードを書くのには1分しかかからないかもしれないが、ページのレイアウトアルゴリズムをそれに対応させるのに何週間もかかるかもしれない。もしあなたがそうしない場合、カスタマーがあなたのクローンWordファイルを読み込んだら、全部のページがぐちゃぐちゃになってしまうだろう。

それはアプリケーション歴史を反映していなくてはいけない。 このファイルフォーマットに見られる多くの複雑さは、古く、複雑で、愛されず、めったに使われないフィーチャーを反映している。それらはファイルフォーマットのなかに後方互換性のためにまだあり、そしてMicrosoftにとってその辺りのコードを残しておくことには何らコストはかからない。しかしあなたがこれらのファイルフォーマットをparseおよびwriteする一貫した完全な仕事をしたいと思うなら、Microsoftインターンが15年前にやったのと同じことを全て、またやらなくてはいけない。要点は、何千人年の仕事が今のWordExcelには費やされてきたのであり、これらのアプリケーション完璧クローンを作りたいと本当に欲するなら、あなたは何千人年を費やさなくてはならないことになる、ということだ。ファイルフォーマットは単に、アプリケーションサポートする全てのフィーチャーの簡潔なサマリーなのだ。

手始めに、小さな例を一つ、深く見てみよう。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版のExcel1-2-3ファイルインポートできなくてはならず、そしてそれは1900/1/1をエポックとして採用していたからだ。あなたが涙ぐむのも無理はない。歴史のどの時点においても、プログラマが正しいことをしなかった、という時はないのだが、しかし現実にあなたが手にしているものはこれなのだ。

1900と1904のファイルタイプは両方とも世の中には広く存在しており、それは通常、ファイルWindowsMacのどちらで作られたかによる。一方のタイプから他方のタイプへ黙って変換するのはIntegrity的に問題があるので、Excelファイルタイプを変換することをしない。Excelファイルをparseするためには、あなたは両方を扱わなくてはならない。それはファイルからこのbitをロードするだけの問題ではなく、あなたが日付表示と両方のエポックを扱うparsingのコードまで書き直さなくてはいけないということを意味する。実装には何日かかかるだろうと私は思う。

実際、あなたがExcelクローンの作業をするなら、日付の扱いについて、あらゆる種類の微妙ディティール発見することになるだろう。Excelは日付の値をいつ変換するのか? 表示の整形はどうやっているのか? なぜ1/31は今年の January 31と翻訳され、また一方で1/50はJanuary 1st, 1950と翻訳されるのか? Excelソースコードと同じだけの量のドキュメントを書かないがぎり、振る舞いに関しての微妙ビットを全て完全に記述することはできない。

そしてこのレコードは、あなたが扱う何百もあるBIFFレコードの最初の1つに過ぎず、しかももっとも単純なものなのだ。他のレコードの殆どは、より多くのプログラマーを涙に暮れさせるぐらいには十分複雑だ。

唯一導き得る結論はこれだ。

MicrosoftMicrosoftOfficeファイルフォーマットリリースしたことは大変有用なことだが、しかしそれでOfficeファイルフォーマットインポートしたり保存したりするのが楽になるということは全く無さそうだ。それらは狂気じみて複雑で、リッチアプリケーションで、そしてあなたは人気のある20%の部分を実装して80%の人々を幸せにするというくらいのことしかできない。バイナリファイル仕様によってなされるのは、多く見積もっても、著しく複雑なシステムリバースエンジニアリングにかかる時間を何分か削減するくらいだろう。

オーケー, 私はいくつか回避法を教えると約束した。良いニュースは、殆どの良く知られたアプリケーションにとって、Officeバイナリファイルフォーマットを読み書きしようと試みることは誤った決定だということだ。あなたが真剣に考えなくてはいけない代案が2つある。Officeそのものにそれをやらせるか、書き込むのが簡単なファイルフォーマットを使うかだ。

ヘビーな仕事Officeにやらせよう。WordExcelは実に完全なオブジェクトモデルを持っており、COMオートメーションの手段が可能で、これであなたは何でもプログラムでやるようにできる。多くのシチュエーションでは、Office内のコードを再利用するほうがそれを実装しようとするよりも良い。ここにいくつか例がある。

  1. Webベースアプリケーションがあって、それが既存のWordファイルPDFフォーマットに出力するようにする必要がある場合、それを実装するにはこうする: ファイルを読み込んでからWord 2007のビルトインのPDFエクスポーターを使ってそれをPDFとして保存する、数行のWord VBAコードだ。あなたはこのコードIISで動作しているASPASP.NETコードから直接呼び出す。これでうまくいく。最初にWordを立ち上げるときは数秒かかる。2回目はCOMサブシステムによりWordはまたあなたがそれを必要としたときのためにメモリ中にキープされている。それは通常のWebベースアプリケーションにとっては十分に速い。
  2. 上と同じ。ただしあなたのWebホスティング環境Linuxだった場合。フルライセンスWordインストールされたWindows 2003サーバを買う。そしてその仕事をする小さなWebサービスを構築する。C#ASP.NETでの半日の作業だ。
  3. 上と同じ、ただしあなたがよりスケールさせたいと望む場合。ステップ2で構築した全部のボックスの前にロードバランサーを置きなさい。コードは必要ない。

この手のアプローチは、全ての種類の一般的なOfficeタイプについての、サーバ上であなたがやりたいと思うであろうアプリケーションで、うまくいくだろう。例えば:

これらのケースの全てにおいて、Officeオブジェクトインタラクティブ動作でないことを教えてやる方法があり、だから表示をアップデートするのに煩わされたり、ユーザ入力を促す必要はない。ところで、このようなやりかたでいく場合には、gotchas(?)がいくつかあり、そしてそれはMicrosoftは公式にサポートしているものではない。だからあなたがそれを始める前にはKnowledge baseの記事を読むように。

書き込むファイルにはもっとシンプルフォーマットを使いなさい。単にOfficeドキュメントプログラムで生成したいなら、殆どいつでもOfficeバイナリフォーマットよりももっと良いフォーマットWordExcelでも問題なく開くことができるようなフォーマット存在する。

いずれにせよ、全てのOfficeファイルを完全に読み書きできるような、文字通りのOffice競合製品を作ろうとする(その場合には、何千年もの作業があなたに予約される) のでない限り、Officeバイナリフォーマットの読み書きをするというのは、何であれあなたが解決しようとしている問題を解決するためのもっとも労働集約的な方法だ。

2007-10-30

[]55行で作るC#テンプレートエンジン

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 &amp;&amp; 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>&lt;strong&gt;foooooooooo!&lt;/strong&gt;</td>
      </tr>

    </table>
  </body>
</html>

CodeDom 使って動的コンパイル……って、このコードのままだとセキュリティ的に大問題な気がするな。

素直に ASP.NET 使ったほうが楽だと直感した。

あと EscapeString すっごく自信ない。たぶん修正が必要だと思うw

2007-09-26

今日、別の会社が書いたASP.NETWebアプリを修正した

ユーザーコントロールフォルダに一度しか使われず再利用がまず不可能なコントロールが山のようにあった

ユーザーコントロールフォルダにはサブフォルダが無かった

aspxはコードビハインドにしてるのに殆どユーザーコントロールを配置してるだけだった

死ねばいいのにと思った

 
アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん