「例外処理」を含む日記 RSS

はてなキーワード: 例外処理とは

2015-07-01

http://anond.hatelabo.jp/20150701154013

今まで、

例外処理コスト例外ユーザーによる損失

で、例外処理をしないで浮いたコスト分をメインユーザー還元という事かな。

それが、

例外処理コスト例外ユーザーによる損失

に変わった。

しか例外処理組み込み適正な価格にすることは=値上げになると。

結局はもとの想定が甘かったって事でしょう。

例えば酔っ払ってやらかす客への対応コストは折り込み済みでしょう?

居酒屋ならそういった例外処理普通想定するよね?

それともマナーの良い酔っ払いしかいない想定なの?

それらのコストに比べれば、飲まない客に別価格設定したり、

お引取り願う例外処理コストのほうが安いでしょ。

http://anond.hatelabo.jp/20150701152834

例外処理を怠ってそのぶんメインユーザーから多く取る設定にしているから、

例外処理をしない代わりにメインユーザにより良い条件を提供してるんだよ

http://anond.hatelabo.jp/20150701145903

しっかりメインのターゲットユーザーに対しては適切な設定をしつつ、

イレギュラーユーザーには例外処理

それが本来のあるべき姿だよね。

例外処理を怠ってそのぶんメインユーザーから多く取る設定にしているから、

セキュリティホールを突かれて破綻する。

2015-03-26

http://anond.hatelabo.jp/20150325232850

「軍だけども戦力じゃない」という例外処理は(実際過去にそういう解釈も可能であることが政府見解として言及されてはいるのだけども)

それ初耳なんだけど、具体的にいつ出されたどの見解のこと?

2015-01-19

仕様書に書いていない事を作らなかったら不具合

なぜライジングサンコーポレーションSEってのはプログラマーに対して、仕様書に書いていない事をやらせるのか?

仕様書に記載していなかった事を作りこんでいなかったら、不具合扱いされた。

いや、書いてある事を実現出来なかったらそれは不具合と認めるよ。

「書いていない」というと「常識だろ」と言われる。あんたらの製品常識かもしれないが、こっちには常識では無い。

ましてや、全てを底辺プログラマーのせいにして、なんとかという精神的追い詰め会議に呼び出すのはどういう事か???

それでも、「書いてくれ」と言い続けると、「全てを網羅出来ない」と開き直る精神がすごい。

なら「こちらも全てのエラー処理例外処理等を網羅出来ない」と言い返すのはタブーである。ここまで言うと、ライジングサンコーポレーションエライ人達はキレる。

全てをプログラマー責任押し付けるのはやめてくれないか。

品質向上プロジェクトとかあるようだが、プログラマーをいびる事で品質が上がると思っていたら大間違いだ。

君たちのその開き直りを直す方が先ではないかね?

2014-10-02

エンジニアズ=ハイ

大企業システムエンジニアは目の前の膨大なコードの前に立ち尽くし、いかに事故を起こさずに今回の客の要求だけを反映するか四苦八苦し、実装後はただ逃げ切る日を夢見る。俺の腐れ上司もちょこちょこっとシステム修正オフライン活躍し……ああつまり飲み会ゴルフ部長に媚びへつらい別の部署へ逃げ切っていった。

そうして俺の直上司は誰もいなくなり、一人か二人の学生上がりPGをメンバにもった俺が今度は修正をする番になる。


要求を読む。結構無茶な要求だが、敵はそれだけじゃない。コードが正ならコードを読めばいい。ただこの腐れ切ったコードが本当に正しいとは限らない。

俺は更新履歴の腐れ切ったワード仕様書を開く。誤字脱字のオンパレード例外処理云々といった赤字散見されつぎはぎだらけのゾンビーになっているのがわかる。



腐れ切ったコードと腐れ切った仕様書。この仕様書の記載をしたのはファイル更新日からすると二代前の部長だ。当時を思い出す。あの異常なスケジュール下でいいかげんな部長が変更仕様を仕込むとすれば、まずここの影響範囲の見込みを漏らすだろう。しかも高圧的な得意先だ。タフな交渉術を持たない部長のことだから得意先の負荷が高いインのテストパターンは申し入れしなかっただろう。ここも危ない。ああ、こっちもヤバそうだ。



そうやって前任者を想像しながら仕様書を読み込んでいくと、そこここに前任者のゴーストを読み取ることができる。俺はこいつをぶち殺すのが好きだ。まるで前任者自身をぶち殺せるかのような錯覚に陥る。



仕様書を生まれ変わらせる。そしてコードを生まれ変わらせる。腐れた部分をぶち殺す。このとき感覚を俺はエンジニアハイと呼んでるが、この業界、多かれ少なかれみんな似たような体験をしたことがあると思う。

学生のみなさんもぜひこの業界に来るといい。歓迎する。

2014-09-02

最近Web開発に感じる大きな谷(主にRails

10年くらいWeb開発業界にいて、ここ最近Railsアジャイルな高速開発的なものの周辺にいる。今は開発者マネージャの間を行き来しつつ顧客窓口〜実装まで一通りこなしている。

あちこち渡り歩いて色々なエンジニアと一緒に仕事をしたり、お客さんに頼まれてエンジニア面接やらに顔を出したりすることがあるのだが、ここ最近Web開発はますます主力級のゴリゴリ書けるエンジニア(いわゆるフルスタックエンジニアと呼ばれるものも多分ここに入る)と大したことのないエンジニアの差が開いてきたように思う。

主力級エンジニア

主力級のエンジニアは1〜2回がっつり打ち合わせしてプロジェクト重要点とざっくりラフイメージを共有すれば、どんなに遅くても1週間もすればプロトタイプが上がってきてお客さんに見せつつ微調整し、いわゆるアジャイルとかスパイラル開発的なことができる。デザイナがいなくてもBootstrapでとりあえず最低限の見た目を作ってくれるので、とりあえずデザイナ無しで開発して最終的にお客さんが気に入らなければWebデザイナに見た目整えさせてテンプレ取り込み、という開発がここ最近のメイン。

ソースコードフレームワークRESTfulの基本概念理解されているコードなので、後日の機能修正の時にそのエンジニアが動けなくても自分フォローして修正することもできる。

仕事もしやすいし、実質1〜2人の稼働でサクサク進められるのでコミュニケーションロスもなく楽しい

大したことなエンジニア

一方、大したことなエンジニアは前述した流れが全くできない。

まず決定的なのは、開発が遅い。ちょっとしたデザイン無しのCMSリッチUIなし)をRailsで書くのに1週間かかっても終わらなかったりする。これじゃ生PHPで書くのと変わらないかそれより遅いので、Rails使う意味がない。

次に、品質が低い。できあがったと言われて念のためチェックすると、基本的CRUDレベルエラーが出たり、お客さんに見せるプロトタイプだと言っているのに初期データseeds)の整備すらされていなかったりする。本人のローカル環境で動いてるけどstaging環境にdeployすると動かないとかはよくある。

パッと見に分からない部分もひどくて、ソース確認すればあちこちどこかからコピペしてきたコードのつぎはぎで、HTML規約違反JavaScriptエラーまで放置されていたり。あと実装しましたと口頭で言っていた機能ソースコードコメントではTODOになっていたこともあった。

最後に、成長しない。開発上詰まった所なんかを主力級エンジニアに聞くのは構わないのだが、表層的な理解に留まり応用が利かない。30分〜1時間も主力級エンジニア時間を浪費しながらもまた同じ様なところで同じ様なミスをする。自分もよくプチ勉強会みたいな状態になったときには参考図書や技術資料ポインタを投げたりしているのだが、参照先を見て深掘りすることはほぼない。

なぜ「大したことなエンジニア」がはびこるのか?

厄介なのは、こうした大したことなエンジニアも、Railsであればあちこちのチュートリアル記事書籍を参考に、そこそこそれっぽく見える自作サービスくらいなら作れてしまうという点にもある。

彼らの作るサービスはまさに書籍チュートリアルサイトコピペ集大成だが、個人が趣味でやっているサービスとしては十分に動く。そして周りには「エンジニアです。個人でWebサービスも公開してます」となる。サービスの外からは内部のコード品質などはわからない。

プライベートで開発するのはむしろ奨励しているのだが、彼らはその拙い(あえて「拙い」と書く)サービスでもって「俺はもういっぱしのエンジニアだ」と勘違いしてしまっている様に思える。

だが違うのだ、お前が書いているシステムは「とりあえず動く」レベルのものであって、受託開発としてお金をもらってお客さんに納品するシステムや、数千万〜数億の売上を左右するような業務システムではその素人クオリティでは話にならないのだ。

適切な例外処理担当者ミスしにくい管理画面の設計、お客さんの想定ユーザ数に耐えられるレベルでのスケールする設計開発者が入れ替わっても保守が続けられるようにするための最低限のドキュメントなど、production level qualityに足りていない部分がいくらでもあって、そこまで考えられて「主力級エンジニアなのだ

感じる「谷」

こうした主力級エンジニアと大したことなエンジニアの谷は以前から感じていたが、ここ最近ではさらに顕著に感じるようになってきたように思う。

例えば、主力級エンジニアRailsだけでなくミドルウェアやprovisioning(chefとかansible)、最近ではdockerCIAWS新サービスなどについても各自追いかけていて、自分も含めてちょいちょい議論をすることがある。「最近のアレってどうなん?」とか「はてブでやたらXXX流行ってるけど、これって結局数年前のYYYの焼き直しじゃん」みたいな。

そんなところに大したことなエンジニアはてブRSSなどで用語は聞いたことがあるので混じってくるのだが、まず前提知識がなさすぎて議論にならない。大体「XXXマジすごいっすね〜(意訳)」で終わっていて、その技術の背景や今後どうなりそうか、自分達が取り入れることで業務効率や開発の楽しさが改善するのかといった視点がない。

他にも、ちょっとしたトラブルシューティングの際も、基礎がなさ過ぎて問題の切りわけができない。問題の原因がネットワークレイヤなのか、ミドルウェアなのか、アプリなのかすら判断できなかったり、そもそもアタリを付けるのが絶望的に遅かったり勘が悪い。

単に作業が遅いというのではなく、問題の切りわけというエンジニアとして最低限できないといけない事すらおぼつかないケースも見かける。

「大したことなエンジニア」の今後

こうした大したことなエンジニアは速度・品質難易度面で新規開発プロジェクトアサインするリスクが高いので、必然既存サイト運用メンテちょっとしたページデザイン文言修正)といったタスクが回されるのだが、最近この辺りも仕事がなくなってきているように思う。

というのは、お客さん側にRails Tutorial程度の開発知識を持っている元エンジニア趣味ちょっと触ってみましたレベルの人が増えてきたから。これは恐らくRails特有な所(自作Webアプリ簡単に作れる啓蒙がなされている)がありそう。

ちょっと考えてみれば、文言修正デザイン修正する程度の作業、外注に頼むと数万かかる上に見積やら稼働確保やらで数日〜数週間待たされるのに対し、担当者自分でやってしまえばすぐに済む話というのはちょっと考えれば分かるわけで。

# もちろんそれでも保守契約責任分解点の関係外注するケースはあるだろうが、Rails採用するようなWebサービスは速度重視のことが多い

そんな中、この「大したことなエンジニア」の人達はどうなるんだろうなあ、と思う。開発会社ではなくRailsシステム運用しているユーザ企業に行けば多少は需要あるのかなーとも思うけど、ユーザ企業はできないエンジニア雇うほど余裕もないだろうし。

せめてコミュニケーションスキルが高いとかそういう利点があればいいんだけど、変に自分が「エンジニア」というプライドがあるのか、窓口とか管理方面は率先してやろうとしなかったりもするし。

早めに「エンジニア向いてないよ」と言ってあげるのが良いのだろうか?

2014-07-23

http://anond.hatelabo.jp/20140723181259

いや、だから主語範囲は「男」だよ。範囲に疑いはない。

問題はどの程度まで例外処理として許されるか。

そこを曖昧にしたままじゃあ、論理的に間違いとは言えないだけで、何も主張してないに等しくね?

主語が大きい」って突っ込まれて、「例外があるのは当たり前だろ」って返すなら、「ああ例外があるんですね、結局何が言いたいの?」ってなるよ。

2014-07-18

http://anond.hatelabo.jp/20140718142219

例外処理できない証明ができないとダメ

いやいや、一般化することを正しいって主張するなら、例外はあらかじめ主張に織り込んどかないと。

からはてな民例外」なんて、勝ち負けでいったらその時点で負けてるよ。

2014-05-30

考証1

議論していて、とても板がみずらいので。

こちらをお借りします。

そもそも、"ルールシステム特許になる"という彼の前提で

幾つか記憶を頼りに特許権を打ち砕いていこうと思います

269 :(´ー`)y─┛~~ ◆UxQ8uxJMok:2014/05/31(土) 20:12:01.17 発信元:123.225.138.170

>>266

> 全てこちらの論証通りとさせていただくだけですので、

> 私としては問題ございません。

オマエが真似れば殺しに行くだけだからこっちも問題ない。

という訳で、上記のとおり、

下記論証で解決いたしました。

スレ汚し、大変失礼いたしました。

01.連番召喚。場札を出す処理に連番の条件を要す処理。

⇒7並べ、大富豪にて類似システムあります

   連番召還ではないですが、「場札を出す処理に連番の条件を要す」に該当。

◆UxQ8uxJMok :2014/05/30(金) 23:39:14.66 ID:mGswB6A1

> 「場札を出す処理に連番の条件を要す」に該当。

↑場札が1枚の場合に「出す条件で連番」が満たされてないので反論として破綻。 ほぃ、論破完了ww

との反論がありましたが、

連番とは

複数の番号が連続していること。また、その番号。

とのことですので、1に対する2、2に対する1も連番となります

2つ以上の整数があれば成り立つ形式ですね。

場札が0の場合に関しては七並べではおきえない状態ですし、

こちらの特許も範囲外なので、例外処理です。


02.山札が尽きたら、コストを払わずプレイできる処理。

何をですか?

特許というからには「何のリソースコストとして用い」

「何のプレイを行う」のかによって異なると思いますが……。

ちなみに山札がつきた際に自動誘発する効果であれば、

コストを支払わない処理に該当するのかと思います

◆UxQ8uxJMok :2014/05/30(金) 23:39:14.66 ID:mGswB6A1

> 山札がつきた際に自動誘発する効果

↑まず、その「山札がつきた際に自動誘発する効果」とやらを具体的に提示できねば反論として破綻。 ほぃ、論破完了ww

こんな初歩的な質問が来るとは……侮っておりました。

基本的に、「デッキが0枚なら敗北する」というルールエフェクト

「山札が尽きたとき自動誘発する効果」なのですが、多分聞き入れられませんので具体例を。

Laboratory Maniac / 研究室偏執狂 (2)(青)

クリーチャー人間(Human) ウィザード(Wizard)

あなたライブラリーカードが無いときあなたカードを引く場合、代わりにあなたはこのゲームに勝利する。

2/2

万が一の保険

[部分編集]

刻の末裔 / エクステンションブースター

OPERATION

O-73 青 1-3-0 R

(自動A):自軍本国が0枚になっても、自軍プレイヤーは敗北しない。

(自動D):自軍本国が0枚になった場合、このカードゲームから取り除く。その場合、自軍本国を5回復する。

アンドリュー・バルトフェルド

蒼海の死闘 / エクステンションブースター2

CHARACTER(UNIT)

CH-S29 白 2-3-1 R

砂漠

【(自動A):自軍本国が0枚になっても、自軍プレイヤーは敗北しない】

【(自動D):ターン終了時に自軍本国が0枚である場合、そのターンの終了直後、自軍プレイヤーの新たなターンを開始する。新たなターンの終了時、自軍プレイヤーは敗北する】

MTGは若干異なりますが、ガンダムウォーカード勢は

「山札がつきた際に自動誘発する効果」とやらを具体的に提示してみました。

山札が尽きたら、コストを払わずプレイできる処理の一例です。

手札からじゃない:特許項目02に記載がないので割愛します。

破壊するって書いてある:それも含めての誘発効果です。「コストの支払い」は行われません。

04.数字1つで2つの反比例した表現戦闘力と、速度または類似の序列 など)。

戦闘力と速度が反比例している――だとっ!?

速度と戦闘力は反比例しない、凄い速度は威力に等しいので前提が崩壊しています

◆UxQ8uxJMok :2014/05/30(金) 23:39:14.66 ID:mGswB6A1

> 速度と戦闘力は反比例しない

↑当該ゲームシステムについての記述なので、お前は議論の対象を履き違えており反論として破綻。 ほぃ、論破完了ww

すごい!超時空会話が出来ました!

まず、その「当該ゲームシステムについての記述」とやらを具体的に提示できねば反論として破綻

05.自由に選んだ最初の手札で、ゲームを開始するシステム

手札の定義をしてください。

  まさか、全てのゲームに手札があると思っているわけではないですよね?

私ですらゲームをつくる際には「このゲームは~~を手札とします」という定義を行います

  ちなみに「最初に選んだ手持ち札」という前提であれば、金色のガッシュベルTCGの魔本でやっています

◆UxQ8uxJMok :2014/05/30(金) 23:39:14.66 ID:mGswB6A1

> 金色のガッシュベルTCGの魔本でやっています

↑手札とは任意に選択できる札であり、ガッシュベルTCGは選択できない仕様から山札に該当する。 ほぃ、論破完了ww

デッキの1枚目と2枚目が手札になる仕様というだけで……「任意に選択できる」のですが。

あれ? なにか私分かり難いこと言いました……?

一応、ポケットモンスタークメン列伝という、手札を全て任意に選べるものもありますから

そういう方向性を話した方がよかったのですかね?

06.山札から手札へ移動させず、原則として手札を場(場札)から追加するシステム。 【完了

  手札の定義をしてください。

  まさか、全てのゲームに手(ry

  ボードゲームとかでは、場にある3枚のカードから好きなのを手札に移していいよ、とか良くありますね。

◆UxQ8uxJMok :2014/05/30(金) 23:39:14.66 ID:mGswB6A1

◆UxQ8uxJMok :2014/05/30(金) 23:40:05.89 ID:mGswB6A1

の記載にて反論が認められませんでした。

当該項目に関しての検証完了させていただきます

08.標的を指定できない限定的行使権利行使権)と標的を指定する権利(標的指定権)等に、優先権を細分化したシステム。 【完了

   優先権は元々細分化されているので、そもそも論理が成り立っていないかと……。

  ttp://mtgwiki.com/wiki/%E5%84%AA%E5%85%88%E6%A8%A9

   ちなみに、この項目がTCGに限っていないので、TRPGウォーゲームなどでは乱戦処理などで

「標的を指定できない限定的行使権利」や遠距離攻撃の一方的に「標的を指定する権利」がありますね。

◆UxQ8uxJMok :2014/05/30(金) 23:39:14.66 ID:mGswB6A1

> この項目がTCGに限っていないので

パクリ兆候を感じた段階で、裏取りせず下記の警告文が送られ、そのトレーディング・カードゲーム制作者は~。

↑実物カードゲームhttp://ai.2ch.net/test/read.cgi/entrance2/1395426290/の~。 カードゲーム限定ね。 ほぃ、論破完了ww

すごい行間を読むと、確かにそうなっているみたいですね、難しいですが。

下の項目は論破(?)されてしまいましたが、

上記優先権に関しての記載にて反論が認められませんでした。

当該項目に関しての検証完了させていただきます



09.他者側に干渉する選択の直後に、強制的自分優先権が被干渉側に移動する処理   

遊技王の優先権の処理は必然的にこうなるようになってませんでしたか

   ttp://yugioh-wiki.net/index.php?%CD%A5%C0%E8%B8%A2=

カードを1枚使用すると、優先権が移行するので。

◆UxQ8uxJMok :2014/05/30(金) 23:39:14.66 ID:mGswB6A1

> ※カードを1枚使用すると、優先権が移行するので。

↑その1枚が「相手に干渉」しないのに移行するのだから当方の内容とは一致せず。 ほぃ、論破完了ww

それであれば、「特に本校に記載されている"特別な許諾行為"を行わずとも"当該行為と同様の処理は行うことができる"」ということですね。

特許権にあります有用発明」項目の独自性に含まれないため、特許権としての効力を失います

もし、「相手に干渉しない場合の行動は続けられる」という場合では他カードゲームよりも優位性はないので、

有用発明」項目の独自性に含まれないため、特許権としての効力を失います

この場合はどちらの選択肢を取られるのでしょうか……?

10.速度や類似の序列で、優先権プレイ権限など)や手番(ターン)を獲得する処理。

  その昔、実際のTCGとして出たアルテイルにはAgi(素早さ)の処理がありました。

どちらのターンであれAgi順に優先権が決定していたと思います

  うろ覚えですが、グリモアペインは例外だった気がします。

◆UxQ8uxJMok :2014/05/30(金) 23:39:14.66 ID:mGswB6A1

> アルテイルには~ Agi順に優先権

> 「クルセイド」には

↑それらは攻撃順序の判定であり、「優先権の移行判定」や「先攻/後攻の判定」ではない。 ほぃ、論破完了ww

攻撃順序の判定ではありません、上記に記載した通り「優先権」を得ます

「移動、待機、スキル使用、攻撃の判定を能動的に宣言できるタイミングである優先権」を得ることが出来るのです。

優先権を持っているプレイヤーが全ての行動ができる」とは限りませんので、覚えておくとよいですよ。

>>maitnagele ,sirua subilauin ertsepmC

2013-12-05

共働世帯の実態を書いただけで子供愛情が無いと断定されたでござる

ほんっと社畜って育児がどんなもんかってわかってないね

トイレのドアを開けたまま用をたす癖がついちゃってさ~。って言ってわかる?

やあ、当方東京在住30代後半同期入社職場結婚共働住居賃貸男女2児保育園在籍痔主歴15年です。

http://anond.hatelabo.jp/20131130161624

↑に書いたアレコレの一日のフロー例外処理は単なる事務処理みたいなもんです。

育児が辛いとも楽しいとも一切書いてないのに何故か子供を愛してないと書かれる不思議

コーラを飲んだらゲップが出るでしょ?それとコーラが美味いか関係あんのか?無いだろ!?

愛情かけたら子供の熱が治るの?糞まみれの衣類が綺麗になんの?って話ですわ。

まともに子育てに取り組んだ方々からは「それってふつーだよね」ってブコメを頂いていま

すが、そのとおりであほみたいに余裕が無く見える保育園育児だけど、あそこに書いたこと

って保育園に通わせてる親だったらほぼ皆、普通にこなしてることだから我々夫妻が特殊

いう事では無い。(妻のみが担当している家庭も多々あるが。)

当たり前の育児を読んだだけなのに「ドヤ顔で忙しいアピールうざい」みたいなコメントは最も

的外れで恥ずかいから明日から気をつけようね。

んで、もっと工夫して楽すれば?というご意見について書ききれなかった実践している(し

た)事を以下に述べる。

結婚直後

 産後育児の世話をあてにして妻実家の徒歩圏内に住む。

妊娠

 0歳時以外の保育園入園は倍率が非常に高く困難であることを調査。翌4月保育園入園の

 方向で決心。(公立保育園例外以外は4月以外入園出来ない。これ超重有。)

出産直後~離乳食

 夫も子供の面倒をみれるよう母乳ミルクの混合で栄養を与えることとする。

 これにより、夜泣き時や妻寝不足体調不良時に母乳が出ないから夫には手出しは出来な

 いという状況を回避

・住居

 諸事情で当初住まいを引っ越す際に賃貸メリットを活かし妻実家保育園中間地点へ

 移動。

・妻実家への依存

 あくまで予備としてのみ活用

 急な発熱時。どうしても行って欲しい通院等予備的に月に1・2度は妻母の出番となる。

食洗機

 当然使用。

保育園イベント

 面談等平日の保育園イベントは妻・夫いずれかで順番に出席。

保育園イベント

 正直我が園はどの家庭も忙しい。よって飲み会などは少なめと思われるが、開催された

 場合は常に夫妻同時出席。

・食事

 保育園で出されるバランス栄養食品に便り、正直手抜き気味。特に夫の作る料理コメ

 肉(OR魚)・作りおきの何か・味噌汁スープ)・果物。的なものが多い。

 コメは多めに炊飯冷凍米も作成

・第二子妊娠計画

 前回の反省を活かし4月~夏頃の出産を計画(赤子の時間を長時間育児休暇する為)。

 子作りを前年夏以後に実施

 計画通り夏前に出産。翌4月に0歳時で入園成功。(第一子がいると二人目の子供は同一保

 育園に入りやすいというのが重要。)

・夫・妻の飲み会イベント

 予定が計画され次第相手に通告。相手の日程が空いていれば機械的に参加可能となる。

で、こっちが重要な話なんだけど共働き育児ってマジおすすめ

何がいいって言うと、育児を大きなストレスに感じる事が無く楽しむ事が出来る。

(もちろん子供イラッとする事はしょっちゅうだがあくまで一時的な話。)

仕事育児オンオフがあるので気持ちの切り替えが出来る。

・一日中子供の世話をしなくていい(デメリットとして、初めてしゃべった。初めて歩い

 た等の全ては保育士が見ている。)ので煮詰まらない。

以下は夫妻で同じ会社に務めているという特殊メリット

通勤時等に会話出来ており、自分時間が足りないので、夜・休日などにパートナー

 話を効いて欲しい等、思うことは無く自分時間も少しは使える。

仕事トラブル発生時等に社内インフラメール等で即時相手に連絡・バトンタッチ出来る。

・相手が昼間なにやってるか気にならない。

もちろんこれらはパートナーとの関係性にや子供性格仕事ストレス度等様々な要因が

からむので一概にはいえないのは当たり前であるが、少なくとも我々夫妻は共働きしてい

る事で子供を愛していないという事は一欠片も無く、むしろストレス少なく子育てエンジョイ

していると自信を持って言える。

2013-08-01

http://anond.hatelabo.jp/20130801202630

例外処理もそうだね。これもただ動かすだけならそう難しくはないけど、考え出すとキリがない。

2013-05-18

素朴なアイデア害悪

よく誤解されるのだけど、素朴な概念同士を組み合わせていくと矛盾を避けることができなくなるのはむしろ当たり前のことだ。

素朴な概念は、複雑な現実世界(巨大情報量)をアバウトな方法(情報量小)で分類などを行うものなので、ある一面からみると合理的になっているようにみえても大抵恣意的なルールが潜んでいる。

から別な切り口の素朴な概念を組み合わせようとするとほぼ必ず矛盾がでてくるのだけど、文部省教育要綱が悪いのか、素朴な概念例外処理も少なくて良い等と思う輩が多くて閉口する。

現実の問題を整合性をもって「正しく処理」するための適切な方法は、基本的にそれなりに大きな複雑性のある概念(情報量中大)で切り分けていってそれなりに多い手順の運用で回すしかないってことを、いい加減みんな理解してくれないものか。

もちろんリソースは有限なので、本来「正しく処理」できることというのはひとつ組織の中でも非常に限られてくる、というところまで理解されている必要がある。

そうして初めて「それなりの正しさ」で妥協するということの価値を理解してもらえるわけで・・・、業務システム開発者の苦悩は深い。

2013-02-19

Rails3で日本語ファイルダウンロードさせると文字化けするぞ

いままでの私のやり方

Webブラウザによって,マルチバイトファイル名の取り扱いが異なるというのが問題なんだよね

いままでは,http://kingyo-bachi.blogspot.jp/2012/10/railssendfilechrome.html 

を参考にして,ファイル名をURLエンコードすることでお茶を濁していたんだ

でもこれだと,Firefoxファイル名が文字化けすることに気付いてしまった

気づかなければ放置していたんだけどね :P

もっといい方法いか

そこで最近事情を調べたサイトはないかと調べてみると

http://rails.hatenadiary.jp/entry/2013/01/31/104006 を発見

(生sjisと,URLエンコードの違いはもう少ししっかり書いておかないと誤解招かないかな?という当ページへの突っ込みはさておき)

まりは,基本は日本語ファイル名をUTF-8で扱うぞ,ただしIEだけは例外としてSJISに変換してやるぞ

ということだね

ちょっと気になったので,このあたりのブラウザ対応状況をざっと調べてみたよ

なお調べた日本語ファイル名は「今日の予定.doc」.「予」という漢字が入っているのがポイント

生utf8 sjisurl_encode(utf8)url_encode(sjis)
chrome(win7-64bit) ok x okx
firefox 18 (win7-64bit) ok x xx
IE9(win7-64bit) x ok okx
firefox(MacOS X) ok x xx

例外処理って気持ち悪いよね

さらにいろいろ調べてみると,正式にはRFC2231に準拠させるのが正しいみたい

http://fgin.seesaa.net/article/30073826.html によると,

IE6対応してなかったようだけど,私の中ではIE6はもう絶滅していることになっているので!

最近ブラウザ対応しているよね!きっと!

Railsのsend_file関数でさ,RFC2231準拠のContent-Disposition表記ができたらいいのにな(チラッチラッ)

2012-12-24

pixivKasperskyの警告

pixivがまたノーチェックの広告を出して危険サイト入りしているようだ

以下俺とKasperskyのやり取り

Kaspersky「あ、マルウエア仕込もうとしてるサイトなのでブロックときますね」

俺「いや、このサイトはいものことだからスルーで」

Kaspersky「これも危ないですからブロックしますね」

俺「いや、だからスルーで」

Kaspersky「またブロックしますね」

俺「メンドイからこのサイト広告例外に入れるね」

Kaspersky「マルウエア入ってきたかもしれないんでこのフォルダ隔離しまたから」

俺「おいまて、それ隔離したらブラウザうごかんだろうが!」

何でこの子こんなにお馬鹿なんだろう・・・

Kaspersky入れてるやつはpixiv見る前に止めるか例外処理をちゃんと設定しよう

2012-08-13

C#基礎文法最速マスター

1. 基礎
classの作成

プログラムclass記述します。たとえばSampleという名前classを作る場合、Sample.csファイル内に次のように書きます。(C#場合ファイル名とクラス名は同一でなくても良い。複数のクラスを書いても良い)

public class Sample {

}
Mainメソッドの作成

プログラムclass内のMainメソッドの先頭から実行されます。Mainメソッドは次のように書きます

public class Sample {

    public static void Main( String[] args ) {
         // 処理を書く
     }

}
Console.WriteLineメソッド

文字列を表字するメソッドです。

Console.WriteLine( "Hello world" );
コメント

コメントです。

// 一行コメント

/*
   複数行コメント
 */
変数の宣言

変数の宣言です。変数の宣言時にはデータ型を指定します。

// 変数
int num;
データ型

データ型です。C#データ型には値型と参照型とがあります。以下は値型のデータ型です。

// int(整数)型
int num;
// char(文字)型
char c;
// float(単精度浮動小数点)型
float val;
// double(倍精度浮動小数点)型
double val;
// bool(論理)型
bool flag;
// DateTime(日付)型
DateTime date;

以下は参照型のデータ型です。

// StringString s;
// 配列String[] array;
プログラムのコンパイル

プログラムコンパイルするには、コマンドラインで以下のようにします。

csc Sample.cs
プログラムの実行

プログラムを実行するには、コマンドラインで以下のようにします。

.net framework on Windows場合

Sample.exe

Mono.frameworkの場合

mono ./Sample.exe
2. 数値
数値の表現

int、float、double型の変数に数値を代入できます。int型には整数だけ代入できます。float、double型には整数でも小数でも代入できます

int i = 2;
int i = 100000000;

float num = 1.234f;

double num = 1.234;
四則演算

四則演算です。

num = 1 + 1;
num = 1 - 1;
num = 1 * 2;
num = 1 / 2;

商の求め方です。割る数と割られる数が両方とも整数場合計算結果の小数点以下が切り捨てられます

num = 1 / 2;  // 0

割る数と割られる数のどちらかが小数場合計算結果の小数点以下が切り捨てられません。

num = 1.0 / 2;    // 0.5
num = 1 / 2.0;    // 0.5
num = 1.0 / 2.0;  // 0.5

余りの求め方です。

// 余り
mod = 4 % 2
インクリメントとデクリメント

インクリメントとデクリメントです。

// インクリメント
 ++i;

// デクリメント
 --i;
3. 文字列
文字列の表現

文字列ダブルクォートで囲みます

String str = "abc";
文字列操作

各種文字列操作です。

// 結合
String join = "aaa" + "bbb";

// 分割
String[] record = "aaa,bbb,ccc".Split( "," );

// 長さ
int length = "abcdef".Length();

// 切り出し
"abcd".Substring( 0, 2 )   // abc

// 検索
int result = "abcd".IndexOf( "cd" ) // 見つかった場合はその位置、見つからなかった場合は-1が返る
4. 配列
配列変数の宣言

配列です。

// 配列の宣言
int[] array;
配列の生成

配列の生成です。配列の生成時には要素数を指定するか、初期データを指定します。

int[] array;

// 要素数を指定して配列を生成
array = new int[5];

// 初期データを指定して配列を生成
array = new int[] { 1, 2, 3 };

// 宣言と同時に配列を生成
int[] array2 = new int[5];
配列の要素の参照と代入

配列の要素の参照と代入です。

// 要素の参照
array[0]
array[1]

// 要素の代入
array[0] = 1;
array[1] = 2;
配列の要素数

配列の要素数を取得するには以下のようにします。

array_num = array.Length;
配列のコピー

配列の要素を別の配列コピーするには以下のようにします。

int[] from = new int[] { 1, 2, 3 };
int[] to = new int[5];

from.CopyTo(to, 0);
5. 制御文
if文

if文です。

if ( 条件 )
{

}
if ~ else文

if ~ else文です。

if ( 条件 )
{

}
else
{

}
if ~ else if 文

if ~ else if文です。

if ( 条件 )
{

}
else if ( 条件 )
{

}
while文

while文です。

int i = 0;
while ( i < 5 )
{
    
    // 処理
    
    ++i;
}
for文

for文です。

for ( int i = 0; i < 5; ++i )
{
    // 処理
}
for-each文

for-each文です。配列の各要素を処理できます

int[] fields = new int[] { 1, 2, 3 };

foreach (int field in fields)
{
    // 処理
}
6. メソッド

C#では関数メソッドと言いますメソッドを作るには次のようにします。戻り値を返却するにはreturn文を使います

static int sum( int num1, int num2 )
{
    int total;

    total = num1 + num2;

    return total;
}
9. ファイル入出力

ファイル入出力です。ファイル入出力を行うには、プログラムの先頭に以下を記述します。

using System.IO;

以下がファイル入力の雛形になりますファイルオープンや読み込みに失敗した場合catch節に処理が移ります

String filename = "text.txt";
StreamReader reader = null;
try
{
    reader = new StreamReader(filename);

    String line;
    while ((line = reader.ReadLine()) != null)
    {

    }

}
catch (IOException e)
{
    // エラー処理:

}
finally
{
    if (reader != null)
    {
        try
        {
            reader.Close();
        }
        catch (IOException e) { }
    }
}

またはC#ではusing ステートメントと言うものがあり、この様にも書ける

String filename = "text.txt";
using (StreamReader reader = new StreamReader(filename))
{
    try
    {

        String line;
        while ((line = reader.ReadLine()) != null)
        {
            // 読み込んだ行を処理
        }

    }
    catch (IOException e)
    {
        // エラー処理:

    }
}

usingをつかうとCloseがなくなったことからわかるようにusing(){}を抜けるとき自動的にDisposeメソッドを呼び出し、オブジェクトを廃棄する。その分コードスッキリするが、使いにくい場面もあるので考えて使うこと。

以下がファイル出力の雛形になりますファイルオープンや書き込みに失敗した場合catch節に処理が移ります

String filename = "text.txt";
StreamWriter writer = null;

try
{
    writer = new StreamWriter(filename));

    writer.WriteLine("abc");
    writer.WriteLine("def");
    writer.WriteLine("fgh");

}
catch (IOException e)
{
    // エラー処理:

}
finally
{
    if (writer != null)
    {
        writer.Close();
    }
}

こちらもusingを使って書ける。が、割愛する。

知っておいたほうがよい文法

C#でよく出てくる知っておいたほうがよい文法の一覧です。

繰り返し文の途中で抜ける

繰り返し文の途中で抜けるにはbreak文を使用します。

for ( i = 0; i < 5; ++i ) {

    if ( 条件 ) {
        break;    // 条件を満たす場合、for文を抜ける。
    }

}
繰り返しの残り部分の処理をスキップする

残りの部分処理をスキップし、次の繰り返しに進むにはcontinue文を使用します。

for ( i = 0; i < 5; ++i ) {

    if ( 条件 ) {
        continue;    // 条件を満たす場合、残りの部分処理をスキップし、次の繰り返しに進む。
    }

}
例外処理

例外を投げるにはthrow文を使用します。

throw new Exception( "Error messsage" );

例外処理をするにはtrycatch文を使用します。

try {

    // 例外が発生する可能性のある処理

} catch ( Exception e ) {

    // 例外発生時の処理

}

2011-12-12

コンピュータプログラミング概念技法モデル」の目次

第1章 プログラミング概念入門
	1.1 計算器
	1.2 変数
	1.3 関数
	1.4 リスト
	1.5 リストについての関数
	1.6 プログラムの正しさ
	1.7 計算量
	1.8 遅延計算
	1.9 高階プログラミング
	1.10 並列性
	1.11 データフロー
	1.12 明示的状態
	1.13 オブジェクト
	1.14 クラス
	1.15 非決定性と時間
	1.16 原子性
	1.17 ここからどこへ行くのか?
	1.18 練習問題

第1部 一般的計算モデル

第2章 宣言的計算モデル
	2.1 実用プログラミング言語定義
		2.1.1 言語の構文
		2.1.2 言語意味
	2.2 単一代入格納域
		2.2.1 宣言的変数
		2.2.2 値格納域
		2.2.3 値生成
		2.2.4 変数識別子
		2.2.5 識別子を使う値生成
		2.2.6 部分値
		2.2.7 変数の,変数への束縛
		2.2.8 データフロー変数
	2.3 核言語
		2.3.1 構文
		2.3.2 値と型
		2.3.3 基本型
		2.3.4 レコード手続き
		2.3.5 基本操作
	2.4 核言語意味
		2.4.1 基本概念
		2.4.2 抽象マシン
		2.4.3 待機不能な文
		2.4.4 待機可能な文
		2.4.5 基本概念再訪
	2.5 メモリ管理
		2.5.1 末尾呼び出し最適化
		2.5.2 メモリライフサイクル
		2.5.3 ガーベッジコレクション
		2.5.4 ガーベッジコレクションは魔術ではない
		2.5.5 Mozartのガーベッジコレクタ
	2.6 核言語から実用言語へ
		2.6.1 構文上の便宜
		2.6.2 関数(fun文)
		2.6.3 対話的インターフェース(declare文)
	2.7 例外
		2.7.1 動機と基本概念
		2.7.2 例外を持つ宣言的モデル
		2.7.3 親言語の構文
		2.7.4 システム例外
	2.8 進んだ話題
		2.8.1 関数型プログラミング言語
		2.8.2 単一化と内含(entailment)
		2.8.3 動的型付けと静的型付け
	2.9 練習問題

第3章 宣言的プログラミング技法
	3.1 宣言的とはどういうことか?
		3.1.1 宣言的プログラムの分類
		3.1.2 仕様記述言語
		3.1.3 宣言的モデルにおいてコンポーネントを実装すること
	3.2 反復計算
		3.2.1 一般的図式
		3.2.2 数についての反復
		3.2.3 局所的手続きを使うこと
		3.2.4 一般的図式から制御抽象へ
	3.3 再帰計算
		3.3.1 スタックの大きさの増加
		3.3.2 代入ベース抽象マシン
		3.3.3 再帰計算を反復計算に変換すること
	3.4 再帰を用いるプログラミング
		3.4.1 型の記法
		3.4.2 リストについてのプログラミング
		3.4.3 アキュムレータ
		3.4.4 差分リスト
		3.4.5 キュー
		3.4.6 木
		3.4.7 木を描画すること
		3.4.8 構文解析
	3.5 時間効率空間効率
		3.5.1 実行時間
		3.5.2 メモリ使用量
		3.5.3 償却的計算量
		3.5.4 性能についての考察
	3.6 高階プログラミング
		3.6.1 基本操作
		3.6.2 ループ抽象
		3.6.3 ループ言語的支援
		3.6.4 データ駆動技法
		3.6.5 明示的遅延計算
		3.6.6 カリー化
	3.7 抽象データ型
		3.7.1 宣言的スタック
		3.7.2 宣言的辞書
		3.7.3 単語出現頻度アプリケーション
		3.7.4 安全抽象データ型
		3.7.5 安全な型を備えた宣言的モデル
		3.7.6 安全な宣言的辞書
		3.7.7 資格セキュリティ
	3.8 宣言的でない必要物
		3.8.1 ファイルを伴うテキスト入出力
		3.8.2 グラフィカルユーザインタフェースを伴うテキスト入出力
		3.8.3 ファイルとの状態なしデータI/O
	3.9 小規模プログラム設計
		3.9.1 設計方法
		3.9.2 プログラム設計の例
		3.9.3 ソフトウェアコンポーネント
		3.9.4 スタンドアロンプログラムの例
	3.10 練習問題

第4章 宣言的並列性
	4.1 データ駆動並列モデル
		4.1.1 基本概念
		4.1.2 スレッド意味
		4.1.3 実行列
		4.1.4 宣言的並列性とは何か?
	4.2 スレッドプログラミングの基本的技法
		4.2.1 スレッドを生成すること
		4.2.2 スレッドブラウザ
		4.2.3 スレッドを使うデータフロー計算
		4.2.4 スレッドスケジューリング
		4.2.5 協調的並列性と競合的並列性
		4.2.6 スレッド操作
	4.3 ストリーム
		4.3.1 基本的生産者消費者
		4.3.2 変換器とパイプライン
		4.3.3 資源管理し,処理能力改善すること
		4.3.4 ストリームオブジェクト
		4.3.5 ディジタル論理シミュレーション
	4.4 宣言的並列モデルを直接使うこと
		4.4.1 順序決定並列性
		4.4.2 コルーチン
		4.4.3 並列的合成
	4.5 遅延実行
		4.5.1 要求駆動並列モデル
		4.5.2 宣言的計算モデル
		4.5.3 遅延ストリーム
		4.5.4 有界バッファ
		4.5.5 ファイルを遅延的に読み込むこと
		4.5.6 ハミング問題
		4.5.7 遅延リスト操作
		4.5.8 永続的キューアルゴリズム設計
		4.5.9 リスト内包表記
	4.6 甘いリアルタイムプログラミング
		4.6.1 基本操作
		4.6.2 ティッキング(ticking)
	4.7 Haskell言語
		4.7.1 計算モデル
		4.7.2 遅延計算
		4.7.3 カリー化
		4.7.4 多態型
		4.7.5 型クラス
	4.8 宣言的プログラム限界拡張
		4.8.1 効率性
		4.8.2 モジュラ性
		4.8.3 非決定性
		4.8.4 現実世界
		4.8.5 正しいモデルを選ぶこと
		4.8.6 拡張されたモデル
		4.8.7 異なるモデルを一緒に使うこと
	4.9 進んだ話題
		4.9.1 例外を持つ宣言的並列モデル
		4.9.2 さらに遅延実行について
		4.9.3 通信チャンネルとしてのデータフロー変数
		4.9.4 さらに同期について
		4.9.5 データフロー変数有用性
	4.10 歴史に関する注記
	4.11 練習問題

第5章 メッセージ伝達並列性
	5.1 メッセージ伝達並列モデル
		5.1.1 ポート
		5.1.2 ポート意味
	5.2 ポートオブジェクト
		5.2.1 NewPortObject抽象
		5.2.2 例
		5.2.3 ポートオブジェクトに関する議論
	5.3 簡単なメッセージプロトコル
		5.3.1 RMI(遠隔メソッド起動)
		5.3.2 非同期RMI
		5.3.3 コールバックのあるRMI(スレッド使用)
		5.3.4 コールバックのあるRMI(継続のためのレコード使用)
		5.3.5 コールバックのあるRMI(継続のための手続き使用)
		5.3.6 エラー報告
		5.3.7 コールバックのある非同期RMI
		5.3.8 二重コールバック
	5.4 並列性のためのプログラム設計
		5.4.1 並列コンポーネントを使うプログラミング
		5.4.2 設計方法
		5.4.3 並列性パターンとしての機能的構成要素
	5.5 リフト制御システム
		5.5.1 状態遷移図
		5.5.2 実装
		5.5.3 リフト制御システムの改良
	5.6 メソッド伝達モデルを直接使用すること
		5.6.1 1つのスレッドを共有する複数のポートオブジェクト
		5.6.2 ポートを使う並列キュー
		5.6.3 終点検出を行うスレッド抽象
		5.6.4 直列依存関係の除去
	5.7 Erlang言語
		5.7.1 計算モデル
		5.7.2 Erlangプログラミング入門
		5.7.3 receive操作
	5.8 進んだ話題
		5.8.1 非決定性並列モデル
	5.9 練習問題

第6章 明示的状態
	6.1 状態とは何か?
		6.1.1 暗黙的(宣言的)状態
		6.1.2 明示的状態
	6.2 状態とシステム構築
		6.2.1 システムの性質
		6.2.2 コンポーネントベースプログラミング
		6.2.3 オブジェクト指向プログラミング
	6.3 明示的状態を持つ宣言的モデル
		6.3.1 セル
		6.3.2 セル意味
		6.3.3 宣言的プログラミングとの関係
		6.3.4 共有と同等
	6.4 データ抽象
		6.4.1 データ抽象組織する8つの方法
		6.4.2 スタックの変種
		6.4.3 多態性
		6.4.4 引数受け渡し
		6.4.5 取り消し可能資格
	6.5 状態ありコレクション
		6.5.1 インデックス付きコレクション
		6.5.2 インデックス付きコレクションを選ぶこと
		6.5.3 その他のコレクション
	6.6 状態に関する推論
		6.6.1 不変表明
		6.6.2 例
		6.6.3 表明
		6.6.4 証明規則
		6.6.5 正常終了
	6.7 大規模プログラム設計
		6.7.1 設計方法
		6.7.2 階層システム構造
		6.7.3 保守性
		6.7.4 将来の発展
		6.7.5 さらに深く知るために
	6.8 ケーススタディ
		6.8.1 遷移的閉包
		6.8.2 単語出現頻度(状態あり辞書を使用する)
		6.8.3 乱数を生成すること
		6.8.4 口コミシミュレーション
	6.9 進んだ話題
		6.9.1 状態ありプログラミング限界
		6.9.2 メモリ管理と外部参照
	6.10 練習問題

第7章 オブジェクト指向プログラミング
	7.1 継承
	7.2 完全なデータ抽象としてのクラス
		7.2.1 例
		7.2.2 この例の意味
		7.2.3 クラスオブジェクト定義すること
		7.2.4 クラスメンバ
		7.2.5 属性初期化すること
		7.2.6 第1級メッセージ
		7.2.7 第1級の属性
		7.2.8 プログラミング技法
	7.3 漸増的データ抽象としてのクラス
		7.3.1 継承グラフ
		7.3.2 メソッドアクセス制御(静的束縛と動的束縛)
		7.3.3 カプセル化制御
		7.3.4 転嫁委任
		7.3.5 内省
	7.4 継承を使うプログラミング
		7.4.1 継承の正しい使い方
		7.4.2 型に従って階層を構成すること
		7.4.3 汎用クラス
		7.4.4 多重継承
		7.4.5 多重継承に関するおおざっぱな指針
		7.4.6 クラス図の目的
		7.4.7 デザインパターン
	7.5 他の計算モデルとの関係
		7.5.1 オブジェクトベースプログラミングコンポーネントベースプログラミング
		7.5.2 高階プログラミング
		7.5.3 関数分解と型分解
		7.5.4 すべてをオブジェクトにすべきか?
	7.6 オブジェクトシステムを実装すること
		7.6.1 抽象図
		7.6.2 クラスを実装すること
		7.6.3 オブジェクトの実装
		7.6.4 継承の実装
	7.7 Java言語(直列部分)
		7.7.1 計算モデル
		7.7.2 Javaプログラミング入門
	7.8 能動オブジェクト
		7.8.1 例
		7.8.2 NewActive抽象
		7.8.3 フラウィウス・ヨセフスの問題
		7.8.4 その他の能動オブジェクト抽象
		7.8.5 能動オブジェクトを使うイベントマネージャ
	7.9 練習問題

第8章 状態共有並列性
	8.1 状態共有並列モデル
	8.2 並列性を持つプログラミング
		8.2.1 さまざまな手法概観
		8.2.2 状態共有並列モデルを直接使うこと
		8.2.3 原子アクションを使うプログラミング
		8.2.4 さらに読むべき本
	8.3 ロック
		8.3.1 状態あり並列データ抽象を構築すること
		8.3.2 タプル空間(Linda)
		8.3.3 ロックを実装すること
	8.4 モニタ
		8.4.1 定義
		8.4.2 有界バッファ
		8.4.3 モニタを使うプログラミング
		8.4.4 モニタを実装すること
		8.4.5 モニタの別の意味
	8.5 トランザクション
		8.5.1 並列性制御
		8.5.2 簡易トランザクションマネージャ
		8.5.3 セルについてのトランザクション
		8.5.4 セルについてのトランザクションを実装すること
		8.5.5 トランザクションについてさらに
	8.6 Java言語(並列部分)
		8.6.1 ロック
		8.6.2 モニタ
	8.7 練習問題

第9章 関係プログラミング
	9.1 関係計算モデル
		9.1.1 choice文とfail文
		9.1.2 探索木
		9.1.3 カプセル化された
		9.1.4 Solve関数
	9.2 別の例
		9.2.1 数値例
		9.2.2 パズルとnクイーン問題
	9.3 論理プログラミングとの関係
		9.3.1 論理論理プログラミング
		9.3.2 操作意味論理意味
		9.3.3 非決定性論理プログラミング
		9.3.4 純粋Prologとの関係
		9.3.5 他のモデルにおける論理プログラミング
	9.4 自然言語構文解析
		9.4.1 簡単な文法
		9.4.2 この文法に従う構文解析
		9.4.3 構文木を生成すること
		9.4.4 限定記号を生成すること
		9.4.5 パーサを走らせること
		9.4.6 パーサを「逆向きに(backward)」走らせること
		9.4.7 単一化文法
	9.5 文法インタプリタ
		9.5.1 簡単な文法
		9.5.2 文法のコード化
		9.5.3 文法インタプリタを走らせること
		9.5.4 文法インタプリタを実装すること
	9.6 データベース
		9.6.1 関係を定義すること
		9.6.2 関係を使って計算すること
		9.6.3 関係を実装すること
	9.7 Prolog言語
		9.7.1 計算モデル
		9.7.2 Prologプログラミング入門
		9.7.3 Prologプログラムを関係プログラム翻訳すること
	9.8 練習問題

第2部 特殊化された計算モデル10グラフィカルユーザインタフェースプログラミング
	10.1 宣言的/手続き的方法
	10.2 宣言的/手続き的方法を使うこと
		10.2.1 基本的ユーザインタフェースの要素
		10.2.2 GUIを構築すること
		10.2.3 宣言的座標
		10.2.4 リサイズ時の宣言的振る舞い
		10.2.5 ウィジェットの動的振る舞い
	10.3 対話的学習ツールPrototyper
	10.4 ケーススタディ
		10.4.1 簡単なプログレモニタ
		10.4.2 簡単なカレンダウィジェット
		10.4.3 ユーザインタフェースの動的生成
		10.4.4 状況順応時計
	10.5 GUIツールを実装すること
	10.6 練習問題

第11章 分散プログラミング
	11.1 分散システムの分類
	11.2 分散モデル
	11.3 宣言的データの分散
		11.3.1 オープン分散と大域的ネーミング
		11.3.2 宣言的データを共有すること
		11.3.3 チケット配布
		11.3.4 ストリーム通信
	11.4 状態の分散
		11.4.1 単純状態共有
		11.4.2 分散字句的スコープ
	11.5 ネットワークアウェアネス
	11.6 共通分散プログラミングパターン
		11.6.1 静的オブジェクトモバイルオブジェクト
		11.6.2 非同期的オブジェクトデータフロー
		11.6.3 サーバ
		11.6.4 クローズド分散
	11.7 分散プロトコル
		11.7.1 言語実体
		11.7.2 モバイル状態プロトコル
		11.7.3 分散束縛プロトコル
		11.7.4 メモリ管理
	11.8 部分的失敗
		11.8.1 失敗モデル
		11.8.2 失敗処理の簡単な場合
		11.8.3 回復可能サーバ
		11.8.4 アクティブフォールトトレランス
	11.9 セキュリティ
	11.10 アプリケーションを構築すること
		11.10.1 まずは集中,後に分散
		11.10.2 部分的失敗に対処すること
		11.10.3 分散コンポーネント
	11.11 練習問題

第12章 制約プログラミング
	12.1 伝播・探索法
		12.1.1 基本的考え方
		12.1.2 部分情報を使って計算すること
		12.1.3 例
		12.1.4 この例を実行すること
		12.1.5 まとめ
	12.2 プログラミング技法
		12.2.1 覆面算
		12.2.2 回文積再訪
	12.3 制約ベース計算モデル
		12.3.1 基本的制約と伝播子
		12.3.2 計算空間の探索をプログラムすること
	12.4 計算空間定義し,使うこと
		12.4.1 深さ優先探索エンジン
		12.4.2 検索エンジンの実行例
		12.4.3 計算空間の生成
		12.4.4 空間の実行
		12.4.5 制約の登録
		12.4.6 並列的伝播
		12.4.7 分配(探索準備)
		12.4.8 空間の状態
		12.4.9 空間クローン
		12.4.10 選択肢を先に任せること
		12.4.11 空間マージすること
		12.4.12 空間失敗
		12.4.13 空間計算を注入すること
	12.5 関係計算モデルを実装すること
		12.5.1 choice文
		12.5.2 Solve関数
	12.6 練習問題

第3部 意味

第13章 言語意味
	13.1 一般的計算モデル
		13.1.1 格納域
		13.1.2 単一代入(制約)格納域
		13.1.3 抽象構文
		13.1.4 構造的規則
		13.1.5 直列実行と並列実行
		13.1.6 抽象マシン意味との比較
		13.1.7 変数導入
		13.1.8 同等性の強制(tell)
		13.1.9 条件文(ask)
		13.1.10 名前
		13.1.11 手続抽象
		13.1.12 明示的状態
		13.1.13 by-need同期
		13.1.14 読み出し専用変数
		13.1.15 例外処理
		13.1.16 失敗値
		13.1.17 変数置き換え
	13.2 宣言的並列性
		13.2.1 部分停止と全体停止
		13.2.2 論理同値
		13.2.3 宣言的並列性の形式的定義
		13.2.4 合流性
	13.3 8つの計算モデル
	13.4 よくある抽象意味
	13.5 歴史に関する注記
	13.6 練習問題

2011-09-02

http://anond.hatelabo.jp/20110901202938

「きちんとしてる」というのは「利益追求してる」という意味で書いた。

使い勝手は得てして細かい部分の作り込みで決まる(ドライバがきちんとあるかとか例外処理とか)けど、

そういうところを作り込むにはそれなりに金と労力がかかるもので、その点オープンソースlinux

どうしても弱い部分があると思う。

その辺にきちんと手が届いてるのはやっぱり企業が作ってるからであって、そういう意味で「きちんとしてる」と書いたよ。

囲い込みだのどうのは企業戦略の問題で、作り込み云々とはまた全然別の次元の話だと思う。

2011-02-03

個人の尊重なんてバカげてる

属性で決めるべきだ。

大卒大卒としての資質があるから大卒なのだ。

中卒が「俺を評価しろ」だのと泣き言を抜かす様は滑稽。

ならば社会的に評価されるべきポジションになぜ身を置かない。他の評価されている人間はみなそうしているぞ。

お前だけ例外処理するほど社会は甘くないぞ。

2010-10-21

http://anond.hatelabo.jp/20101021002540

新しい人が定着しないんだ。一番長い人で5年くらいか。パパにお金出してもらって開業した社長の下,マニュアルなし,例外処理クレーム多数の職場。もちろん,俺も逃げる。

最近銀行の人がよく来る。多分,後ろ向きな話か,実家投資話をしてる。

2010-07-11

仕事を教えるときにやってはいけない7つのこと

なんかと、関係があるかと思ったけどよく考えたらあんまりない話。「ジョブコーチ入門」という本に載っている、仕事を教えるときにやってはいけない7つのこと。

1.教える人が手順を理解していない。

Aを起動させて、えっと、それから何をやるんだったかな……

2.手順がころころ変わる。

まずAを起動させて……いや、まず例外処理がないかどうかBを見ておくんだった、あ、でもBを見たってたいてい例外処理なんてないしなぁ。うーんと、ま、とりあえずBを先に起動させておく、ってことで。

3.人によって教え方が違う。

よし、まずCのチェックからだ。え、昨日の人からはAを先にって教わった? いや、今日は俺のやり方を覚えてもらうから。

4.言葉が多すぎる。

この花びらをひとつずつお皿の上にのせていくんだ。やってみて。……雑すぎるよ、もっと丁寧に。少し下、あ、ちょっと右だな、一つ一つ注意して……

5.説明がなく、やり方を見せるだけ。

今からやってみせるから、後でまねしてみてね。……(5分無言)……はい終了。ね、簡単でしょう?

6.否定的な言葉が多く、ほめない。

違う違う、そうじゃないったら。まったく、何回言ったらわかるんだか。

7.ほめ方が漠然としていて具体的でない。

おお、いいねいいね。こないだよりずっといいよ……

2010-05-21

http://anond.hatelabo.jp/20100520221607

ゼロ割を気にする程度の細かさで済めばいいんですけどね…。

俺は計算したいだけなのにIOとか効率性とかいちいち考えないといけないのが苦痛で仕方が無い。

環境によって動いたり動かなかったりするのも面倒臭い。そんな細かい違いはどうでもいいだろって感じです。

細かい例外処理も面倒ですね。ゼロ割も含まれるかもしれないですが…。

基本的な考え方は作ったから後の細かい作りこみはやっといて、っていう感じがいいです。

2010-03-28

新人プログラマのみなさんへ

そろそろ四月ということで、職業としての「プログラマ」になる方も、はてな界隈では多いでしょうか。なにはともあれおめでとうございます。マの世界へようこそ。私も4月になるので、心機一転頑張りたいなと思い、働いて学んできたことや言われてきたことなどをつらつらと書き出します。

仕事のこと::簡単な目標

仕事ルールはたくさんあります。その中で座右の銘ではありませんが、指針となるような一つ目標があるといいでしょう。私が念頭に置いているのは「三年後に気持ちよく転職できるようにする」ということです。結構移り気が激しいタイプなんですよね。でも人には嫌われたくないという。「気持ちよく」というのがポイントで、会社を「気持ちよく」辞めて転職するのは今までに辞めていった先輩をみていてもなかなか大変そうです。「気持ちよく」辞めるための仕事術を「上司」「同期」「後輩」「自分」という点であげてみました。大切なのは「気持ちよく転職できるようにする」ために周りの人を気遣いそれを示すことで「あいつはよく頑張ってくれた」「次も頑張ってもらいたい」「また一緒に仕事をしたいな」と思ってもらい惜しまれつつ転職できるようにすることです。

仕事のこと::上司・同期

進捗報告 タスク/終了予定日/発生している障害 を上司等に送りましょう

あなたの上司仕事全体の進捗の管理メンバーの割り振りを考えます。そのために各人に割り振った仕事の進み具合や仕事量に無理がないかを把握する必要があります。あなたはそれを考えて、自分が行っているタスクの状態をきちんと上司に報告しましょう。現状に無理があるようなら、その状態と代替策を上司に相談しましょう。

何か質問する時や意見をする時は自分なりに答えをもって質問しましょう

大抵の人は忙しいのと、別の問題で頭を使っているため、きっとあなたが頭を悩ませて質問したいと思っている、その特定の問題について、あなたほど深く考えていないでしょう。そんな時にただ質問も投げられても、相手も一から考えてしまうので、お互いに負荷が高くなってしまいます。それで相手のことを考えて、技術的な質問や方針などの相談の際には質問の後に「こうしてみようと思う」「この点が問題なのでこうすれば解決するはず」など、それなりに自分の答えをもって、質問や意見をすべきです。そうすれば相手もそれをベース自分意見経験を考えながら伝えることが出来るため、あなたの質問に答えることがそれほど重荷ではなくなります。

笑顔で働く

楽しく笑顔で働きましょう。笑う門には福来るではないですが、多くの人は笑顔に惹き付けられるものです。また上司も基本、自分の舵取りでメンバーが楽しく仕事出来ていると思いたいものです。それに応えましょう。

仕事のこと::同期・後輩

「引き継いだ人のために」会社ルールに沿ったプロダクト作りをする

会社には多くの場合コーディングルールドキュメント規則があります。「こうしたほうが早いのになあ」とか「こんなのクールじゃない」とか考えることもあるでしょうが、ルールに従いましょう。3年後に後輩に「ここはクールじゃなかったらこうした」と説明するのは大変ですし、きっと3年もたてば、その「クール」も変わっているはずです。もしどう考えても効率が悪いようなら会社ルール自体の改善を訴えましょう。

「引き継いだ人のために」ドキュメントをのこしておく

上と矛盾するようですが、急ぎ仕事(こればかりやる会社もある)をやる場合は、ドキュメント不要ということもあります。そんな場合でも最低限の仕様等のドキュメントの記録を残しておきましょう。引き継ぐ後輩に口頭で伝えるのは手間というより、忘れている部分も増え、伝言ゲーム状態になります。これは、人日を割当られていないのにやるわけですから、ちょっと大変ですが、意識しておきましょう。

「引き継いだ人のために」仕事の進め方を記録しておく

自分がどう考えて、どう上司とやり取りをしていたかを簡単な記録でいいので毎日つけましょう。将来の後輩が見た時にきっとそれが、励ましや何かのヒントになるはずです。

仕事のこと::自分

失敗を恐れない

自分についてはこのひとつだけ。失敗をしないのは仕事をしない人だけです。三年後にはどうせ転職するのですから、失敗をおそれずルールを守りながらも常に新しい何かを探して創りだしていきましょう。そうすれば転職の際に自分はこういう挑戦をしてきたという自信が出来ますし、以前の会社で思い切れば未練なく辞めることが出来ます。

失敗は怖いですが、それを少し減らす方法として「失敗を想定する」プログラマ的に言えば「例外処理」を考えておくというのがあります。人はわからないものは怖いですが、失敗した、間違いを犯した場合はこうすればいい、最悪こうなるということがわかっていれば、その恐怖は減るものです。そしてその「例外処理」を書きおわったなら、明日のことを考えて、思い悩むのは辞めて、その日、その日の仕事を頑張りましょう。

勉強のこと

仕事の進め方について書いてみましたが、冒頭でも述べたように、プログラマは一サラリーマンである以上に一職人です。プログラムについての勉強を常にしましょう。勉強会社をやめても人を裏切りません。プログラム言語についてはもちろんですが、それだけではありません。仕事をしているとついつい忘れがちになりますが、基本的なデータ構造アルゴリズムデータベースの仕組みやネットワークの仕組み等の計算機科学を知っておくことが大切です。またプログラムの組み方については、デザパタエンタープライズアーキテクスチャパターンなどを知っておくと仕事をすすめやすいでしょう。

私のおすすめは「勉強会駆動勉強」です。何か勉強したいな、身につけたいなあと思うことがあったら、それをテーマに近くのコミュニティ勉強会の発表申し込みをします。人に教えようとすると自分のものにしなければいけませんから必死に勉強します。するとその知識が身に付くのはもちろんこと、その分野について詳しい人と周りに思ってもらえるかもしれず、また第一人者からアドバイスを受けることもできます。なかなかの一石三鳥です。

勉強のことについて、最初と逆になりますが私たちは一職人ですが一サラリーマンです。ハッカーといえど、社会人としての基本的な知識である英語数学経済学をおさえておきましょう。経済学感覚とは違う部分で社会が動いていることがわかり、おもしろいです。私のおすすめは「スティグリッツ入門経済学」ですね。また習慣として毎日のニュース日経)や週ペースの経済雑誌東洋経済等)を読んで、基本的な現代経済をおさえておきましょう。自分仕事社会の目から客観的におさえることが出来ます。

生活のこと

最後に。仕事のことや勉強のことをたくさん書いてきました。しかし、仕事最適化しても人生はおもしろくありません。運動を適度にし、自分趣味を見つけて興味を持ち(私はアニメラノベ読み)、いろいろなことを学んで、楽しみながら人生を過ごしましょう。

ログイン ユーザー登録
ようこそ ゲスト さん