「成プロ」を含む日記 RSS

はてなキーワード: 成プロとは

2019-11-09

anond:20191108201518

清掃員じゃないけど、放置自転車撤去する作業員主人公映画なら知っている。

若手映画作家育成プロジェクトLife Cycles(真田 幹也監督)。

期待せずに見たが面白かった。

2019-07-27

(Web)エンジニア転向について

知り合いと飲んだら、過去の私と同じような状況であの日々を思い出して吐き出したくなった。

当時私が参加していたチーム・プロジェクトは美味しそうなFWを使っていた。

サーバサイドのエンジニアは片手ほどの人数で、採用時点でそのFW経験があることを確認されていたし、別チームから転属してきたメンバーも何らかのMVCWSGIFW経験があり、わりとサクッと順応していた。

前職では業界経験だったり、経歴を盛っていると思われるエンジニアもどき仕事していたので、普通に公式ドキュメントを読み、FWソースコード確認することができる同僚との仕事はおもりがなくなったようで気楽だった。

3年前の夏、サーバサイドのチームに新人のN氏が加入した。新人と言っても別チームから来た年上の業界経験豊富インフラエンジニアである

プロジェクトクラウド化や縮小が当時の1年半ほど前から進んでいて、社内のインフラエンジニアはSREに名前を変えるような流れがあった。(実際にはインフラミドルウェアネットワークに長けた彼らは相変わらずそれなりに仕事があったようだが)

その流れの中でN氏は、サーバサイドエンジニアをしてみようと決めたらしい。転向については1年前から部長相談していたとのことだった。しかも、うちのチーム名指しで。これはちょっとしかった。

さっそく、N氏には社内向けの新機能担当してもらい、私がレビュー担当になった。

これがなんというか読むのが辛かった。確実に言えるのはチュートリアル絶対やってないということだった。

機能は満たすが、FWの書き方やお作法については部分的にググった結果がパッチワークされているような。

社内の各チームのアーキテクチャエンジニアならだれでも知っていた、つまりN氏は知っていながら特に準備なしでやってきたわけである

そこから始まる、レビューを通した実プロダクトを使ったチュートリアル。褒めるとこは褒めて、受け入れられないところは参考になる実装ドキュメント提供する。

はじめからチュートリアルを一緒にこなした方が良かった。レビューで大幅に書き換えてもらうのは結構辛い。勿論プロダクトに使えるレベルコードじゃないから仕方ないんだけど。

しかもN氏、臭いである。脂汗を吸った服、毎日履いてくるジーパン、脱いだのが瞬時にわかるほど臭う靴。

当時は Visual Studio Live Share なんて無いし、ペアプロは5分で限界だった。

がっつり書き直しが入るようなコード卒業には2ヶ月ほどかかった。(これは私が時間を十分にとれなかったのも悪かったし、N氏は前のチームの引継ぎ作業も並行していたので)

もう、色々思い出して悲しくなったから書いとくと

ちなみに知り合いのところは、最近の天気のせいなのか生乾き臭マックス縁故入社新人とのことで、当時彼にしてもらったように「ガンバ」と背中叩いておいた。

N氏は今も臭っているようだが今は別プロジェクトだ。スキルセットが増えている分、頼れるエンジニアに近づいたのかな。喉元過ぎればなんとやらで、忘れていた。

最近は私が別チームから支援できた若手のフロントエンドエンジニアレビューしてもらっている。

チュートリアルこなして、書籍記事を読んで手を動かしたうえで相談をしながら実装を進めている。あんまりものは見せられない。

新しいスキルセットは必要になる。

人に教えておらうにも、ある程度は自分勉強しないと適切な質問が出来ない。

ある程度が分からないなら、公式資料書籍、有志のページを当たろう。

2019-06-14

大学研究力が衰退したたった1つの理由

先に結論を書く。

大学研究力が衰退した最大の理由は「教育改革である予算の減少が最大の理由ではない。

教育改革をやめれば、予算を増やさずとも研究力は向上する。

もっと平易に書けば、

教育を頑張りすぎたか研究力が落ちたのである

教育には手を抜いて、研究に力を注ぐべきである

過去研究成果が現代ノーベル賞受賞に結び付いている理由を端的に言えば、

「昔は教育適当にやっていたから」であり「時間たっぷりあったから」である

今は、産業界から圧力で様々な教育改革が強烈に進められている。

皮肉なことに、どんなに教育に力を入れて優秀な人材を育てても、その能力を十分に活かすだけの場所が今の産業界(とくに経団連)には存在しない。

そんなことは「退職しました」系のエントリでも読めば明らかだ。

改めて言うまでもないが、大学教員が持つリソースは有限である

教育リソースを割けば、その分、研究に割くリソースが減る。

各種の統計データから明らかになった我が国大学研究力の凋落は、教育に力を注ぎ過ぎたためである

今や経済界から圧力によって、グローバル教育、実務教育大学改革入試改革、成績評価厳格化、はてはAI人材育成と、

研究以外のことにエネルギーを投じてきた結果が今の惨憺たるありさである

どれだけ教育改革を進めようが、そこに終わりがないことは、現在の小中学校先生方の疲弊ぶりを見れば明らかである

道徳教育英語教育プログラミング教育、その他もろもろ、際限なく要求が出され、現場疲弊しきった今の小中学校は、文科省に振り回される国立大学の行く先を示している。

この根源となっている、助成金を餌にした教育改革競争文部科学省は今すぐやめるべきである

例を挙げよう。

文部科学省が立ち上げる奇異なプログラムは数多くあるが、

そのなかの1つ「平成31年度卓越大学プログラム」の申請状況を見るといい。

https://www.jsps.go.jp/j-takuetsu-pro/data/shinsei_jyokyo_31.pdf

大学提案しているプログラム名称をいくつか抜粋しよう。

東北大学システムインテグレーションを基盤とする社会実装イノベーション卓越大学プログラム

山形大学ソフトマターインダスリー創成スマートシステム卓越大学

筑波大学)138億年の進化相転移に学ぶダ・ヴィンチ人材成プログラム

千葉大学アジアユーラシアグローバルリーダー養成のための臨床人文学教育プログラム

信州大学ファイバー工学と異分野融合が織りなすスマート生活創造者育成プログラム

名古屋大学情報生命科学コンボリューション on グローカルアライアンス卓越大学

大阪大学)多様な知の協奏による先導的量子ビーム応用卓越大学プログラム

神戸大学メディカルバリュクリエーター成プログラム

今の大学の混迷ぶりを如実に示している。

こんな意味不明プログラム名称を掲げて、組織運営をいじり倒すことにどんな意味があるのか。

助成金欲しさのために、東大京大をはじめとするが一流大学たちが教育改革ごっこを強いられているのである

嘆かわし限りだ。

経団連の偉い人が言うように、大学レジャーランドで構わない。

これだけ教育改革が進んだ今でもレジャーランドと言われるのだから、いっそ昔の状態に戻すのがよい。

勉強したくない学生は、授業料だけ払って遊んでいればいいのである

そんな中で作り上げる人的ネットワークにも、自己と向き合う時間にも十分価値があるだろう。

勉強したい学生には、今の大学は十分に学べるだけの環境が整っている。

各分野の専門を極めた大学教授陣に意味のない教育改革ごっこをさせるよりも、研究に専念する時間を与えるべきである

柴山昌彦文部科学大臣には、上記の内容を是非読んでいただきたい。

2018-12-29

小説を書くこと、がかなり流行し始めている

メソッド本や自動成プログラムリリースするなら善は急げだぞ

しか若者だけじゃなくてかなり上のおっさんじいさんらも食いついている

女性向け雑誌でも書き方指南特集とかそのうち始まる

おこもりプレイスみたいなのが引く手あまたになる

文具やツール売れ筋になる

発表サービスを上手く作ったら必ず儲かる

平成の大体の流行を当ててきた俺が言うのだから間違いない

文章に対する文章通貨がわりになる世界が来る

2018-10-04

anond:20181004014847

AIってより、深層学習/機械学習を使って創作物成プログラムを書く科学者(or プログラマ)が、彼らの仕事を奪っていくと言えよう。

生成された創作物さらに、人力で修正を加えてクオリティを高める、という方向性もあり得るが、消費者プログラム生成物で満足してしまった時点で、成立しなくなってしまう。

 

プログラム積極的使用した新ジャンル開拓もあり得るが、これはプログラム化されイタチごっこになる可能性はある(しか上記パターンよりまし)。

創作行為自体はなくならないと思うが、消費とどうリンクさせるかは、変化の波に飲まれていくと思う。

by創作

2018-06-02

プログラミング勉強を始めて一年経ちました

その割には成果物がショボくて泣けます

そんな底辺の、プログラマとも呼べない微妙立場の俺からベテランプログラマのみなさまに質問です

最初言語は何を選びましたか

Excel VBA

てか当時は勤務先でそれしか使われてなかったので選択肢無かったです

最初一年間でどんな成果物を上げましたか

時間計測マクロ

あとはVB.NETの既成プロダクトのちょっとした編集が数件…

現在プログラミング歴何年目で、どんなプロダクトに携わっていますか?

2年目です

時間の計測を幅広い業務に当てはめて、今までの実績からいつその業務が終わるかを予測表示するシステムを考えています

考えてるだけで半年くらい経ってます

もうちょっとちっちゃいことからやろうかなーとも考えてます

勉強中の言語技術はありますか?

C#勉強しようか悩んでます

あと、勤務先にgitを導入できないかなーと模索中です

どんなプログラマを目指していますか?あるいはあなたの考える理想プログラマとはどんな人ですか?

さっさと生涯分の収入稼いで悠々自適生活送りたい

お金さえ稼げればなんでもいいです

コスト管理のできるプログラマ理想です

質問は以上です

よろしくお願い申し上げます

2018-05-10

元Jクラブスタッフからえとみほさんへ

先日えとみほさん(@etomiho)が栃木SC入社したツイートnoteを拝見して、元Jクラブスタッフからメッセージです。

個人的には、えとみほさんのような発信力を持った人がJクラブ内に入ってくれたことが嬉しいし、

Jクラブの内部から会社を発展・成長させていくことは、非常に大変で難しさも伴うことですが、頑張ってほしいなと思う。

物事ゴリゴリ進めていく推進力のある人が、そのクラブの成長とともにナレッジノウハウ成功事例としてどんどん発信していくことがこれから日本サッカー界には必要だと思うから

本当は自分がそのような役割を果たしたかったのですが…。

実は私自身は、とある2つのJクラブで働いた(約4年と約2年)経験があるのですが、このまま5年〜10年Jクラブで働いたとしても私及びクラブの双方が幸せになる未来が見えず、1年前ほどにサッカーから離れる決断しました。

現在は、サッカーとは全く違う業界で働いていますが、

日本サッカー界をビジネスサイドの内側から変えていきたい、発展に貢献したいと志を持っていたとき(いまもその気持ちは捨ててないですが)に感じたことをシェアし、今後の栃木SCの発展に少しでも活かしていただければと思い、匿名ではありますがこの度ブログ記事を書かせていただきました。

(どうか、えとみほさんに届け!)

このブログで伝えたいことは、2つ。

1. 残念ながら現在のJクラブ労働環境スーパービジネスパーソンでない限りJクラブスタッフとしてビジネスサイドの発展に貢献することはまだ難しい状況であると私は考えているということ

2. そのような状況を打破するためにも、えとみほさん含む現在Jクラブで働いている人たちには頑張ってほしいということ

私は(これは私がサッカー界を離れた理由でもありますが、自身ビジネススキル不足もさることながら)現在のJクラブ労働環境スーパービジネスパーソンでない限りJクラブスタッフとして、ビジネスサイドの発展に貢献することは、チャレンジングな仕事であるがまだまだ難しい状況にあると考えています

私は、新卒入社から約6年間Jクラブで働きました。日本サッカー界をビジネスサイドの内側から変えていきたい、発展に貢献したいと志を持っていました。しかし、このまま5年〜10年Jクラブで働いたとしても、私及びクラブの双方が幸せになる未来が見えず、サッカーから離れる決断しました。

それが1年前。

サッカークラブで働き、内側から改革していくにはまだ難しい状況にある。そう思った理由としては、以下の2点からです。

(ⅰ)Jクラブは熱を持った優秀なビジネスパーソンが圧倒的に足りないため

(ⅱ)優秀なビジネスパーソンを受け入れる環境が整っていないため

※それぞれ(ⅰ)、(ⅱ)について中島涼輔さん(@nakaryo716)というSHC4?期生がブログに書かれていたことと重なるので、こちらもご参照ください。実際私は新卒としてJクラブ入社しましたが、中島さんが言う「新卒でJクラブに入るのはおすすめしない」に同意見です。

https://sosal.me/blogs/358/

3ヶ月間SHCの研修コースに通って分かった、『Jリーグ』の今 - ソーサル|個人参加型フットサル(個サル)の新しいカタチ

https://sosal.me/blogs/359/

新卒が『Jクラブ』に入社してはいけない理由。 - ソーサル|個人参加型フットサル(個サル)の新しいカタチ

(ⅰ)について(Jクラブは熱を持った優秀なビジネスパーソンが圧倒的に足りないため)

Jリーグができて25年が経ち、全国各地にJクラブJリーグ百年構想クラブ誕生し、普及の意味では世界的に見ても大成功歴史を作ってきたと思います

ただし、普及ではなくJリーグ及びJクラブ事業と強化としては、これからが本番だと私は思っています

J1のクラブであれば、これから本気で事業規模100億円を目指すクラブも出てくるでしょうし、プレーオフ圏内を目指すJ2クラブであれば事業規模18億円から22億円かつ平均観客動員数1万人〜1万2千人、J3クラブであれば、J2ライセンス取得と事業規模10億円前後かつ平均観客動員数6千人がむこう5年の目標レンジでしょうか。

クラブによって現在立ち位置地域経済圏のことなどもあり、目標はそれぞれだと思いますが、Jクラブ事業サイドは基本的に「どうやって協賛金(スポンサー料)引っ張ってくるか」と「どうやって観客動員数増やしてチケット収入やすか」の2つが最重要ポイントです。

(もちろんチームの成績やスター選手がいる等でもこれらの数字は変わってきますし、もっともっとJリーグ全体の事業規模が大きくなり魅力的なリーグになれば欧州リーグのように放映権もより大きな収益の柱となります

その最重要ポイント収入2つを伸ばすためにより人材必要になってくると思いますが、私の経験からするとJクラブに熱を持った優秀なビジネスパーソンが圧倒的に足りないと感じています

まず私が実際に入社してから在職中に社内の状況でびっくりしたことを以下箇条書きしてみます

  • 意味のない会議発言しない出席者が無駄に多く、何を決めるかがハッキリしていない会議)が多い。会議も開始時間が予定より5分以上遅れることは当たり前。アイデアを考えてくる会議でなにも考えてこない人がいることが多々あるし、考えてきたとしても「それ会議10分前にちょろっと考えたやつだろ」というぐらいのペラペラアイデアを平然と出してくるし、次回からちゃんと事前準備をして考えてきてくださいと注意しても改善されない。
  • 日々の業務で忙しいせいもあり、なにか新しいことをやろうとしても「私の仕事を増やすな」とみな他人事で非協力的。言い出しっぺが指示だけして現場や部下に丸投げパターンが半数以上を占めることも・・・

フォローしておくと、社員一人ひとりは本当にいい人ばかりですし、やっぱりクラブのことが好きなんだなと感じることも多々あります。ただ、それならクラブファンでいればいいことですし、クラブの発展のために働く社員としてはどうなの!?ということでびっくりしたことを箇条書きさせていただきました。

もちろん、全てのクラブがこのような状況ではないと思いますし、有名な大企業でも上記のような状況は多々あると思います

しかし、Jクラブはどこも中小企業であり、社員数も50人以下のクラブほとんどです。

そのような中小企業生産性のない人ばかりでがっかりした思いがいまでも蘇りますし、いつの間にか自分の中にあった「このクラブをよりよくしたい」という想いもしおれて、知らないうちに自身ビジネスパーソンとしての成長も阻害されてる状況になってる気がして泣けてきます

なお、Jリーグ人材不足問題認識しており、SHCというスポーツエグゼクティブ成プログラムを2014?年からスタートさせ(それ以前にはJFA主催のSMC講座もあった)、Jクラブに優秀なビジネスパーソンを送り込むような動きも見せていますが、依然としてJクラブ現場に優秀なビジネスパーソンは極端に少ない印象です。

逆に優秀なビジネスパーソンがトップ層にいる(いた)クラブは着実にチーム成績も含めて事業規模を拡大しているイメージです。

具体的にクラブ名を出すと、札幌(野々村さん)、いわき大倉さん)、鹿島(W鈴木さん)、川崎天野さん)、湘南(眞壁さん)、岡山木村さん、小川さん)、今治岡田さん、矢野さん、中島さん)、長崎(髙田さん)などなど。

いま名前が出たある人と少しお話をさせていただいたこともありましたが、その人は「上に立つ人間仕事組織が自走するような雰囲気作りが全てだ」と話しており、やっぱり上に立つ人間クラブも変わってくるのかなとそのとき思いました。

(ⅱ)について(優秀なビジネスパーソンを受け入れる環境が整っていないため)

ズバリ言うとおカネのことです。Jクラブスタッフ給与水準やりがい搾取レベルで低いです。

新卒のJクラブスタッフ給与について中島涼輔さんのブログにも記載されていますが、まず間違っていないと思います。大きな責任企業を持つクラブは、少し違うかもしれませんが、責任企業を持たない地方クラブ場合は、新卒年収は200万〜250万くらい。5年から10年働いている35歳前後の人の年収が300万円に満たないことも多々あると思います

※このことはFC今治経営企画室長 中島啓太さん(@keitanakajiman)もTwitter言及し、危惧していました。

選手に当てはめてもいえますが、いい人材には、高い給料がついてくるものです。

しかし、ことクラブスタッフに関しては、欠員が出たら募集は掛けるが、いい人材を自ら探して引っ張ってくるということはほぼないのではないでしょうか。

役員以下の役職あるJクラブスタッフに800万〜1000万円級の給与を払っているクラブはまずないはずです。逆に800万〜1000万級の人材ガンガン入れたからこそ横浜DeNAベイスターズは急成長したのかなと。池田純さんは経歴見ただけでこの人すごい感あるし、東北楽天ゴールデンイーグルス立ち上げには小澤隆生さんがいた)

中途で入社してくる人も前職より給与アップして入社したというのはほぼないと思います

例え給与が下がったとしてもクラブで働いてみたい人は多いので、会社スタンス人材におカネをかける意識が低いですし、人が辞めても安月給で働きたい人はたくさんいるから育てる意識そもそもない。

このような意識になった要因としては、クラブスタッフは忙しく(担当部署にもよりますが)業務内容も生産性が求められるものより週次の試合に向けた日々のオペレーション業務ほとんどだったからではないかなと思います

しかし、ここ数年はSNSも普及しましたし、スタジアムを中心としたまちづくりを目指すクラブも出てくるなど、仕事内容的にもより優秀な人材が求められてきていると思いますが、クラブスタッフが本気でそのことに気づいていない。もしくは業務に追われて人材組織)強化まで手が回らないんだと思います

事実クラブ事業側のトップである社長の半数以上が在任3年未満となっており、現場チームのトップである監督が変わることが多々あるにも関わらず、その現場を支える事業側のトップもすぐ変わって、事業戦略がコロコロ変わることも残念ながら現状としてありますクラブスタッフスムーズ仕事が回るよう努力しても事業現場トップが変わることが何度も続いて、その度に事業方針や強化方針が変わるとせっかくやってきた業務効率化が役に立たなくなり、忙しさのループから抜け出せないクラブが少なくないと思います

※なお、事業規模が成長したとしてもすぐにクラブスタッフ給与への反映はあまりされません。その分、チームの強化費や強化運営におカネがまわります。チームの強化費と成績はある程度の相関関係にあるからです。魅力的なチームを作り→成績が上がり→観客動員数が増え→売上を伸ばしまたいい選手を獲得して→魅力的なチームを作る好循環を狙いますが、強化費を上げた結果チームの成績が上がるとは限らないのがサッカークラブ経営していくうえでの難点(かつおしろいところ)です。

また、クラブスタッフは日々忙しいあまり、他のことに手を出す余裕がありません。(私が在職中にきつかったことは、まさにこのことです)

J2J3クラブ場合は、担当部署複数兼務することはごくごく普通にあります

忙しいあまりに本を読む時間も取れませんし、(給与が低いため)本を買うこともほとんどなくなりました。代わりに月に1度図書館に行ったり一番大きい本屋立ち読みできれば上出来なぐらいです。都市圏クラブであれば違うかもしれませんが、地方クラブだとほとんど金銭的・時間的・地理的理由で他のことに手を出す余裕がありません。他スポーツ勉強として観戦することはもちろんできず、地方都市では開催されるイベントの質と量ともに比べものにならないですし(これも担当部署にもよりますが)基本まとまった休みも取れないので家族旅行も難しいでしょう。

このようにおカネもない、休みもない環境だと、いくらやりがいを感じていても辞める人(もしくはより事業規模の大きく給与も高い他クラブステップアップ移籍)が続くのも納得できると思います

以上、ざーっと書かせていただきましたが、

Jクラブは熱を持った優秀なビジネスパーソンが圧倒的に足りないことと優秀なビジネスパーソンを受け入れる環境が整っていないため組織として弱い会社クラブ)が多く、内部から改革はめちゃめちゃ難しい状況にあると私は思います

ただ、(無茶言うなと言われるかもしれませんが)難しい状況だからこそ、えほみほさんはじめ現在Jクラブスタッフとして一生懸命働いている人たちにはどうか頑張ってほしい。そしてこの状況を変えていってほしいです。

最後・・・

つらつらと在職中に感じていたことを書かせていただきましたが、仕事としては非常にチャレンジングでやりがいは間違いなくあります

私も自身金銭的余裕ができてビジネスパーソンとして「いまならお役に立てるかも」と思えたら再度挑戦したい気持ちはあります

私自身は、引き続きサッカー界にアンテナを立て続ける予定ですので、「イニエスタJリーグにくるかも!?」を超すような事業側のニュースが出てくることを楽しみにしています。今後のJリーグの成長を考えると村井さんや木村さんなら「外資オーナーOK!」ぐらいのことはやると思ってますし、アジアで一番のサッカーリーグになっておらが町のクラブとしてたくさんのクラブが町の誇りであり続けることを祈っています

2007-07-12

迷路成プログラムVC++2005でやってみた。

http://anond.hatelabo.jp/20070711013155 こちらの宿題を作ってみました。

http://anond.hatelabo.jp/20070711080519 で参加を宣言した者です。

#include "stdafx.h"
#include <time.h>
#include <conio.h>
#include <list>

using namespace std;

enum MMError {
	MME_None = 0,
	MME_SizeError,
	MME_MemoryAllocError,
	MME_NotInitialized,
};

enum MMKind {
	MMK_None = 0,
	MMK_Space,		// 通路
	MMK_Filled,		// 埋まってるところ。掘れる。
	MMK_Wall,		// 壁。掘れないところ。
};

//
// 迷路実体管理用クラス定義
//
class CMazeMatrix
{
public:
	CMazeMatrix();
	virtual ~CMazeMatrix();

public:
	virtual bool	Initialize(int nXSize, int nYSize);	// 初期化すると同時に、外壁まで作ってしまう。
	virtual MMKind	GetAt(int nXPos, int nYPos);
	virtual bool	SetAt(int nXPos, int nYPos, MMKind kind);

	MMError	GetLastError() {return m_lastError;}


protected:
	inline	int calcIndex(int nXPos, int nYPos) {return nYPos * m_nXSize + nXPos;}
	bool	finalize();

protected:
	MMKind	*m_pMaze;
	int		m_nXSize;
	int		m_nYSize;

	MMError	m_lastError;
};

//
// 実体管理用クラス実体
//
CMazeMatrix::CMazeMatrix()
{
	m_pMaze = NULL;
	m_nXSize = 0;
	m_nYSize = 0;
	m_lastError = MME_None;
}

CMazeMatrix::~CMazeMatrix()
{
	finalize();
}


bool CMazeMatrix::Initialize(int nXSize, int nYSize)
{
	finalize();

	int nSize = nXSize * nYSize;
	if ((__int64)nSize != (__int64)nXSize * (__int64)nYSize) {
		m_lastError = MME_SizeError;
		return false;
	}
	m_pMaze = new MMKind[nSize];
	if (m_pMaze == NULL) {
		m_lastError = MME_MemoryAllocError;
		return false;
	}

	m_nXSize = nXSize;
	m_nYSize = nYSize;

	int nCnt;
	for (nCnt = 0; nCnt < nSize; nCnt++) 
		m_pMaze[nCnt] = MMK_Filled;

	for (nCnt = 0; nCnt < m_nXSize; nCnt++) {
		m_pMaze[calcIndex(nCnt, 0)] = MMK_Wall;
		m_pMaze[calcIndex(nCnt, m_nYSize - 1)] = MMK_Wall;

	}

	for (nCnt = 0; nCnt < m_nYSize; nCnt++) {
		m_pMaze[calcIndex(0, nCnt)] = MMK_Wall;
		m_pMaze[calcIndex(m_nXSize - 1, nCnt)] = MMK_Wall;
	}
	return true;
}

MMKind	CMazeMatrix::GetAt(int nXPos, int nYPos)
{
#ifdef _DEBUG
	if (nXPos < 0 || nXPos >= m_nXSize ||
		nYPos < 0 || nYPos >= m_nYSize)
	{
		m_lastError = MME_SizeError;
		return MMK_None;
	}
#endif
	return m_pMaze[calcIndex(nXPos, nYPos)];
}

bool	CMazeMatrix::SetAt(int nXPos, int nYPos, MMKind kind)
{
#ifdef _DEBUG
	if (nXPos < 0 || nXPos >= m_nXSize ||
		nYPos < 0 || nYPos >= m_nYSize)
	{
		m_lastError = MME_SizeError;
		return false;
	}
#endif
	m_pMaze[calcIndex(nXPos, nYPos)] = kind;
	return true;
}

bool	CMazeMatrix::finalize()
{
	if (m_pMaze != NULL) {
		delete [] m_pMaze;
		m_pMaze = NULL;
	}
	return true;
}


//
// 迷路作成用クラス定義
//
class CMazeMaker
{
public:
	CMazeMaker();
	virtual ~CMazeMaker();

public:
	bool	Initialize(int nXSize, int nYSize);

	// 力業。ループで回す。メモリは食わない。
	// 美しくない。
	bool	Generate1();

	// 掘った箇所をスタックに積んで、掘れなくなったらスタックを戻す。
	// 綺麗だけれど、迷路のサイズを増やすとスタックオーバーフローが起こる。
	bool	Generate2();

	// Generate2をlistに置き換えたもの。
	// stdを使ってしまったのが心残り。
	bool	Generate3();

	MMError	GetLastError() {return m_lastError;}

protected:
	bool	finalize();
	bool	checkPos(int nXPos, int nYPos, int nXAdd, int nYAdd);
	int		process(int nXPos, int nYPos);
	void	dig(int nXPos, int nYPos);
	bool	makeStartGoal();
	virtual	CMazeMatrix* matrixAllocate();

protected:
	int		m_nXSize;
	int		m_nYSize;
	CMazeMatrix *m_pMatrix;
	MMError	m_lastError;
};


CMazeMaker::CMazeMaker()
{
	m_nXSize = 0;
	m_nYSize = 0;
	m_pMatrix = NULL;
	m_lastError = MME_None;
}

CMazeMaker::~CMazeMaker()
{
	finalize();
}

bool CMazeMaker::Initialize(int nXSize, int nYSize)
{
	finalize();

	m_pMatrix = matrixAllocate();

	if (m_pMatrix == NULL) {
		m_lastError = MME_MemoryAllocError;
		return false;
	}

	if (m_pMatrix->Initialize(nXSize, nYSize) == false) {
		m_lastError = m_pMatrix->GetLastError();
		return false;
	}

	m_nXSize = nXSize;
	m_nYSize = nYSize;

	return true;
}

CMazeMatrix* CMazeMaker::matrixAllocate()
{
	return new CMazeMatrix;
}

bool CMazeMaker::finalize()
{
	if (m_pMatrix != NULL) {
		delete m_pMatrix;
		m_pMatrix = NULL;
	}
	return true;
}


// スタート位置と、ゴールの位置を作成。外壁部分に穴を開ける。
// 今回のアルゴリズムでは、外壁のすぐ内側が通路になっていないことがあるので
// その場合には箇所を移動させる。
// どこをとっても通路が見あたらない場合には、エラーとする。
// (乱数の発生具合がとても意地悪な場合を考えると、可能性は少なくとも0ではない。)
//
bool CMazeMaker::makeStartGoal()
{
	// スタート地点を左の壁の上の方に
	int nCnt = 0;
	for (nCnt = 1; nCnt < m_nYSize - 1; nCnt++) {
		if (m_pMatrix->GetAt(1, nCnt) == MMK_Space) {
			m_pMatrix->SetAt(0, nCnt, MMK_Space);
			break;
		}
	}
	if (nCnt == m_nXSize - 1) {
		return false;
	}

	// ゴール地点を右の壁の下の方に
	for (nCnt = m_nYSize; nCnt > 0; nCnt--) {
		if (m_pMatrix->GetAt(m_nXSize - 2, nCnt) == MMK_Space) {
			m_pMatrix->SetAt(m_nXSize - 1, nCnt, MMK_Space);
			break;
		}
	}
	if (nCnt == 0) {
		return false;
	}
	return true;
}


// 現在位置nXPos, nYPosからみて、nXAdd、nYAddを足した位置に移動できるかをチェック
// 移動先が埋まっている状態で、さらに三方が通路以外に覆われているなら、OKとする

bool CMazeMaker::checkPos(int nXPos, int nYPos, int nXAdd, int nYAdd)
{
	if (m_pMatrix->GetAt(nXPos + nXAdd, nYPos + nYAdd) != MMK_Filled) 
		return false;

	if (nXAdd == 0) {
		if (m_pMatrix->GetAt(nXPos - 1, nYPos + nYAdd * 2) != MMK_Space &amp;&amp;
			m_pMatrix->GetAt(nXPos    , nYPos + nYAdd * 2) != MMK_Space &amp;&amp;
			m_pMatrix->GetAt(nXPos + 1, nYPos + nYAdd * 2) != MMK_Space &amp;&amp;
			m_pMatrix->GetAt(nXPos - 1, nYPos + nYAdd ) != MMK_Space &amp;&amp;
			m_pMatrix->GetAt(nXPos + 1, nYPos + nYAdd ) != MMK_Space)
		{
			return true;
		}
	} else {
		if (m_pMatrix->GetAt(nXPos + nXAdd * 2, nYPos - 1) != MMK_Space &amp;&amp;
			m_pMatrix->GetAt(nXPos + nXAdd * 2, nYPos    ) != MMK_Space &amp;&amp;
			m_pMatrix->GetAt(nXPos + nXAdd * 2, nYPos + 1) != MMK_Space &amp;&amp;
			m_pMatrix->GetAt(nXPos + nXAdd , nYPos - 1) != MMK_Space &amp;&amp;
			m_pMatrix->GetAt(nXPos + nXAdd , nYPos + 1) != MMK_Space)
		{
			return true;
		}
	}
	return false;
}


static const int moveInfo[4][2] = {
	{-1, 0},
	{0, -1},
	{1, 0},
	{0, 1},
};

int CMazeMaker::process(int nXPos, int nYPos)
{
	int digCount=0;
	int aryMove[4] = {0};	

	if (m_pMatrix->GetAt(nXPos, nYPos) != MMK_Space) {
		return 0;
	}
	while (1) {
		int nMoveCount = 0;

		for (int nCnt = 0; nCnt < 4; nCnt++) {
			if (checkPos(nXPos, nYPos, moveInfo[nCnt][0], moveInfo[nCnt][1]) == true) {
				aryMove[nMoveCount] = nCnt;
				nMoveCount++;
			}
		}
		if (nMoveCount == 0) {
			break;
		}
		
		int nMove = ((rand() >> 1) % nMoveCount);
		nXPos = nXPos + moveInfo[aryMove[nMove]][0];
		nYPos = nYPos + moveInfo[aryMove[nMove]][1];
		m_pMatrix->SetAt(nXPos, nYPos, MMK_Space);
		digCount++;
	}
	return digCount;
}


bool CMazeMaker::Generate1()
{
	// 開始点は1, 1から。(ループの先頭
	m_pMatrix->SetAt(1, 1, MMK_Space);

	::srand((unsigned int)time(NULL));
	
	int nXCnt;
	int nYCnt;

	for (nXCnt = 1; nXCnt < m_nXSize - 1; nXCnt++) {
		for (nYCnt = 1; nYCnt < m_nYSize - 1; nYCnt++) {
			while (process(nXCnt, nYCnt) != 0) {}
		}
	}
	return makeStartGoal();
}


void CMazeMaker::dig(int nXPos, int nYPos)
{
	m_pMatrix->SetAt(nXPos, nYPos, MMK_Space);

	int aryMove[4] = {0};	

	while (1) {
		int nMoveCount = 0;

		for (int nCnt = 0; nCnt < 4; nCnt++) {
			if (checkPos(nXPos, nYPos, moveInfo[nCnt][0], moveInfo[nCnt][1]) == true) {
				aryMove[nMoveCount] = nCnt;
				nMoveCount++;
			}
		}
		if (nMoveCount == 0) {
			break;
		}
		
		int nMove = ((rand() >> 1) % nMoveCount);

		dig(nXPos + moveInfo[aryMove[nMove]][0], nYPos + moveInfo[aryMove[nMove]][1]);
	}
}

bool CMazeMaker::Generate2()
{
	::srand((unsigned int)time(NULL));
	int nXStart = ((rand() >> 1) % (m_nXSize - 2)) + 1;
	int nYStart = ((rand() >> 1) % (m_nYSize - 2)) + 1;
	dig(nXStart, nYStart);
	return makeStartGoal();
}

struct PosInfo {
	int xPos;
	int yPos;
};

bool CMazeMaker::Generate3()
{
	::srand((unsigned int)time(NULL));
	int nXStart = ((rand() >> 1) % (m_nXSize - 2)) + 1;
	int nYStart = ((rand() >> 1) % (m_nYSize - 2)) + 1;

	m_pMatrix->SetAt(nXStart, nYStart, MMK_Space);

	list<PosInfo> posList;

	PosInfo info = {nXStart, nYStart};
	posList.push_back(info);

	while (posList.size() != 0) {
		int nXPos = (posList.rbegin())->xPos;
		int nYPos = (posList.rbegin())->yPos;

		int aryMove[4] = {0};	

		int nMoveCount = 0;

		for (int nCnt = 0; nCnt < 4; nCnt++) {
			if (checkPos(nXPos, nYPos, moveInfo[nCnt][0], moveInfo[nCnt][1]) == true) {
				aryMove[nMoveCount] = nCnt;
				nMoveCount++;
			}
		}
		if (nMoveCount == 0) {
			posList.pop_back();
			continue;
		}
		
		int nMove = ((rand() >> 1) % nMoveCount);

		info.xPos = nXPos + moveInfo[aryMove[nMove]][0];
		info.yPos = nYPos + moveInfo[aryMove[nMove]][1];

		m_pMatrix->SetAt(info.xPos, info.yPos, MMK_Space);

		posList.push_back(info);
	}

	return makeStartGoal();
}

//
// コンソール出力用
class CMazeMakerConsole : public CMazeMaker
{
public:
	CMazeMakerConsole(){};
	virtual ~CMazeMakerConsole(){};

public:
	void Output();
};

void CMazeMakerConsole::Output()
{
	for (int nYCnt = 0; nYCnt < m_nYSize; nYCnt++) {
		for (int nXCnt = 0; nXCnt < m_nXSize; nXCnt++) {
			if (m_pMatrix->GetAt(nXCnt, nYCnt) == MMK_Space) {
				printf(".");
			} else {
				printf("#");
			}
		}
		puts("");
	}
	_getch();
}

// 
//
int _tmain(int argc, _TCHAR* argv[])
{
	CMazeMakerConsole maker;

	do {
		if (false == maker.Initialize(75, 50)) {
			puts("Initialize Error");
			return 0;
		}
	} while (false == maker.Generate3()); //失敗するのは、スタート、ゴールが作れなかった場合。偶然そういうことになることもあるので、そうなったら作り直す。


	maker.Output();

	return 0;
}

最初に昔の記憶を頼りにCMazeMaker::Generate1()を作ったけれど、美しくなかったのでGenerate2()を作成。迷路のサイズを増やすとスタックオーバーフローになるので、Generate3()を作成。一応、満足。

###########################################################################
.....##...#.#.##.....##......#....#...#.#.#.........#.##.........##.#.....#
#.#.##..#.#......###..###.##.#.##.#.###...#.#####.#....##.######....##.##.#
#.#..##.#.#.##.###.##.....##...#....#...#.....##..#.##.#..##...####..#..#.#
#.##..###.#..#..##..###.#..###.#.####.###.#####..####..#.##..#....##.##.#.#
#..##.....##.##..##...#.##..#######...#.#.#...#.##....##.#..###.#..#.##.###
#.####.#####.###.###.##..####.......###.###.#.###..##.#..#.##...##.#..#...#
#....###......#..#.#....##....########..##..#..#..#####.######.##..##.##.##
#.##..##.######.##...####..#####....#..##..###.#.##.##..#......#..###..#..#
#..##.#...##....#..#.#..#.##.#...#.##.##..##.....#.....####.####.##.##.##.#
##..#...#..#.#######...##....#.#####..#..#########.##.##.#..##...##..#....#
###.########.##...##########.#...##..##.##.##...####..#....##..###..#####.#
#.#..##...##..#.#.....##.....##.##..##..#...###.#.#..###.####.##...##.....#
#.##.#..#..##.#.#####.#..#####..#..##..##.#.....#...##.#.#....####.#..#####
#..#.#.###.#..#.....#...##.....##.##..##..##.##.#.###....####.#.#..#.###..#
#.##.#.##....######.########.###..#..###.##..#....#.##.#...#..#...##...##.#
#..#.#..###.##.#....#..#.....##..###..#...#.#######....#.#.#.##.#.####.##.#
##.#.##.##...#.#.#####...#####..##.##.##.##......#####.###.#.#..#..#.#..#.#
##....#..###...#....#..#.....#.##...#.#...#.#.##.....#..##.#...###...##...#
#..#####...########.####.##.##....#...#######..#####.####..#####.########.#
#.##.#.###..#.....#....###...###########...###..##...#....##.........##...#
#..#....###...#.#.####..#..#.....#.#.....#..#..##..###.#.##..#######.#..###
##.####...#######...###.##.#.###.#...######.####..##...#.#..##...#...#.##.#
#....####...#...###...#..#.#..####.#....#.....#..##..#.###.##..#.#.###.#..#
####...#..#.#.#..####.##.####......####.#####.##..#.##...#..####.#.#...#.##
##.###.#.##.#.##.#.#...#....##.######.#.##..#.###.######.##...#..#...###..#
#..##..#.####.##.#...#.####..#........#..##....##...##....###...######...##
#.##..##..##..#..##.####..##.#.######.##..####..#.#..##.###.#.#..#.##..#..#
#.##.####.#..##.##..##...###.###...#...##.##.##.####.#..#...####.#..#.###.#
#.#...#...#.###..##..#.#...#..#..#...#..#..#.##..##..#.##.#..##..##.#...###
#...#...#.#...##..##...#.####.####.#######.#..##.#..##..#.##..##..#...#...#
#.###########.###..#####....#...##.#..#....##..#...####.#..##..##.#######.#
#....#....##..#.##....###.#####..#...##.######.#####.##.##.###....#.....#.#
###.##.#.##..##..####..#..#...##.###.##......#...##.....##..########.##.#.#
#.#.#..#..#.####.#..##...##.#.#..#....######.#.#....#.#..##.#...##...#....#
#...#.###...#......####.##..#...###.###...##.#.######.#.##..#.#..##.####.##
#.#.#.#.#####.###.##....#..######.#.##..#..#.#..#.....#..##...##.#...#....#
#.###.#...##...#..#..####.##.#.##.#.#..##.##.##.#.###.##..######.#.#.####.#
#..##.#.#..#.#.####.###.#..#......#...#####..#..#...####.##..#.#.###.##...#
##..#...##.#.#.#........##.#.#.#.####..#....#######..##...##...#..#...###.#
###.######.#.#...####.#..#.#.###.#..##.#.####....###..###..##.###.###...#.#
#...#...#..#####...##.####.#..#....##..#..#...##...##...##......#..####.#.#
#.###.#...##...#####..##...##.#.##.#..###.#.######..##.###########.#....#.#
#..#..##.##..#.#...#.##..######..###.##.#....###.##.##...#.......#.#.#.####
#.##.###..#.##...#.###..##....##........#.##..#...#..#.#.#.###.#.#.###....#
#..#...##.#..#####..##.####.#.##.############...#.##.#.#.#...#.###..##.##.#
##.###..###.##...##.#..#....#..###....##....#######..#.###.###...##..###..#
#...###..#...##.###.#.##.#####...#.##.#..##.#...#...##..#...###.####.#...##
#.#...##...#......#......#.....#...#....##....#...#..##...#...#........#...
###########################################################################

ちなみに http://anond.hatelabo.jp/20070711194709 これを聞いたのは自分。

かなりたくさん書けることがわかりました。

2007-05-15

http://anond.hatelabo.jp/20070515131639

ツンデレ……じゃなくてデレツンだよ。

怒りの告知期間は実は結構長め。でもタイムアップした時の爆発力が尋常じゃない。

普段は神のように優しくて(って神様か)何でも許してくれそうだからっていい気になってると、堪忍袋の緒が切れた時がすごく恐い。

それに嫉妬深くて、他の神様への浮気を許してくれない。

でもよく読んでみると、ヘブライ人が他の神様浮気した時でも、ほんのちょっとくらいなら大目に見てもらってるんだよな、実は。

異教徒の神々の祭壇を破壊して祭司を殺していた神の預言者のくせに、他の異教徒の神様にちょっとだけ浮気してた人がいたように思う。うろ覚えだけど。

有名な例では、十戒に出てくるモーセの兄のアロンも、金の子牛の像の作成プロジェクトリーダーになってたけど、周りの子牛崇拝者たちが殺された反面、彼だけ無罪放免されてる。

お付き合いとかで断り切れないとかそういう事情を加味してとか、何かあったのかもしれないけど。

2007-03-28

http://anond.hatelabo.jp/20070328100659

「-Wno-なんちゃら」と浮かんだ私にとって、

プロジェクトの「プロパティ

「構成プロパティ」>「C/C++」>「全般」

「警告レベル」を「Off」

ってのは新鮮。C/C++というかコンパイラ全般、もう何も年触ってないからなんだろうけど。

でもこれって、すべての警告が出なくなるんじゃないの?使ったことないからはずしてるかもしれんが。

で、キャスト関係は、伝統的にはどんな名前の警告なんだっけか。教えてエロい人!

http://anond.hatelabo.jp/20070328094854

プロジェクトの「プロパティ

「構成プロパティ」>「C/C++」>「全般」

「警告レベル」を「Off」

で万事解決

2007-01-17

http://anond.hatelabo.jp/20070117113606

いわゆるこういった「あなたも本を出しませんか」商法にこういうウラがあるだとは、恥ずかしながらd:id:kanoseさんの記事(http://d.hatena.ne.jp/kanose/20070116/fantasynovel)を読むまで知らなかった。

同人誌で出せばそこそこの費用で収まるのに、自費出版商法は100万レベルの費用を平然と要求されて、形だけ流通させてポイ。

身内がしばらくの間、盆と年末コミケサークル参加していた。
  だからいわゆる「同人誌」の作成プロセスに関して、スケジュールや費用の調整・在庫の保管といったものが付き物である事くらいは、傍目から見る範囲だけどおおよそは把握しているつもりだ。
  (ちなみに私は、当時は徐々に普及し始めたワープロたまたま買っていたこともあって、原稿アシスタントとしてフキダシのセリフ部分の打ち込み・プリントアウト担当した)

もっとも、身内の書いていたのはいわゆる「健全本」であり、何かと取り沙汰される『18禁本』では無かったので、売り上げなど高が知れている程度のレベルなのだが、巷では『大手サークル』の売り上げや『18禁本のすごい中身』といったものばかりがキワモノ的にクローズアップされる例が多いのを見ると、こういった分野の話題を含めて一般人が自費出版(あるいは同人誌)というものに対して、いかに「実情知らず」な想像しか持っていないかを痛感させられる。

人から金を毟らずに誰かを幸せにできるんか。

そこにWin-Winの関係を築けるのなら、その行為は「むしる」とは言えないのでは。

うまくは言えないけど――「これだけのカネを出しただけの価値はある」と思えるような結果を相手に提供する事ができたなら、それは「むしった」事にはならないのでは、と思う。
  だから例えば、ベンツのカギを車内に閉じこんでしまった人に対しての解錠費用として1万円を請求するのならば、それは決して『高過ぎるとは言えない』(仮に一般人が専門用具を用意していじったところで、ベンツのカギが問題も無しに開く事は、まず無いのだから)。

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