「rC」を含む日記 RSS

はてなキーワード: rCとは

2021-02-03

ショーン君さぁ……

とある増田経由でこのtogetterまとめにたどり着いたが。これはひどい

山口一男(シカゴ大学社会学教授) vs 女子大生起業家 https://togetter.com/li/1659464

本来最初の2ツイートで終わった話。

山口先生の解析では山口(2008)で“男女の所得格差男性に比べ女性非正規雇用が多いことが一因ではあるが、より大きな原因は正規雇用者中の男女格差で、特に女性管理職昇進率が男性に比べ著しく低いことが要因だ”ということが示され、さら山口(2014ab)で勤続年数・就業時間・年齢・学歴職場の種類だけでは男女の管理職割合/所得格差説明しきれない(これらの項目が全て同じだったとしてもまだ大きな男女格差が残る)ことが示された(※1,2)。

まりショーン君の「山口一男氏を始めとして、多くの研究から所得の男女格差女性が辞めたり時短にした結果によって生じているもので、そうしなければ女性所得男性並みであることが分かっておりますので、女性も自信をもって主たる家計支持者になって大丈夫ですよ。」は間違い。

しろ何で山口先生名前出したん?たぶん読んでないでしょ君。それで本人から訂正されるって一番恥ずかしいやつぅ。

……とまあ本来はここで終わり。あるいは、少し後退して「賃金の男女格差の要因の一部には女性が辞めたり時短にすることが含まれうる」と主張を弱めるか。はたまた「貴方論文/解析は間違っている」と文献を挙げるか自分研究結果を出すか。

しかショーン君は別の道を選んだ。

※1:就業時間管理職割合関係因果が両方向(長く労働する社員管理職になりやすい/管理職になると労働時間が長くなる)だが、前者だけを考慮している。そのため、就業時間の実際の説明力は解析結果よりもっと弱い。

※2:平均の就業時間ではなく、就業時間区分に分けてその割合で解析している。理由としては平均値だとあまり男女差は無いが、区分分けすると“長時間労働者”区分割合で男女差が大きくなるため。平均差より区分分けして解析した方が労働時間説明力が高くなる。山口(2014a)では具体的に述べてはいないが山口(2014b)では週当たり平均労働時間の男女差は約4時間だが区分分けすると労働時間50時間以上の区分女性割合男性3分の1になる。

恐ろしく速い論点ずらし。俺じゃなきゃ見逃しちゃうね。

ここからショーン君は鮮やかな論点ずらしを見せる。「男女格差女性が辞めたり時短にした結果」という自分の発端のツイートとそれへの指摘は無視して、別の話を始める。

まあショーン君も実際に解析結果見て「あ、ヤベ」って思ったんだろうなあ。他の人の研究でも女の時短とか離職は数あるファクターの一つに過ぎないし。

『「男女格差女性が辞めたり時短にした結果」ではありませんよ。要素の一つにすぎません』に反論しようがない。

でも凄いよショーン君は。まるで最初からそう言ってたみたいに論点ずらすんだもん。ネット論客かくあるべし、みたいな?尊敬はしないけど。

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

まずファクト確認として、

1) 日本でも同じ勤続年数・職位・職階であれば所得の男女差はない

2) 日本所得の男女差はa.勤続年数・職位・職階分布の違いとb.職種分布の違いで説明できる

というのが基本かと思います

うんうん。まあもう少し言えば補正後も男女差は残るし、職階分布の男女差の説明変数の一つが勤続年数なんだけど、まあ細かいことはいいんだよ。

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

山口先生と私が違っているのはそのファクト解釈です。山口先生は例えば《意思決定ラインの登用には男性が優先されていると考えられ》とここに男女差別があるのだという解釈になっています。ですが、この解釈には直接的なエビデンスがありません。

うん?差別?突然出てきたが何の話だ。実際に解析結果では「係長課長部長という意思決定ラインの登用には男性が優先されている」し、少なくとも引用元では山口先生はそれを差別と呼んでいないぞ。

事務職コースみたいな、女性が多く(というか実質女性向け職)かつ賃金昇給が低く抑えられている企業コース制度のことは間接差別だと言ってるけど。

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

2020年管理職30%目標など企業努力しており、その中で問題になってくるのが「女性に昇進を打診しても断られる」「管理職候補だった女性寿退社してしまう」という問題です。女性の昇進意欲については山口先生の間接的データ解釈とは別に直接的エビデンス存在します。

うぅん!?“昇進意欲”なるもの唐突に出てきた。え?女の時短や離職で賃金格差が生じてるんじゃなかったの?

しれっと別の話始めないでよショーン君。たぶん山口先生も混乱したでよ。

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

例えば、『多様な選択可能にする学びに関する調査報告書』(gender.go.jp/research/kenky…)では女性の昇進意欲は男性のそれの半分です。パーソルの調査rc.persol-group.co.jp/research/activ…)でも同様の結果で、日本女性アジアの中でも管理職昇進意欲が最低で、男女のオッズ比も最も大きい。

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

女性に昇進を打診したのに断られる」という企業困惑は実際そうでしょう。引用から図表を持ってくるとこのようになります

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

この問題日本に限った話ではなく、例えばスーザン・ピンカーが「なぜ女は昇進を拒むのか」(hanmoto.com/bd/isbn/978415…)という本を書いていたりしますが、この本の主張はともあれ多かれ少なかれ「女性に昇進を断られる」という問題現実的な話ではあります

いやしれっと進めないでよね。それに女は昇進意欲が小さいんじゃい!と連呼されてもさ、それが職階分布の男女差をどれくらい説明できるのかなんも言ってないじゃん?(※3)

いやはややっぱりすり替えうまい。女は昇進意欲が小さいというエビデンスを、それによって職階分布の男女差ひいては男女の賃金格差が生じているというエビデンスに誤認させてる。

山口先生がただ結果を述べているだけなのを「男女差別があるのだという解釈」ということにして信頼を毀損しようとする。

やりますねえ!

※3:たしか昇進・労働意欲の影響を調べた解析もあった気がする。あ、これだ馬&乾(2016)。これだと係長への昇進は意欲で一部説明可能だが課長以上はできないって結果。ちなみにこの調査では、管理職割合については属性格差(人的資本の男女差)より評価格差(人的資本評価における男女格差。例えば同じ人的資本を持つ男女では男性の方がより評価されるなど)の影響の方が大きく、男女の職階差は差別的扱いに由来するもの結論付けている。馬ら(2017)でも昇進意欲の影響を見てるがこちらはもっと説明力が少ない。

アクロバティック!

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

次に、寿退社の話です。スローター仕事と家庭は両立できない?」とその種になっているコラム"Why Women Still Can’t Have It All"(theatlantic.com/magazine/archi…)やサンドバーグ「Lean In」では夫選びの重要性が説かれます。妻の出世に協力的な夫でないと出世は難しいと言う話です。

こらまたアクロバティックな方向転換。なぜに夫選びの話に?

43歳でFacebookCOO(その前はGoogle、さらにその前は米財務省首席佐官、その前はetc.)のスーパーウーマンシェリル・サンドバーグが「女のリーダーなすぎ!女だからって仕事辞めなくていいよ!子育て仕事も両立できるし、バリバリ働けばキャリアだって男に負けない!頑張れ頑張れできるできる!!」と抜かすLean In (悪意的要約)と、それに「いや無理だし」と返しているアン・マリー・スローターを同じ意図引用するってどういう脳みそだ。ほんとに読んだん?

夫選びに限定したって、サンドバーグは「理解のある夫くんが居れば無問題」、スローターは「夫は重要だけど、それだけじゃ無理」と言っている。

ちなみにショーン君の引用しているアン・マリー・スローターの文は日本語訳があるので置いとくよ。→https://courrier.jp/news/archives/77602/

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

最近共働き志向の中では「出世に伴う転勤・引っ越しについてくる配偶者か否か」という問題で表出しやすくなっています先生研究者ですからポストを得るのに引っ越し必要であり、現実的引っ越しについてくる配偶者か別居を選ぶかしか選択肢がないのはご存じでしょう。

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

ただし、引っ越しについてくる夫を選ぶ女性が極めて少ないのは、中野円佳「育休世代ジレンマ」(kobunsha.com/shelf/book/isb…)4章2「なぜ夫選びに失敗するのか?」や、

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

あるいは有名どころで上野千鶴子インタビュー(toyokeizai.net/articles/-/224…)にもそれは表れています他人白河桃子『「専業主夫」になりたい男たち』も同じ旨が書かれます

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

女性結婚相手選びで所得を重視するのは婚活産業少子化関連の調査から明瞭で、言ってしまえば女性自分出世邪魔になる夫を選んでしまうのですが、ここを変えようとしてもプライバシーへの干渉になるので、現実問題としてはここが非常に大きなボトルネックになっています

まだまだ続くよ夫選びの話。ええい印象論はいい。エビデンスを出せエビデンスを。

って言うか最初に言ってた寿退社の話はどうなった。転勤・引っ越し寿退社に何の関係があるんじゃ。

ちなみに山口(2014a)は制約は多いながらも「既婚および子供の有る女性/男性は、そうでない場合より昇進し難い/易い」という解析結果をだしている。あとさっき引用した馬&乾(2016)では結婚女性の昇進に影響なし、男性プラス

しか解釈は容易ではない(※4)。「夫が足引っ張るせいで妻が出世できない」のエビデンスには全く足りない。

あとこのツイートからわかるのはショーン君の「女が悪いフィルター」の強さかな

出世邪魔になる夫」の問題じゃなくて『「出世邪魔になる夫」を選ぶ女』の問題って言うんだぜ。賭けてもいいが、ショーン君ならDV被害DV男を選ぶ女の問題って言ってくれるはず。

※4:パターン単純化しても↓である

①/② 結婚男性/女性(の昇進)にプラス/マイナス効果を生じる

③/④ 独身男性/女性(の昇進)にマイナス/プラス効果を生じる

⑤/⑥ 昇進が男性/女性結婚プラス/マイナス効果を生じる

⑦/⑧ 結婚男性/女性(の昇進)に影響がない

①~⑥は全部同時に成立しうるし、①③⑤は⑦と、②④⑥は⑧と、⑦は⑧と排他である

さらプラス/マイナスが具体的に何によってもたらされるかも考えねばならない。超複雑!

後方宙返り3回ひねり

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

最後専門職の話。これは、実は「ジェンダーギャップ指数が良好な国ほど女性STEM系進学率が低くなる」現象があり、Gender-Equality Paradoxという名前他国でも問題提起されています(eprints.leedsbeckett.ac.uk/id/eprint/4753…)。

問題提起?されたなあ確かに。その論文Stoet&Geary (2018)の信頼性についてだがね。

発端はこの論文に興味を持った他の研究者がデータから結果の再現を試みるも失敗したこと。よく見たらデータ自体も合わない(例えばポーランド女性STEM学位取得率は43%だが、論文中では27%くらいになってる)ことが判明。著者らに問い合わせたんだ。

すると――聞いて驚け!――この論文の著者らはMethodsにも書いていない、非公開の独自計算方法を用いて数値を算出していたのだと。

でまあ指摘を受けた著者は論文の大幅な――元論文の1割以上、1,113語にも及ぶ――修正をしている(Stoet&Geary, 2020)。

その訂正の多さもさることながら、元論文では言い切っていたところを「傾向(propensity)」という弱い表現差し替えてる。つまり非公開の手法データいじって主張を誇張してたわけだ元論文は。

ぶっちゃけ個人的にはアウトもアウトな話だと思うんだけど、皆さんどう思う?

さらにそれを指摘した学者らの出したRichardson et al. (2020)では、国の数や男女平等指標等が変わるだけで男女平等STEM分野の男女格差の相関は消えることが示された(=Stoet&Geary (2018)に再現性なし)。Richardsonら曰く「複数指標手法を試して結果の一貫性確認すべき。自説に合う結果が出たやつだけ使うのはダメ」とのこと。

おっと、引用元解説を長々しすぎた。Gender-Equality Paradox云々は置いといて、ショーン君が言いたいことは分かるよ。「女の選好のせい。女が悪い」でしょう?

良い手だが、それは結局ファクターの一つを提示したに過ぎない。それの説明力や、それがどの程度社会的形成されたものであるのかが重要だ。

ちなみに山口先生の解析では、男女の専攻の選好は理工学部を除き、男女の職業分を説明しない。その理工学部にしても最大推定で約50%しか男女の職業分離を減少させない(※5)。

勘違いしないでほしいが、男女の選好の違いは男女のSTEM分野ないしより広い範囲職業選択において重要ファクター一つであることは間違いない。

論点はそれがどれくらい生物学的(対処不能)でどれくらい社会的(対処可能)であるかということだ。極端な主張の人達――100%生物学的 or 100%社会的――もいるがね。

※5:

男女の大学の選好の違いの多くは、男女の職業分離を説明しないが、例外理工学部女性の増大で、もし理工学部女性割合男性と同等になり、かつ彼女たちの職業分布男性理工学部卒の職業分布と同じになるという2条件が満たされるなら、タイプ1型(※6)の専門職割合の男女格差が最大の推定でほぼ半減すると期待できる。

(山口,2016より引用)

※6: タイプ2専門職教育・養育、医療健康看護社会福祉分野の専門職から医師歯科医師大学教授(教員)を除いたもの

タイプ1専門職医師歯科医師大学教授(教員)およびタイプ2に含まれない専門職

女子大生起業家@DM解放中🇨🇳🇯🇵🇺🇸 @SeanKy_

山口先生問題提起に対して

1) 元々出世意欲が低く打診しても断られる

2) 夫選びの指向寿退社が多くなる

3) 進学段階でSTEM専門職パスを選ばない

という問題があり、ここに手を入れたくても女性自由意志に反したり、プライベート干渉する必要あり難しくなるのです。

まるで“山口先生が知らない問題であるかのような口ぶりだが、2)と3)は山口先生の解析で男女の賃金格差の主因足りえないことが示されている(個別でも組み合わせても)。山口先生研究で(たぶん)扱っていない1)についても要因の一つたり得るがエビデンスは少ない。

1) → 出世意欲の男女差では賃金/管理職割合格差説明しきれない(調査も少ない)。

2) → 勤続年数が同じ(寿退社しない)でも格差は残る。また夫選びは勤続年数に影響を与えるファクターたり得るが、勤続年数そのもの

2021-01-07

地方都市での一軒家購入記録

はてなあもすなる家買日記といふものを 我もしてみんとてするなり

はてなーが最近やっている家購入記を、俺も便乗してみようと思い書いた)

 

概要

・某地方都市県庁所在市の隣接市。

 

子供が産まれることになったので、それまで住んでた借家をやめて家を買うことにした。

子供が動き回るようになると床や壁を汚したり壊したりするだろうし、家のカスタマイズもしたくなるだろう。これまで数回の引っ越し・荷造り作業が非常に手間だったので、幼児育児しながらの引っ越しはまず不可能だと予想された。

 

妊娠初期からなんとなく探し始め、妊娠6ヶ月で本格的に探し始め、出産3ヶ月前に物件決定、1ヶ月前に引っ越した。

物件選定、下見、ローンや物件契約は俺と妻二人で行い、実際の引っ越し作業は俺一人で行った。

 

・庭付き一戸建てを借りて2年間住んでおり、自分たちが家に求める重視したい要素と、どうでもいい要素をある程度把握できていたので、それを家探しに反映させた。

 

 

物件選定

 

ネット物件情報サイト市町村名で絞り込み、安価順にソートして諸条件から気になる物件を20件ほどリストアップ

中古場合は値引きの可能性もあるので、これまでなら出せる上限価格の2割増しまリストアップした。

リストアップした物件はぜんぶ休日に現地に行き外観や周辺環境を見た。不動産屋に連絡して内覧させてもらったのは上位5件。

エクセル物件比較表を作り、要素ごとに傾斜配点して点数を付けて最も高得点物件を買った。

高配点順に、「駐車場台数」「延床面積(部屋数)」「価格」「構造」「築年数」「両実家から距離」「校区小学校から距離」「最も近い保育園から距離」「バス停から距離」「敷地面積」「土地条件」「駐車場が露天か屋根付きか屋内か」「他」

俺が比較表を作り、いちおう妻にも見せて意見を聞いてたが、ほぼ追認状態だった。

(実際に使ったエクセルファイルを晒そうかと思ったけど、増田添付ファイル付けられないんだね。)

以下、各項目ごとに説明する。

 

駐車場台数」

地方都市なので車がないと何もできん。俺バイク通勤、妻は車通勤子供が産まれれば子の保育園への送迎のため俺の車も必要になる。なので最低2台分。駐車場無しは論外、1台分のみの場合は庭を潰して駐車場追加できるか、もしくは周辺道路に恒常的に路駐できる立地か(車庫法違反になるが、住宅街では実家車庫証明とっていつも路駐してる人も多い・・・)で判断

両親が子育て手伝いに来てもらえばその車を止めるスペースも必要になる。できれば3台分ほしい。

→ 3台分ある家を買った、妻車、子送迎車、残り1台分はバイクガレージとして使ってる。両親が来たとき住宅地の最奥で交通量が少ないので車庫の前に路駐してもらってる。

 

延床面積(部屋数)」

リビング、俺の部屋、妻の部屋、寝室、将来の子供部屋、で4LDKが最低条件。もちろん部屋は多いほど良く、面積は広いほど良い。

→ 6LDKとなった。部屋は多いほどいいと実感している。寝室二つにしていつもは3人一緒に1Fで寝て、風邪ひいたら一人だけ2F寝室で寝たり、いろいろ助かる。

 

価格

世帯年収1700万~2200万。物件価格4000万が上限と妻と合意したので、4800万以内で探した。

(妻は公立病院勤務医で、当直・オンコール量により増減。妊娠後期から産休までは時間外一切無しなので1200万、育休明けから現在までは週2のオンコールのみなので1400万程度。ただ住宅ローン審査では前年までの源泉徴収票判断するので、金融機関からは1700万として見られてたはず。

俺は残業あっても無くても500万。県庁時間外手当ほとんど付かない)

→ 建物登記で持分1/2ずつ、土地は保留地なので組合の所有者台帳に連名で記載、実際の負担も1/2ずつとした。

→ 購入価格は下紀売主との値引交渉参照。

 

構造

当時住んでた借家が築10年のプレカット工法木造住宅だったが、壁の外板(サイディング)つなぎ目シーリング劣化して雨水が浸入し、中の木が腐って雨漏りがあり、さらに同構造隣家の2Fベランダが腐って半壊してて、プレカット木造住宅には不信感があり対象外とした。

大工が作る伝統的な木造住宅は皆無だった。

実家は築2~30年の鉄筋コンクリート造だが目立った不具合はなく、信頼感があった。

よって鉄筋コンクリートRC)造、鉄筋コンクリートブロックRCB)造、軽量鉄骨造の順に高評価とした。

→ RC造を買った。売主(建て主)がリフォーム業の社長で、その知識を生かして作った注文住宅ということで、内覧して一目見て質がいいとわかる造りだった。階段上り下りしても木の軋み音が全くしないとか、天井が高いとか、天井裏みたら断熱材が分厚いとか、床下も広いとか、壁収納が各所に多い(いまだ使い切れてない)とか。

「築年数」

新築のほうがもちろん良かったが、当時は型枠職人不足が顕著でRC新築坪単価が異常に高騰しており、手が出る価格新築はプレカット木造ばかりなので、中古住宅中心に探した。

住宅ローン控除が効くのがRCだと築25年以内の購入なので、築25年が一つの基準。ただし利率負担以上に安い物件があれば築25年以上でも良い。

→築20年を買った。コンクリートのひび割れ等は全く見られない。

「両実家から距離

とても幸運なことに、俺の実家と妻の実家が車で10分の近距離で、かつお互いの職場からも車で20分以内の距離だったため(これは結婚決めてから判明)、両実家に近い位置で探した。

夫婦二人ともフルタイムで働いており、育休あけてから祖父母サポート絶対必要になると予想されたため、両実家から車で30分以内の条件で探した。

実家のあるA市と俺実家のあるB市は隣接。AB市か隣接した市町村で絞り込んだ。

→両実家の間で妻の実家寄り(妻の両親の毎日散歩コース)の物件となった。

小学校から距離

中学生になれば自転車バスが使えるから距離があってもいい。小学生特に低学年)は徒歩通学が基本になると思われるので、子供が歩いていける距離として2km以上で足きり。できれば1km以内。

→買った家の校区小学校は崖を迂回しないといけないので延長距離4kmあり足切り対象なのだが(この家が家の造りや面積の割に安かったのはこれが第一要因だと思う)、妻の実家が市境を挟んだ隣の市にあり、妻実家の校区小学校は家から800m。これを生かす。

越境入学は同市内ならまだなんとかなるかもだが、別の市だとほぼ不可能市民税納めてないし仕方ないね

「最も近い保育園から距離

認可保育園であっても世帯年収から保育料が最高負担額(月6万ほど)になるので、認可外・認定保育園でもいい。車で送り迎えになると思われるので小学校ほど距離は気にしないが、あまりに遠いと渋滞からんで勤務時間に支障する。

→結局、基準に沿って運営されてる認可保育園安心だねとなり、家から3kmほど離れた保育園入園できて車で送迎してるので考慮する必要はなかった項目。

バス停までの距離

子供高校生になれば離れた進学校に行くかもしれず、そうなればバス通学となるだろうから、あまり遠くないほうがいい。2km以上で足きり。

→1.5kmほど先に本数の多い路線バス停がある。高校生なら歩ける距離だろう。

敷地面積」

庭は無くてもいいが、あればいろいろ使えるだろうからガーデニングとか、子供が歩けるようになったら庭でプールとか、小学生になれば犬を飼うとか。

→30㎡ほどの土の庭がある。興味なかったが、いろんな植物植えてデザインするのはやってみると楽しい

土地条件」

当時は東日本大震災から数年のちで津波記憶が新しく、標高は確保したい。

谷地は通気性悪く水害ありそうなので避けたい。崖ぎわ地は見晴らし良いが安定性が心配だが切り土なら問題なし、盛り土絶対不可。平坦な住宅地の中なら土地安定性やリセールバリューは良いが、道に面した1方以外の3方を他民家に囲まれていて息が詰まらいか心配(両実家借家も、2方のみ他民家で1方は林や崖だった)

→ 数十年前に台地を切り土して造成した住宅地の南に開けた崖ぎわの物件にした。この物件候補にしてから県立図書館に行って明治時代以前からの古地図を見たり、国土地理院サイト米軍撮影1945年前後航空写真を見たり、県の地図サービス災害指定区域確認したりして、

昔と今とで大きく地形が変わってない(その間の大きな地震でも崩落等してない=地盤が強い)こと、盛り土ではなく切り土であること、敷地が急傾斜地崩落危険区域指定(再建築時に制限がかかる)てないこと、を確認した。

眺めはいいし、日当たりはいいし、リビング先の庭の先は斜面で林なので四六時中リビングカーテンを開けたままにしておけるし、今のところは満足している。かつてない巨大地震が来たら土地も家も無くなって無くかもしれないけど。

→ 土地区画整理事業が施工中で保留地上の物件なので、いろいろ勉強して詳しくなった。ネットバンク住宅ローンが使えない以外はデメリットは無かった。リセールバリューには影響するかもしれんが、この家を売る頃には換地処分は終わってるでしょ。

→ 用途地域にこだわりは無かったが、小学校バス停までの距離で足きりすると必然的市街化調整区域は除外され、市街化区域第一種低層住宅地域の物件ばかりとなった。

駐車場屋根付いてるか、屋内か」

車もバイクも雨ざらしにはしたくないので最低でも屋根があったほうがいい。無ければあとからカーポートを付ければいいが費用が200万ほどかかる。できれば横風や埃も防げる屋内駐車場だといい。

→ 電動アルミシャッター付の屋内駐車場となった。ガレージとしてバイク整備に使えて最高。壁にアンカーボルト打ち込んでメッシュパネル付けて工具並べてある。密閉空間で音が漏れないので雨でも夜でもエアコンプレッサーやディスクラインダーが使える。ぐへへ

 

「他」

周辺環境は閑静な住宅地の最奥で、家の前の1.5車線道路交通量少なく(周辺家に用事のある車しか通らない)子供を道で遊ばせても大丈夫そう。家が売りに出ている理由が、売主夫婦が高齢になり介護住宅に引っ越すための処分ということで、周辺とのトラブル理由ではない。下見や内覧ときに両隣・道向かい・道向かい両隣の方に挨拶して少し話したが、変な人はいなかった。

現在も、たまに顔を合わせたら挨拶してちょっと世間話するくらいで、軽い近所付き合いのみしている。

保留地のせいか自治会対象外となっており、自治会費や行事参加の負担がない。

なにより妻の両親の毎日散歩コースにある家で、毎日周辺を見てる妻の両親から問題ない」とお墨付きをもらえて安心できた。

県庁所在地隣接の市街化区域なので、小児科は車で10分以内に3院、大きな総合病院も車で20分以内に2院、他内科整形外科クリニックも徒歩(車2分程度)に数院あり、医療関係不安はない。

買い物も価格重視のスーパーからちょっと高めのデパート系列スーパーなど車10分圏内に5~6件、ドラッグストアホームセンターも車10分圏内にあり問題ない。

(年とって車も運転できなくなったらどうしようね?3食つき老人ホームに入るしかいか

購入

 

住宅ローン

妻は倹約家(いくつかの趣味以外には服や娯楽に金使わない)なので現金一括で買えるだけの貯蓄があったが、住宅ローン減税のおかげで利息負担無しで借りられるので、何かあったとき手持資金確保のためもあり、常識的に頭金を1割入れて残りはローンを組んだ。

均等に資金負担しようということで、持分1/2ずつの共同債務とした。

住宅ローン控除年1%よりも融資利率が低ければ、借金して金が入ってくる逆ざやとなるので、控除が効く10年間はなるべく融資残高を増やすべく、20年ローンとした。10年たったら一括繰り上げ返済する。月々の返済額が減るぶん貯めておく。

変動金利のほうが遙かに利率は低かったが、金利変動リスクを避けたくて10年固定金利にした。(でも今の状況だと変動のほうが得だったな。賭けに負けた。)

 

土地区画整理事業地内の保留地上の物件という特殊条件のため、年利0.65%等の低金利を誇るJNBソニー銀行等のネットバンクのローンは使えなかった。

地場都市銀行2行に仮申し込みし、低利率のほうに本申込した。(妻がメインで使ってる銀行のほうが高かったので担当者からずいぶん引き留められたが、仕方ない)

世帯年収の2~3倍程度の物件価格、お互い安定した職業ということで審査トントンで進んで融資決定の連絡があった。

年収源泉徴収票)以外の金融資産も開示したが、融資担当者は俺の数百万の貯金はチラッと見ただけで終わりだった。ちょっとプライドが傷ついたぜ。

利息は0.8%台で、融資手数料等の諸費用を含めると逆ザヤは僅かとなった。

 

住宅ローン減税は初年度こそ税務署に行っての確定申告必要で面倒だったが、2年目以降は年末調整職場に用紙出すだけなので慣れれば手間でない。

 

 

・値引き

基本的都市部中古住宅は売り手市場だが、この物件は1年前に4800万で売りにだして売れず4600万で売られており(校区小学校が遠いのと保留地なのが原因だと思う)ちょっと強めに出てみた。

不動産屋を介して、「もともとの予算が4000万なんです、がんばって4100万なんです、保留地なので金利の安い住宅ローンが使えなくて苦しいんです、金利分まかりませんか?」と。

4400万のオファーがあり、こっちは4200万で再度要請。最終的に「4300万よりは下げられん、それで無理なら売るのは諦める」との回答で、4300万で妥結した。

近くにある小学校距離と保留地以外の広さや造りや築年数が似た物件は6~8000万で売られてるので、造りのいい広い家を安くで買えたと満足している。

 

 

不動産

仲介手数料は上限いっぱい取られたが、土地区画整理組合との所有者変更のやりとりや価格交渉で駆け回ってくれたので不満はない。

 

司法書士

登記関係銀行指定司法書士に一任した。土地登記がないので建物分のみ。市中の方に依頼したらもっと安かったと思う。

 

 

反省

結果論だが、保育園までの距離考慮しなくてもよかった。それ以外は満足。

子供が産まれる前は「田舎で静かなところがいいね」と学校までの距離をきにせず人里離れた田舎の広い一軒家をネットで見た「こんなところいいね」と話してたりしてたが、子供が産まれると子供第一の選定となった。でも子供独立したらまた判断基準が変わるんだろうな。

2020-11-30

anond:20201129180126

まず第一に君を尊敬する。

凄く頑張って、真面目に勉強して、どうやって戦うかを考えてプレイしただろうことが、非常によく分かるからだ。

からこそ、どのように戦い、どのように負けたのかが、投稿内容からまざまざと見える。

  

自分が選んだのはファウストだったがランダム性が試合に変化をもたらして非常に楽しく感じていた。

「何が出るかな?」は出てきたアイテムに応じて動きを変える必要がある必殺技だ。

ただ漫然と投げているだけでは、ファウストの得意とする位置プレッシャーのない隙きを晒すだけの愚行であり、

「状況に応じた技の選択が出来ていない」「キャラ対をもっとしっかり練った方がいい」

から

画面端に追い込まれひたすらカウンターをとられる試合が続いた。

当然のようにこうなる。

  

格ゲーテク披露するゲームじゃない。相手の体力をゼロにするゲームだ。

ソルの飛びモーションが見えたらしゃがみ前歩きで空かせる

こういうことは、戦える人が勝率を上げるためにすることで、初心者が狙うことじゃない。

必要なのは直接的な勝ち筋、相手への触り方と、ダメージの取り方、カタへの嵌め方だ。

  

必要なのは地上を制圧する遠Sや2HS、入れ込み・生出しの「レレレの突き」であり、

飛んでくる相手に対する置きKや6P対空であり、意表を突く黄含むドアぶっぱやドリルであり、

それらの選択肢を警戒して対戦相手ジャンプを見せたり、立ち止まったりダッシュガードをしだして初めて、

「何が出るかな?」が機能するようになるし、相手を詰めて行けるようになる。

  

まあ、その上でカタに嵌める部分、

ループする起き攻めでダメージを稼ぐ部分が非常に難しいし。

そもそも初心者対応型のキャラであるファウストを使わせるのが土台不可能なんですよ。

  

まり選ぶべきは、特殊操作がなくてもダウンが取れて起き攻めに行けて、中下段、表裏で崩せる無敵技持ち…… 

そう、適当攻撃ボタン必殺技ポチポチするだけで相手対応要求するレオホワイトファングです。

  

判定が強く長いHSと見てから対処の難しいS弾をブンブン振り回し、

ガード・ヒット関係なく適当に6HS, 波動S, 波動HS(ガードさせて有利)に繋いで表裏を翻弄

波動Sがガードされても二段目止めと三段目RC対応強要し、

三段目RCがヒットしていれば空中コンボ波動HSで地上に引きずり下ろしたら、

密着有利からボタンを押すだけで見切りにくい中下段連携起き攻めおかわりだし、

三段目までにヒット確認出来ていれば微ダHS弾黄から知らなければ対応しにくい起き攻めだ。

レオだ。レオホワイトファングを使うんだ。

騙されたと思って敵をサバンナに誘い出して滅茶苦茶に蹂躙するんだ。

2020-11-29

anond:20201129190707

でも、3Dプリンターがなかった時代はその金型までが大変だったんだと思う

3Dプリンターは…、みたいにダラダラ書いたけど、自分なりの結論としては、3Dプリンターは試作用途には断然アリだと思う

精度が多少悪かろうが、ときどき大失敗しようが、基本CAD通りの物体がとりあえず手に入るというメリットは大きい

からCAD3Dプリンターを行ったり来たりして試作を詰めていって、

これ以上ないところまで行ったらDMMに頼むとか金型作るとかが3Dプリンターの使い方としていいと思う

最終完成品を3Dプリンターで作って一般消費者に売ろう、とか考えると失敗すると思う

Togetterのまとめのどこだったか失念したんだが、3Dプリンターミニチュアライフルとか作ろうとしてたと思う

それをワンフェス?だったかその手のイベントで売りたいみたいなんだけど、そのライフルが曲がって出力されてしまい、

かなり一喜一憂しているのを読んで、あー、光造形でも理想通りにはならんのだなー、と思ったり

うろ覚えだけど、光造形だとたしか印刷する位置によって、真ん中なのか端っこなのかで精度が変わるとかあったと思う

FDMでもあるw普通にあるw

同じ部品を一度に多く欲しいときに、コピーして並べて出力するわけだけど、その出力結果が配置した位置によって精度が異なってしま

ネジみたいなものだと致命的

まあネジを出力するのは3Dプリンターパフォーマンス自慢的な意味合いもあるので、規格にあるネジなら3Dプリンター出力はオススメできない

ネジ以外の部品も同様で、規格にある部品ホームセンターに行ったほうが無難

でも、3Dプリンターがない時代だったら、樹脂材ならプラ板とかエポキシパテとかプラモフルスクラッチまがいのことをしなければならなかったけど、

それに比べれば3Dプリンターの方が断然楽ではある

から3Dプリンター無駄な代物ではないのだけど、夢を見すぎて買うと痛い目に遭うと思う

買う前にThingiverseとか見て、こういう使い方だったらできるのかなあ、と購入後の使い道を想像してみるといいと思う

https://www.thingiverse.com/

GitHubにもロボット作ったり人工知能の車とか作ってる人がCADデータSTLがあるので探してみるといいか

Thingiverseの注意点は、絶対投稿者本人が出力してないだろ、と思えるような精巧すぎるものとかはスルーした方が無難

あと、いいね!みたいな評価が高くても、評価者も作らずにいいね!を押してるので、

作品ごとに、自分も出力してみた、みたいな箇所があるので、それを見て色んな人がそれぞれのプリンターでどう出力されたかを見るといい気がする

まあ「沼」だね

3Dプリンターは沼

でもArdinoのケース作ったり、Arduino組み込んだロボットみたいなの作ったり、やろうと思えばRC飛行機とか作れるし、

自分で出力して、自分で楽しむ、なら問題ないんだよなあ

ときどき夢見すぎる人がいて、これがあれば市販プラモみたいなのコピーし放題じゃん、みたいに思うと痛い目に遭うと思うけど

あと、自分の家の洗濯機排水口の接続部に問題が会ったので、3Dプリンター部品設計して出力して自分で直したw

メーカーWeb調べたら古くてサポート切れてるわ、

賃貸管理人に問い合わせたら、修理業者と一緒に部屋に行くんで都合が良い日を教えろだの、壊したんかーおまえはーみいたいな剣幕で対応されて、

いや、壊してないから、どっちかというと排水口より自分の古い洗濯機問題から、と思って、どうしよーかー、と思ってたんだけど、

あ!3Dプリンターあるじゃん

と思って、排水口と洗濯機の結合部を定規で簡単に測って、簡単部品設計して、まずはPLAで出力

水が流れすぎることが原因だと思われたので、流量制限する部品設計した

2回目の出力で設計問題なさそうなことが分かったのでABSで出力し直した、で数年間問題なく使えてるw

PLAは水に弱いしお湯で変形したり溶けてしまうので

2020-11-24

高いところにいると遅く感じ、低いところにいると速く感じる anond:20201121194314

最近RCカーレース本番でも車体にカメラを設置することがOKみたいで、YouTubeで見つけた動画を眺めていた。

私はRCカーのようなコントロールが非常に苦手で、例えば初代のバイオハザードみたいなのは苛々してプレイすら無理だった。

同時期のDoomQuakeのようなFPS問題ないのでそればかりやっていた。

世代プレステバイオハザードのような定点カメラタスクをこなして動画を観させられるようなRPGが非常に苦痛であった。

一方で同じプレステでもPsygnosisのWipEoutのような洋ゲーは好きだった。

あと初代プレステ攻殻機動隊は今でも好きなゲームである

これもFPSであるが、日本独自実装の苦労も感じられる素晴らしいゲームだった。

ジャンピングフラッシュ!のようなFPS問題なかった。(ただジャンピングフラッシュ!は退屈すぎた

RCカーに設置したカメラ映像自分には非常に好感が持てた。

これはもうレースゲーである

これなら自分のような人間でもRCカー運転する気になるというものである

そもそも最近ドローンHMDの組み合わせによる運転レース常識になっている。

ただ、これはこれでちょっと怖い。

運転が怖いのではなく、振り向かないと後ろが見えないというのが逆に怖い。

HMDマルチコプター運転して自分に衝突させたり、他人に衝突させるのが怖いのである

個人的には寧ろ定点カメラHMDを使わない操作の方がマルチコプター安心できる。

農家RCヘリコプター農薬散布でもよく事故を起こしているような気がする。

あれは当然、定点カメラであるわけだが、それでも事故るのである

自分ポケバイカートちゃん運転したことがないのだが、あれは速度が数字より速く感じられる。

不思議である

速度的には大したことがないわけで、自動車であれば寧ろのろく感じられるかもしれない速度である

しかし、視点を低くしただけで、地面のアスファルトの速い流れが感じられる。

うっかり転倒したら痛いだろうな、と思うわけだが、こういうヒヤッとする感覚自動車に乗ってるときには感じられないものである

ネットで以下の砲神エグザクソンの1コマを見つけた。

https://pbs.twimg.com/media/C0zntbDUUAAiNBW.jpg

視点が高すぎると時速200kmでも遅く感じられることはありえると思われる。

ガンダムのような巨大な二足歩行は実現がほぼ不可能に思われるが、資源採掘などで使われる巨大な特殊車両

ロケットを運ぶような車両でも乗ればそう感じられるのではないだろうか。

同じように、遅々として進まないように感じられる現状、プロジェクトがあったとしても、

それは高い視点から眺めているからそう感じられるわけであって、

低い視点、例えばそれは泥臭い現場であったり、鉄道であれば線路工事している人達には違う速度で感じられるかもしれない、

そんなことを思ったのであった。

眺める高さ、場所によって、その速度の感じ方は変わるのではないだろうか。

2020-07-11

マイナポイント申し込みとの戦いの記録

7月からマイナポイント申し込みが始まったので挑戦する(たかが5,000円に飛びつく貧乏人です)

マイナポイントアプリ必要らしいのでダウンロードしにいく

スマホ対応機種であるが、「お使いのデバイスはこのバージョン対応していません」と出る。

どうもスマホ本体の機種だけでなく、通信事業者対応可否がある模様。(カードの読み取りに通信事業者制限してくる意味不明さに脱帽)

https://mynumbercard.point.soumu.go.jp/doc/nfclist.pdf

仕方がないのでパソコンからやることにし、マイナンバーカード読み取りに必要ICカードリーダーを購入(ソニー PaSoRi RC-S380 2,782円2020/07/11時点)

適当リーダー買って使えないとか辛いのでちゃんと公開されている対応機種を買う

https://www2.jpki.go.jp/prepare/pdf/nfclist.pdf

マイナポイント申し込みには、マイキーIDの発行が必要とのことで、キーを発行してくれるマイナプラットフォームというサイトにいく

https://id.mykey.soumu.go.jp/mypage/MKCAS010/

マイナポイントの予約(マイキーIDの発行)」ボタンを押すとInternetExplore11じゃないとだめだと怒られる。(今どきIE11指定とか大丈夫・・・)

IE11アクセスする(久々に起動)

マイナポイントの予約(マイキーIDの発行)」ボタンを押す

また怒られる

カードリーダーマイナンバーカードをセットした状態じゃないと進めない模様(ちっ)

カードをセットする(非接触リーダーだが、リーダー本体ちゃんと密着セットしないと読み取りエラーになる)

暗証番号を入れる

”予期せぬエラー”とでる(画面が進んだのでカードはずしてた)

カードをセットしたままじゃないとだめらしい。(エラー文の解読難易度の高さ)

ようやく申し込み画面に進む。決済サービス指定画面へ。

自分EDYを常用しているので、EDYで申し込もうとする

決済IDセキュリティコード入力を求められる(なにそれ?)

決済IDとはEDY番号のこと、セキュリティコードとはEDYカード記載されているコードの模様

自分は お財布ケータイEDYを常用しているのでどうすればよいのか調べる

お財布ケータイにはEDY番号はある。セキュリティコードはないとのこと。

さらに調べると、お財布ケータイEDY場合は、楽天EDYアプリから申し込んでと書かれている(楽天EDYアプリからできるのかよ・・・

楽天EDYアプリは入っているので、そこから申し込みしようとする

マイナポイントアプリ必要と言われる(前述の通り、自分スマホ通信事業者が非対応なので使えない。糞が。)

さらに調べると、お財布ケータイEDY場合は、セブン銀行ATMからも申し込みできる模様(セブンに行くのめんどくさい)

さら確認すると、セブン銀行ATMからの申し込み対応開始時期は9/1からとのこと。

終了

結論マイナポイントアプリ対応機種通信事業者場合で、かつ、お財布ケータイEDYの人は、ICカードリーダーを買ったところで無駄になる。申し込みは9/1以降(予定)セブン銀行ATM。それもすんなりできる気がしない。

パソコンスマートフォン以外の申し込み | Q & A | 楽天Edyで困った時は https://support.rakuten-edy.co.jp/faq/show/5932?back=front%2Fcategory%3Ashow&category_id=482&page=2&site_domain=default&sort=sort_access&sort_order=desc

5,000円のために2,782円のリーダーを買い、予約できずに徒労に終わったいう記録でした。

2020-06-12

引っ越しガチャ4回目またしても俺は失敗したようだ 不動産屋は○ね

一軒目

大量のヤスデ出現

毎日朝起きると天井に出現する

不動産屋は適当ガムテープ侵入経路であろう箇所を塞いだが以前変わらず 夢にまで見るようになり引っ越し

二軒目

壁がまあ〜薄い この時期はネット鵜呑みにしていてRC=防音性が高いイメージだけで選ぶ(ヤスデが完全にトラウマになってて早く引っ越したかったというのもあったが)

こんな話し声がはっきり聞こえるのかとただでさえ薄い上に隣人の民度が低く重低音の音楽が鳴り響く

不動産屋に仲介してもらって色々話してもらったが解決せず 引越し

三軒目

上下階の音が筒抜け ここで半分鬱病みたいになってた 

RCマンションでも硬い壁とそうでない壁があることを知り内見で異常に気を使いようやく硬い壁のマンションを見つける

…が上階の音が滅茶苦茶うるさい 足音何かものを落とす音が自分の部屋で落とすより聞こえる 脳に直接叩きつけられるような

不動産相談 変わらず

齢25にして大の男がワンワン泣き遺書まで書いた

部屋のひどさもそうだが不動産大手にも関わらず今までのどこよりも動きが遅く手紙だけでも二週間はかかっていた

不眠がひどくなり目にクマを初めて作った 包丁を手にとって上階のやつを大真面目に殺そうとしたことがあった 階段で盛大に転び冷静になって引き返したが まあそのぐらいブレーキが効いてなかった

貯金もこんな立て続けに引っ越せばすぐなくなる でも何回かまだ引っ越す余裕はあった でもまた次で失敗してお金をなくすとと考えると行動できなかった

そんな折にちょっとした臨時収入に合わせて給付金が入った 

ラストチャンスだと思い引っ越す

四軒目

引き戸がうるさい

内見は数え切れないくらい行った 不動産屋の言うことは信じずにRC最上階、壁が固く音が反響するような所、床はクッションフロア

そんな物件を見つけるには苦労したがやっとのこさ見つけられた

ただ懸念点が一つ引き戸があったこと 今まで住んでいた所にはないものでこういうのの音ってどうですかねと聞いてしまった たまたま不動産屋の年齢が近く親しみ易さが合ったからだろう

答えとしては鉄筋なので安心してもいい 苦情がはいたこともありませんと

なんでか分からないが信用してしまった 自分でも相当心が疲弊していたと思う

住んでみてやっぱり引き戸うるせーじゃねえーか!!

どっちかっていうと閉め方の問題な気がするがパアンッ!!って音が家中に鳴り響くんだよ異常だろ 

現状に関しては今からまた不動産相談となるが解決するかは分からない

クレーマー、神経質なのかと思われるかもしれないが音に関しては全て耳栓をしてそれでも防げなかった上で抗議している

正直もう疲れた 不動産のあのニコニコ顔を見るだけで吐き気を催すレベルまで来た

どうして自分だけどうしてこんなに運が悪いんだと四六時中考えてる 

こんないい加減な紹介の仕方しかしない不動産になんで金払ってるんだ なんでいい加減なやつらを通さないといけないんだ

やってること詐欺と一緒じゃねえか

こいつら○した上で捕まって警察の自供で同じようなことを話してそれがニュースにでも流れるなら世の不動産は少しでも変わるのだろうか

もう多分思考は狂ってる 異常者だろう 今はなんとかギリギリ自分をこうして俯瞰して見れてる

それができなくなったときは本当にニュースになるかもな そのときよろしくなお前ら

2020-02-02

anond:20200202090245

RCマンションを4つ経験してまったく無音だったのは1物件のみ。

もちろん構造にもよるが、隣人の民度によるところが大きい。

隣がキャバクラの寮だったときはさすがに無理で引っ越した。

家賃民度はほぼ相関するので家賃ケチってはいけない。

隣が男か女かも重要

女だったらまだ許せるが男のくしゃみとかゲーム音とかだと殺意が湧く。

引っ越しとき挨拶に行くというのも有効だったりする。

但しこれは民度の高いマンションに限る。

相手が誰か分からないところから聞こえる騒音なのかそうじゃないのかは

イライラ度が大分変わってくる。

賃貸住宅で物音に耐えられない。みんなどうしてるの?気にならないの

何度か引っ越してるんだけど、今回の家が上と隣の物音?に悩まされてる。

今は何かわからないが重低音ずーんって鳴ってる。

夜中は一人の足音が響いていて不眠症になってしまった。辛い。

カーテンの開け締めの音もする。

これでRCマンションなんだそうな。もう精神的に無理になって、管理会社に連絡したが対応は無し。

いろいろ調べたところ、戸境壁の厚みが無いとRCだろうが関係ないとのことだった。

ここで思ったんだが、物件情報に壁の厚みの記載いから、普通に選ぶと音が漏れ物件ほとんどじゃないのかって思った。

じゃあ、みんなどうしてるんだ?気にならないものなのだろうか?

どうしてますか?そもそも気にならないのですか?

ちなみに、耳栓イヤーマフノイズキャンセリングイヤホン音楽を流す辺りは試したのですが、効果は足りずと感じました。

次の家は分譲賃貸にしたのですが、契約後に壁の片方がコンクリではないことが発覚し、声が漏れてました。

もう精神的にだいぶきていて、こんなに音が気になるなら死にたいぐらいです。

2019-09-02

[]2019年8月はてブあとで読むトップ30リスト

285あとで/2602users 【転職エントリGoogle入社します|Lillian|note

265あとで/1967users 趣味で作ったソフトウェア海外企業に買われるまでの話 - knqyf263's blog

232あとで/1101users 2019夏、先輩が若手に贈る「お世話になった技術書60選」- 入門からガチまで – | DevelopersIO

231あとで/1177users 無料で読めるITまんが 2019年版 - Publickey

225あとで/2284users 【3868】コンサータによって自己連続性を失いつつある | Dr林のこころと脳の相談

220あとで/1144users 【無料公開終了】廃村で見つかった4人の少年死体から始まる民俗ホラーミステリー短編マンガめっちゃ惹き込まれる人たち - Togetter

202あとで/1000users 実はアイデアの宝庫? 刺激的なWikipedia記事150選|INSPIインスピ)|広告デザインアイデア教科書note

195あとで/1803users 平均年齢30歳のIT企業入社した還暦大工。「1カ月お試し」のつもりが一瞬でなじんだ理由 | BUSINESS INSIDER JAPAN

169あとで/829users 独学でWebサービスを作り起業した僕が選ぶ、オリジナルサービスを作る時に便利なツール19個|かずたか@プログラミング独学して起業した人|note

166あとで/1717users 「容姿が悪く、交際経験が一度もない」47歳女性鴻上尚史本音で応える (1/4) 〈dot.〉|AERA dot. (アエラドット)

163あとで/986users 「GitGitHub用語」の可愛いイラスト使用した解説に対して圧倒的わかりやすさを感じる人たち - Togetter

161あとで/1180users 高齢の両親のために、僕が「実家IT化」を目指してやったこと|tayorini by LIFULL介護

160あとで/1191users 徹夜明けに、知らない人とウイグルを旅した日々のこと|砂漠note

156あとで/853users SFマニアからビギナーまであらゆる層を満足させる、オールタイム・ベスト級の傑作SF短篇集──『なめらかな世界と、その敵』 - 基本読書

150あとで/1032users カメラ苦手な人向け 「カメラ大事故を起こさなポイント」が凄まじく参考になると大好評 - ねとらぼ

140あとで/874users 様々なTODOアプリタスク管理方法試行した結果最終的にプレーンテキストに行き着いた話 - みんからきりまで

134あとで/500users IPA情報セキュリティ白書2019」PDF版の無料公開開始! AIIoTなどをテーマ解説 - INTERNET Watch

131あとで/567users 深層学習の数理

131あとで/1130users 圧倒的キャリアを誇る勝間和代が「社会人にもなって、努力や成長なんて必要ない」と語るワケ|新R25 - 20代ビジネスパーソンバイブル

130あとで/983users TR-808開発者、元Roland社長の菊本忠男さんが40年の時を経て、新バージョンRC-808を発表。度肝を抜くサウンド拡張性を持ち無料リリース | | 藤本健の "DTMステーション"

126あとで/588users 秒間100万リクエストをさばく - Google共通認可基盤 Zanzibar - 発明のための再発明

125あとで/991users 15年間務めた会社に退社を切り出したら史上稀にみるクソ展開になった(後編) - 放浪軍師アプリ開発局

125あとで/1168users 香港が大変すぎて、見ていて悲しい|山本一郎やまもといちろう)|note

123あとで/1171users 今さら聞けない「慰安婦問題の基本を研究者に聞く――なぜ何度も「謝罪」しているのに火種となるのか(2019/08/07 19:45)|サイゾーウーマン

123あとで/493users Node.js徹底攻略ヤフーノウハウに学ぶパフォーマンス劣化コールバック地獄との戦い方 - エンジニアHub|若手Webエンジニアキャリアを考える!

122あとで/517users 新 GitHub Actions 入門 - 生産性向上ブログ

122あとで/907users 介護職歴25年、メイプル超合金安藤なつが語る、介護現場のつらさと楽しさ|tayorini by LIFULL介護

121あとで/531users VSCodeコードを書く時に役立つ設定・テーマ機能拡張、知っておくと便利なテクニック | コリス

119あとで/1266users 教育ボランティア出会った小4の子の話|よんてんごP|note

119あとで/714users 「ビジホの朝食バイキング」を極めた達人が教える、出張旅行で一度は泊まってみたい全国のビジネスホテル - メシ通 | ホットペッパーグルメ

2019-08-29

マンションの音がするかどうかは、どう判断すればいいの?

素材か、隣との隙間か、構造かな

 

前のマンションは床を蹴ってもペチペチって音するしコンクリって感じだったんだけど

今のマンションは床を蹴るとボンボンって太鼓みたいに音がする

もちろん上階の足音バンバン聞こえる(隣は居ないのでわからん

どっちも鉄筋で、前者は10階、後者は3階で後者のほうが高級マンション

 

タワマンとかなら響かないのかなと知り合いに聞いたらそうでもないらしい

引っ越す前にわからんのか

 

___

 

ググって調べた

https://ietty.me/magazine/bouon02/

>壁の厚さが200mm以上の物件を選ぶといいよッ!

 

なるほど

鉄筋かRCかとかは関係ないのか

2019-07-13

anond:20190710221728

耐震壁式のRC構造マンションを買え。

具体的には3〜5階建ての団地だ。ただし川沿いとかの軟弱地盤はやめとけよ。

東京は知らんが地方なら400万円も出せば買えるだろう。

マンション耐震基準1981年を境に大きく変わった。

1981年以前に建てられたマンションは旧耐震扱いでかなり安い。

マンション工法にはラーメン構造と壁式構造というのがあって、壁式構造耐震基準は旧耐震と新耐震ほとんど変わっていない。

この壁式構造っていうのは5階建てまでしか作れない。公団公社分譲の団地で多く採用されている。

マンション間取りを見たときに、柱や壁の出っ歯理がなくて平面な壁で構成されているのが壁式構造だ。

リノベーションするときに壁式だと間取りを大きく変えられないから、「中古マンションを買うならラーメン構造おすすめ!」なんて言われているが、耐震を気にするならまったく逆だ。

団地を安く買ってリノベーションして住むのだ。

エレベーターがないのは我慢しろ

揺れにくい地盤団地は往々にして丘の上や斜面に立っていたりするが、坂も我慢しろ

揺れにくさと坂や階段トレードオフだ。

エレベーターなんて無いほうが管理費修繕積立金が安く住む。

団地を買うのだ。

2019-06-14

anond:20190612225831

うちもそんな感じ

書類上はRCマンションなのに、夜はTVだかYoutubeだかの声がいつまでも聞こえ、朝は隣の携帯バイアラーム振動音で目覚める

家賃比較的安いか我慢してるけどね

しかし防音がしっかりした壁ってどう判別すればいいんだ?

この物件の壁だって、叩くと木造のようにドンドン言うわけではなく「ボスッ…」と衝撃が吸収される感じがするから、これなら大丈夫だと思って契約したはずなんよ

2019-06-12

RC造なのに防音大ハズレ物件で大大大後悔

RC造なら防音は大丈夫だろうと思って築浅1Kに引っ越ししたら、これが大外れ。

結構家賃を奮発したんぞ。

かに部屋の主要部分は床が厚くて頼りがいのある質感だけれども、壁が木造かそれ以下の防音性で殺意しか感じない。

マジで、朝は隣人の目覚ましで起きるわけ。ピピピピッって。私の出勤時間まであと2時間あるんですけど。

それで、基本的キッチンへの扉や外への扉を閉める音が、ガチャドン!ってめっちゃ響く。

で、キッチン部分の床板が薄くて何か床下に反響しているっぽくて、RCなのに隣室の足音がドカドカ聞こえる。

そんでさ、土曜の朝はギュイーンて掃除機の音で起こされるわけ。実家かよ。こっちも掃除機使えないじゃないか

なんか大家族で同居してるかシェアハウス並みの気配を感じる。上京依頼ずっと独り暮らしで通してきたので、心落ち着かない。

不思議なことに、洗濯機の音や風呂の流水音は聞こえない。

夜は隣人はめちゃ笑ってる声が聞こえてくる。なにがそんなにおもろいねん?

ボイスチャットか何かをしてるっぽいけど会話の内容までは聞こえない。

昨晩はずいぶんと咳をしていたけど、体調大丈夫

時々隣人が壁にぶつかるドンっという音で、目が覚めたりする。いったいどうゆう生活したら壁にゴンゴンぶつける生活になるわけ?

早朝に大騒ぎしていたこともあったぞ。その日が有給じゃなかったら通報してたぞ。

こっちの音がどこまで隣人に聞こえてるのかちょっと不安なんだよね。こうやって夜中にキーボードつの迷惑だったりするんだろうか。普段ぶつぶつ独りごと行ったり鼻歌歌ってるのも聞こえてるんだろうか。一番困るのはオナってるのも気配で聞かれてたりするんだろうか。はあ耐えられないぞ。

はあ、また20万浪費かよ。絶対引っ越すぞ、次はちゃんと側面もコンクリになったちゃんとしたRC造りに住むぞ!!!!!

田舎地元不動産よ、震えて眠れ。

2019-05-30

2年で3回引っ越し

一軒目

天井ヤスデが出没 

しかも一回ではない毎日

虫が大の苦手な自分は耐えきれなくなり引越

二軒目

隣家がうるさい 音楽が丸聞こえ

仲介業者相談したが解決せず

勇気を出し直接文句を言ったがなぜか逆に悪化

三軒目

ネットで調べるとrc鉄筋なら音は聞こえないとドヤ顔で書き込んである

なら分かった多少値は貼るがしょうがないとrc鉄筋に引っ越し

が二軒目同様騒音問題

今度は足音(物音)である

音の大きさでは耳栓を突っ込めば聞こえなくなった二軒目とは違い三軒目は普通に聞こえる

24時間かいるのか知らんがずっと音がする

正直まともに寝ることもできない

同様に管理会社相談したが解決せず

20代もなかば独身男性であるが情けない話だがこの年でわんわんと泣いてしまった

自分の運のなさと社会理不尽さに

この書き込みも泣きに泣きつくして無の感情で書き込んでいる

日増しに目のクマも増えている

犯罪を犯す人はどんな気持ちなんだろうと思ってたけど最近なんとなく分かってきた気がする

生活の基盤である住居がストレスになるとこんなに"クる"ものだと思ってなかった

引っ越し検討している人 くれぐれも物件は慎重に選んでほしい

まあ不動産は嘘しか言わないが

(いや俺が不細工から悪いのであってイケメン美女ならまたいい物件を紹介してくれる可能性が高いかもしれない)

2019-05-14

anond:20190514224512

https://10mtv.jp/pc/column/article.php?column_article_id=2160

 1つ目は機会費用法という、家事をしていて仕事に出ていなかった時間を、もし賃金の出る仕事に充てていた場合報酬金額を算定する方法です。最低賃金に照らし合わせてみると、平成30年10月時点の最低賃金は全国平均で時給874円なので、1日6時間、365日で計算すると月15万7320円、年収は191万4060円となります

 2つ目はRC-S法という、その仕事職業にしている人の賃金に換算するものです。今回は家事代行サービスで働く人は平均時給が1185円とされています専業主婦家事に費やしている1日6時間家事代行業者の時給で計算してみると、月21万3300円、年収は259万5150円となります

 一方、別の調査結果となりますが、キリンビール株式会社平成28年9月専門家の監修のもとでおこなった「主婦年収シミュレーター」の調査結果によると、専業主婦主夫)が1日に家事に充てる時間は平均5.3時間、その年収はなんと469万8670円という金額になりました。この調査では一般企業給与体系、家事代行サービス市場価格、そして実際に家事を行う主婦主夫)の実感値を踏まえた独自ロジックから算出されたもの上記の結果と比べると、大きな差があることが分かります

 

家事を行う主婦主夫)の実感値を踏まえた独自ロジック

 

なるもの妄信できるセンスわからんなー

anond:20190514224754

都合のいいところだけ引っぱり出して引用するのはねつ造と変わらんぞ

全国の主婦主夫)の平均家事年収は、469万8670円という結果になりました。

家事代行サービスで働く人は平均時給が1185円とされています専業主婦家事に費やしている1日6時間家事代行業者の時給で計算してみると、月21万3300円、年収は259万5150円となります

1日平均6時間家事家事代行サービスに依頼すると、年間で438万円~657万円ものコストがかかることになります(1時間あたり2000~3000円相場から計算)。

 

元請単価月50万、月収18万のIT派遣年収600万みたいな計算やな

2019-01-24

anond:20190124075118

実家 木造一戸建て 1990年

特に気にならなかった。

2階建木造アパート 1973年築 1階角部屋

特に気にならなかった。隣室がしょっちゅう女連れ込んでたが何も聞こえたことなし。

2階建木造アパート 1980年築 1階

特に気にならなかった。自室に大人数で集まって騒ぐこともあったが、後日隣人に謝っても聞こえなかったと言われる。上階の洗濯機(室内)や掃除機だけは振動が伝わるのか聞こえた。

4階建RCマンション 1978年築 4階角部屋(現住居)

特に気にならないが、特別かになったとも思わない。部屋に隣接しているエレベーターが古くてうるさいので、その音だけは聞こえる。

まともな木造建築は存在する。2000年代以降は不明

2019-01-18

anond:20190118084824

RC(鉄筋コンクリート造)

SRC(鉄筋鉄骨コンクリート造)

・軽鉄(軽量鉄骨造)

・鉄骨造

その他たくさんあるぞ。

突っ込む前にググレよw ノータリンかwwww

2019-01-03

anond:20190103184241

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//

	int blocks[100][100];

	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);
		x = 0;
		y = 0;
		boxType = 0;

		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		for(int x = 0 ; x < 100 ; x++)
		{
			for (int y = 0; y < 100; y++)
			{
				blocks[y][x] = 0;
			}
		}

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int x;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48*9,48 * 100 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	int boxType;

	BOOL WriteBoxOLDBox()
	{
		int width = 24;

		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 48));
		for (int y = 0; y < 30; y++)
		{
			for (int x = 0; x < 8; x++)
			{
				if (blocks[y][x] == 0)
				{
					continue;
				}

				RECT Rect = { 0,0,48,48 };
				BOOL ret;

				Rect.left = width * x + 1;
				Rect.right = width * (x + 1) - 1;
				Rect.top = width * y + 1;
				Rect.bottom = width * (y + 1) - 1;

				ret = FillRect(hdc, &Rect, hBrush);


			}
		}

		DeleteObject(hBrush);

		return FALSE;
	}


	BOOL WriteBox()
	{
		WriteBoxOLDBox();

		switch (boxType)
		{
		case 0:
			return WriteBoxI();
		case 1:
			return WriteBoxL();
		case 2:
			return WriteBoxZ();

		}

		return TRUE;
	}

	BOOL WriteBoxZ()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left += width;
		Rect.right += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);


		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL WriteBoxL()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 246 , 48));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) -1 ;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) -1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top    += width; 
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left   += width;
		Rect.right  += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL WriteBoxI()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB( 246 , 48 , 48));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		//Rect.left   += width;
		//Rect.right  += width;
		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL SaveBoxI()
	{
		blocks[y  ][x] = 1;
		blocks[y+1][x] = 1;
		blocks[y+2][x] = 1;
		blocks[y+3][x] = 1;
		return TRUE;
	}


	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		if (x > 8) {
			x = 0;
		}
		if (x <0) {
			x = 8;
		}
		if (y > 20) {
			switch (boxType)
			{
			case 0:
				SaveBoxI();
				break;
			case 1:
				break;
			case 2:
				break;
			}

			y = 0;
			boxType++;
			if (boxType > 2)
			{
				boxType = 0;
			}
		}

		this->WriteBox();

		return TRUE;
	}



	BOOL OnKey(WPARAM wParam)
	{
		if (wParam == VK_LEFT)
		{
			x++;
		}
		if (wParam == VK_RIGHT)
		{
			x--;
		}
		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
		break;
	case WM_KEYDOWN:
		{
			MyWindow *target = MyWindow::find(hWnd);
			target->OnKey(wParam);
		}
	break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

anond:20190103170543

テトリス

落ちてくるブロックの描き方

わかりやす関数化してみた

まずはブロックの種類は3種類

 

WriteBoxLとWriteBoxIとWriteBoxZ

の違いをよく見比べて

自力で違いがわかれば

プログラマーにはなれるとおもう

とはいえ、コレを自力でわかるならもっと儲かる仕事あるとはおもうけどな

 

	BOOL WriteBox()
	{
		switch (boxType)
		{
		case 0:
			return WriteBoxI();
		case 1:
			return WriteBoxL();
		case 2:
			return WriteBoxZ();

		}
	}
// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//
	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);
		x = 0;
		y = 0;
		boxType = 0;

		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int x;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48*9,48 * 8 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	int boxType;

	BOOL WriteBox()
	{
		switch (boxType)
		{
		case 0:
			return WriteBoxI();
		case 1:
			return WriteBoxL();
		case 2:
			return WriteBoxZ();

		}
	}

	BOOL WriteBoxZ()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left += width;
		Rect.right += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);


		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL WriteBoxL()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) -1 ;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) -1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top    += width; 
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left   += width;
		Rect.right  += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL WriteBoxI()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		//Rect.left   += width;
		//Rect.right  += width;
		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		if (x > 8) {
			x = 0;
		}
		if (x <0) {
			x = 8;
		}
		if (y > 8) {
			y = 0;
			boxType++;
			if (boxType > 2)
			{
				boxType = 0;
			}
		}

		this->WriteBox();

		return TRUE;
	}



	BOOL OnKey()
	{
		x++;
		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
		break;
	case WM_KEYDOWN:
		{
			MyWindow *target = MyWindow::find(hWnd);
			target->OnKey();
		}
	break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

anond:20190101175055

テトリス風?プログラムに向けて

第何回だろうな

キー入力を追加した

まだ、何を押してもブロックが右に移動するだけ(右端にいくと左にワープ

タイマー自動落下

 

でもまぁ ここまでサンプルがあるとほぼテトリスは見えてきた

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//
	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);
		x = 0;
		y = 0;

		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int x;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48*9,48 * 8 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
		RECT Rect = { 0,0,48,48 };
		Rect.left = 48 * x;
		Rect.right = 48 * (x+1);
		Rect.top = 48 * y;
		Rect.bottom = 48 * (y+1);
		if (x > 8) {
			x = 0;
		}
		if (x <0) {
			x = 8;
		}
		if (y > 8) {
			y = 0;
		}
		BOOL ret = FillRect(ps.hdc, &Rect, hBrush);
		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL OnKey()
	{
		x++;
		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
		break;
	case WM_KEYDOWN:
		{
			MyWindow *target = MyWindow::find(hWnd);
			target->OnKey();
		}
	break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

2019-01-01

anond:20190101174626

こんな感じ

GetMessageの上にタイマーも扱える

MsgWaitForMultipleObjectsExを追加

GetMessageだとタイマーを処理できないのでPeekMessageに変更

>なぜかは ちょっと考えると面白い

Getとき必要なかった 終了処理を追加

msg.message == WM_QUIT

この部分 QUITメッセージが来たら終了する

obj == WAIT_TIMEOUT

タイマーを追加

y++で高さを変更してから

作画を呼ぶ

こんだけ

<が<

>が&GT

&が&

にかわっちゃってるので各自で置換してね

	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48,48 * 8 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}

anond:20190101172100

タイマーを使ったアニメーションを付けた

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//
	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);
		y = 0;

		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48,48 * 8 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
		RECT Rect = { 0,0,48,48 };
		Rect.top = 48 * y;
		Rect.bottom = 48 * (y+1);
		if (y > 8) {
			y = 0;
		}
		BOOL ret = FillRect(ps.hdc, &Rect, hBrush);
		DeleteObject(hBrush);

		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

2018-12-20

anond:20181220233124

世界一の国と比べて遜色がない時代があったんだよ。

コンクリートだと広島大の田澤先生自己収縮を発見し、東大前川先生RC構成則をバリバリ作ってた時。

IPSとかもそうだけど、何かを発見する余地がある時は日本人は強いと思う。(発見したもの勝ちなので政治大学内間、省庁とかのね)とかに作用されにくいからかな?)

今のコンクリートは分かりすぎてしまって(まだ分からんとこはたくさんあるけど)、みんな迷ってるんだよね。

中国みたいに新しい材料を使いまくればまだ何かあるかもしれないけど、日本で新しい材料絶望的に使われない(主に建築基準法のせい)。

技術書とは離れるかもしれないけれど、そういう状況だと、人口多い方が有利なのかなと思う。まぁ人口だけじゃないかもしれんが。

2018-09-04

anond:20180904162710

fだおおっみいり落ちjjfiojewjjiewじじょいd塩jj2位vjij2jvkl2v57cdcd2p2mocdンvンvpvivijvp929ijhuhvh@vンj@ンjcジョnoi vjvjivivジョッジ2ジv ji 2ji2vhvうhvvkdjkfoa;mwowowiwopaa@a03-r00kf,g.:b;.rc[.0-[.-ita4bm90yj,l\.],^4wi9-

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