「TOP」を含む日記 RSS

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

2019-02-25

ワキガだが

まずワキガは全員腋毛剃れ。これは大前提

原因はアポクリン腺から~じゃないんだ。清潔にするのに毛が邪魔なだけ

次に手術は要らない。でも毎日ケアが面倒なら受けろ。昔ほど再発率も高くないし、再発してもケアでどうにかなるレベル

最後に、毎日ケアはかかすな。再度だが腋毛は剃れ、ちゃんと洗え、除菌しろ、デオナチュレ塗れ。正直デオナチュレでも臭うなら手術レベル。こんなもんか、効かないじゃない。お前はTOPレベル

間違っても制汗剤だけは止めろ。甘い匂いと臭さで吐くぞ

腋毛剃らずにケアとか甘え。剃れ。全身脱毛でも良いぞ

そしてワキガじゃない人。ワキガは指摘してやってくれ。もちろん相手はショック受けるかもしれないけど、匂いケアは皆がすべきことだから。むしろ怒って絶交して何もしない奴なんて、ただのテロリストから離れたほうが良い

善意で教えてやってくれ。大半の人はケアするし、臭わなくなったらそれも言ってやれ。凄く喜ぶから。言わないとまだ臭いのか気にしてノイローゼになる。臭かったら臭い。臭くないなら臭くない。伝えるの大事

2019-02-16

はてブTOPおすすめカテゴリが「グラミー賞

「人気」エントリが4つしかない。

http://b.hatena.ne.jp/hotentry/all/%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%BC%E8%B3%9E

その「人気」エントリ4つ全てが「新着」にもダブってる。

http://b.hatena.ne.jp/entrylist/all/%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%BC%E8%B3%9E

「新着」なのに、1ページ目に1年以上前ファーストブクマされた記事が載るほどに記事数が少ない。

はてな社がどういう基準おすすめカテゴリ決めてるのか謎すぎる。

2019-02-11

ホーチミンで使っているサービス

日本から駐在で行ってる。自分が使っているサービスベトナム語は読み書きできないので、英語で展開もしているサービス、というのが必須になってしまう。android app。

https://anond.hatelabo.jp/20190202071054

https://anond.hatelabo.jp/20181129233609

https://anond.hatelabo.jp/20190203001248

Grab

rideshare。何はなくともこれ。現在位置と行き先を入力すると、そのへんのおっちゃんが拾いに来てくれる。

最高。

Vietnam には car, bike, food, deliveryが来ている。わたしbikeをよく使う。foodは一回だけ使った。

UberはSouth East Asia撤退した。ただ、Grab一強ではなく、Go-JekのGo-Viet, あと最近Be ってのもよく見る。

Vietnammm

food delivery. vietnamでたぶん一番強いのは foodyのNowってアプリ。ただ、店のメニュー英語じゃないことが多く、わたしVietnammmのほうが好き。vietnammmはfoodpandaのベトナム事業を買収している。

- ただしその場合ベトナムクレジットカードでもpaypalレートが乗ってしま

lazada

楽天、aliexpress的なやつ。市場でモノを探して歩くとか、値段交渉を楽しむとか、全然楽しめないタイプなので、多少手数料載っててもこういうほうがよい。で、手数料載ってるかというと、lazadaのほうが安い。配送料入れても。

その店舗が、Ha Noiにあるのか、Ho Chi Minh Cityにあるのかで、ものダメときに返送したり保証したり対応してもらう必要があるようで、それを気をつけたほうがいいらしい。aliexpressから注文して送りますって書いてある個人輸入とは、みたいなshopも多い。

もの結構届かない。忘れた頃にキャンセルされて返金されることもある。あと保証付きのもの壊れても電話するの怖くて保証めしたことない。意味ねえ。

店ごとの満足度、軒並み40%50%60%でびびる。ふつう9x%じゃんそういうの。でもそういうものらしい。ベトナム人すぐ電話かけるんだけど、「電話かけても出ない☆1」みたいなレビュー多くていやいや、って気持ちになる。

ベトナム語からないので、配送ラストワンマイル鬼門会社に送って誰かが受け取ってくれるのがベスト会社はたまったものではなさそう。

超巨大荷物バイクに乗せて配送してくる。強い。

alibaba傘下。

Foody

食べログyelpてきなやつ。近くをこれで探す。レビューがある程度数ある中での、点数を見てる。そんな絞り込みあんまりしないらしく、これで絞り込むことは出来ないし、点数やレビュー自体どんどん端の方の機能に追いやられている。注文とかそっちに寄せて行ってる。

特定urlからアクセスすると、まとめてオーダーできる機能がある。

使い方: inviteのurlslackで送られてきて、そのurlから注文すると、いろんな人の注文が1個にまとまってオーダー行く。注文親側では使ったことないけど注文子側で使ったことある。支払いは注文親に現金でする。wechat pay決済圏ほどにはまだ。

TripAdvisor

味覚がベトナマイズされてきてもはやこれが日本から来た人にすぐ美味しいか判断できなくなってきているので、欧米人の評判をチェック。

Facebook

店の予約はだいたいこれ。お店のfacebookページから、連絡する。何日、何時、何人、で予約!ぐらいの英語大丈夫

booking.com

ホテルの予約。あと民泊との境目ぐらいのやつも。なんでbooking.comを使い始めたのかはよく覚えていない。perlからかな。

itviec

software engineer募集はこれ一強。ほんとについ先日マイナビに買収された。

zalo

ベトナムだけで使われている国産チャットツール。みんなつかっているみたいだけど、わたしには毎日の天気と気温がpushされてくるサービスしかなってない。あと、ごくたまにgrabのおっちゃんからzaloでも電話かかってくる。友達ではない。仕組みはよくわからない。

zing mp3

みんなよくカラオケで歌うので、わたし中学生高校生以来に歌を練習しなくては。みんなが使ってるのがこれ。歌詞on/offができる。権利関係本当にクリアかは不明日本IPアドレスから提供サービス範囲外なので、って弾かれる。

youtube動画をそのまま歌うことも多い。

これを、スピーカーカラオケ機で再生して歌う。グレー。黒ちゃうの。

Transfer Wise

日本からベトナムにはこれが一番安く安全に送金できる。ベトナムから国外送金はtransferwiseではできない。

Money Lover

おこづかいちょう。timo普通口座をaggregationできるのでありがたい。

Timo

銀行口座のようで銀行口座でない何か。VPBankが出資して作っている。work permitなくても、ビザがあれば、銀行口座のような何かが作れる。キャッシュカードが持てる。海外から送金するときには、VPBankの該当銀行口座に振り込むと、timoで使えるようになる。前出のtransfer wiseなどをつかう。裏では銀行口座作っているんだけど、って感じの処理ぽい。VPBankの銀行口座銀行口座として使えるわけではない。海外への送金は出来ない。

timo同士で個人間送金普通に使いやすい。携帯料金のtop upもこれでできる。mobifoneもvinaphoneも。

work permit後は、timoのmaster cardも持てる。使ってすぐにpush notification来るのが便利。

30shine

チェーン美容院アプリ。日時と店舗で予約取れる。店舗では英語通じない。店舗店員によると思うけど。

My VNPT

vinaphoneのアプリプランを選んだり、今の使用量を確認したりできる。前は英語がなくて全然意味がわからなかったが、最近ちょっとずつ英語が増えている。月4.5usdで1日2GB使えて無料音声通話も何分かあるプランにしてる。意味がわからない。このプラン新規半年だか一年だか限定なので、そのうち切れる。

BusMap

バス停留所時刻表、今どこにいる、など便利にわかる。まだ、空港発のバスしか乗ったことがない。

2019-02-07

おまえらは知らないかもしれないが「ダミーENTER」という文化があった

個人サイトの話をするといつも思い出す。

 

個人サイトっていうのは、体感だがフレームページが多かった。

多分、その時のトレンドで左にずっとメニューが並んでいるのがかっこいい時代だったんだ。

フレームページがTOPページだと駄目」という噂が流れて(これなんでだったんだろ?当初はGoogleもそこまでメジャーじゃないかSEOもそこまで気にしなくてよかったしフレームページにコンテンツがなくてもサイトディスクリプションを設定できたはず。)

みんなこぞって「ENTERページ」を作るっていた。

もちろん、それ以外にもR18禁サイトゾーニングにも使われたが、エロサイト以外でENTERページがあるのはほぼフレームをつかったレイアウトだったと記憶している。

 

ENTERページっていうのはこういう感じだ。

増田のページへようこそ!

 

以下の規約を読んでからENTERを押してください。

  1. キリ番は報告してください
  2. 荒らし禁止です 
    荒らしに反応するのも禁止です
  3. 直リンク禁止です。

  1. ネチケットについては[毒吐きネットマナー]を一読ください。

 

上記の内容に同意できた方のみENTERからお入りください。

ENTER

まぁ細部は違うがこんなもんだ。

 

でも、個人サイト管理人は頭を悩ませていた。

愉快的に荒らすような連中がどこにでもいて、ちょっと掲示板を荒らされて、それでも反応してしまう奴がいる。

 

利用規約に書いてあるのに…。

 

そこでサイト管理人は頭を使った。

読んでないと絶対に入れないようにすればいいんだ!と。

そうなると以下のようになる。

増田のページへようこそ!

 

以下の規約を読んでからここを押してください。

  1. キリ番は報告してください
  2. 荒らし禁止です 
    荒らしに反応するのも禁止です
  3. 直リンク禁止です。

  1. ネチケットについては[毒吐きネットマナー]を一読ください。

 

上記の内容に同意できた方のみ一番上の文章を読んでからお入りください。

ENTER

ページにはいるには

以下の規約を読んでからここを押してください。

の「ここ」を押すのが正解で、読んでいれば入れるという仕組みだ。

 

じゃぁ、読まずに「ENTER」を押すとどうなるか?

 

利用規約も読めないんですか^^;

 

~ 思いつく限りの罵詈雑言 ~

 

とっとと帰れ^^;

こうなる。

 

盛りすぎ!と思われるかもしれないが、ほぼこんな調子だった。

 

今はENTERページ自体をみなくなったため、この文化はなくなった。

それでも、俺はお気に入りに入れてたページを開いていつものようにENTERから入ろうとした時、いきなり罵詈雑言を受けるという仕打ちを何回も受けたことを忘れられない。

 

でも、それが許されてるから、むしろ管理人の心の闇を見れたんだよな。よかった。

2019-02-05

中韓陰謀安倍のような無能日本首相をやっている

もう無能すぎて無能すぎて、コンビニ店員すら落ちるようなレベルの爺さんが日本首相だ。

知恵遅れの人に申し訳ないが、安倍は間違いなくその類だ。

なぜここまでの大馬鹿日本首相に??町内会会長ですら厳しいだろ??

これは中韓陰謀である

そりゃ敵国のTOP無能であれば無能であるほど勝手に自滅するだけだから戦う手間すら省ける。

案の定日本はいつまでも利権優先、年寄り優先、若い世代無視して徹底的に少子高齢化拍車をかけるような政策をしてきた。

その挙げ句移民大国にしようともしている。こんな閉鎖的な社会でそんなことをやったら、社会問題が山のように増えるに決まってるだろ。

安倍馬鹿すぎて、アメリカロシア安倍は大好きだ。馬鹿すぎるし操るのは朝飯前だ。

中韓だって、ここまで安倍馬鹿だと日本なんて完全に格下扱いだ。

こんな馬鹿首相にしてしま日本の仕組みはもう崩壊している。愛国心がある人間なら許せるようなことではない。

これは確実に中韓日本政界コントロールされ、馬鹿リーダーにするように仕向けた他ないのだ。

ネトウヨと言われる犬以下のIQと言われるゴミカス共も実は在日日本を内部から破壊しようとする工作員なのだ

あん馬鹿を支持するってありえないだろ?

今日捏造に大忙し。日本首相安倍であるということも捏造されたに違いない。

増田が繋がらない

トップページに行くとはてラボに飛ばされる

https://anond.hatelabo.jp/?page=1&mode=top

とりあえずこんな感じで手を加えると普通どおり見られる

この記事見てる人は問題ないだろうが

2019-02-04

クソオタクの盛大な自分語り独り言

クソオタクの盛大な自分語り

思いついたこから書くから支離滅裂

改めて見返したら下に行くにつれ語彙力無いし30%くらいは愚痴挟んでるし方言出てる。

贔屓が今日劇場卒業したんだけどめちゃめちゃ悲しいね。みんなこれをどう乗り越えてるんだろう。

どうしても外せない用事があって東京千穐楽に行けない。見に行ってもいいよって言われたけどそれはそれでなんか違うよなって思った。

でもそっちを選んだんだからもうグチグチ贔屓かなしいよぉ;;って言ってたら先輩にしばかれそう。こわい。

それに周りのみんなは推しのことをスクショ撮ったり推しのことについて語りに語ってたんだけど私はリアル全然語ってないし「え、そんなに贔屓のことすきじゃないでしょ」って言われたくないな。言わないと思うけど。みんな優しいから。愛の形にはいろんなものがあると思うよ。私はTwitterで吐き出しておわるやつだよ。

贔屓らしい贔屓は七海さんが初めてだったな、確かに最初はみりおちゃんのことが1番好きだったけど他の人も贔屓~~♡ってなってたもん。

初めて贔屓を見たのは元宙組トップスター凰稀かなめさんの退団公演「白夜の誓い」「PHOENIX宝塚!」

その頃は別の人が好きだった周りの人の影響でかなめさんばかり見ていたよ。贔屓の印象は「あーーー銀橋で歌ってた人な」って印象だった。でも多分ちょっと気になってた。何故か。てか今思うともう少し行くチャンスあったから行けばよかった。白夜が苦手すぎて行かなかったけど。

その次多分「TOP HAT」で見た。かわい~~~~~!!!!!って思った。せーこさんとの絡みとか。でも惚れたわけではなかった。まだ他の人が好きだったから。そこで組替えするんだーって知った(遅い)

キャッチミーイフユーキャンガイズアンドドールズもラブドリも見てない。予定と被ったのと宝塚その時そんなに好きじゃなかった。アホや。過去自分ぶん殴って見に行けって言いたい

こうもりは見に行った。めちゃめちゃ面白かった。でもここはなんか七海さんより礼真琴の方が気になった。謎。歌だったんかな、礼真琴くんしぬほどうまいから

あと好きだった人の贔屓をやめた。理由ファンが怖すぎるからマジで怖い、てか代表さんが怖かった。あと相手役に対する態度が前と次で変わりすぎて嫌になった。でも今は割と好き。

こん時ぐらいに七海さんのブリドリみて惚れた。舞台じゃなくてブリドリで惚れるとかあかん気もするけどええやろ。だってあんなんあかんやん。イケメンすぎる。かっこいい。

周りの人がかなめさん贔屓だったかBDとか過去の組本とか借りていろんな作品見た気がする。それで本格的に七海さんが好きになったな。私は歌が上手くて声が低くて踊れる人が好きなのに、お世辞にもそこまでって感じなのに(もちろん私みたいなクソクズ人間よりお上!!!!)なんか惚れちゃったな。お芝居が上手いからかな。間違いねえな

ハマってから見に行った初めての公演は「桜華に舞え」この七海さん好きだった。プロローグのあのポニテ七海さんがすき。桜華に舞え自体が好きだった。泣いちゃった。ロマンス伯爵夫人が好きすぎた。てか贔屓の女役が好き。ロマンチックレビューってなんだよ。絶対眠くなるじゃんって思ったけどそんなこと無かったね。楽しかった。

燃ゆる風取れなかったよ。今だったら死んでも取りに行ってたけど今より好きじゃなかったんだろうなってか思い出した諦めてたわ。取れんから諦めてた。諦めが早い方なので。日本物苦手だからいっかなーって思ってた。スカステで見た今見にいけよ!!!!!!殴りに行きたい。そうなると転売ヤーから買う羽目になるかなあ。ファンクラブに入れって話やね

「THE SCARLET PIMPERNEL」 とても大好きなロベスピエール閣下かわいい。美しい。かっこいい。狂気。そんなロベスピエール様が好きでした。ソロで泣いた。ショヴとの絡みが大好きだったなぁ。あと礼真琴くんのひとかけらの勇気ますぎん??めちゃめちゃ好きだし病んでる時に聞いて癒された。てかなんでほぼほぼ関わってる間ずっと病んでたのにその原因とずっと仲良くしてたんだろう。さっさと離れればよかったのに。

あ、それと七海さん関係なくなるけど「A motion」で和希そらくんにもハマりました。ラップできるなんてずるいよ!!!

うまいし踊れるし声低いしどタイプだった。トーク上手いし

オームシャンティー・オーム」 好きです。ムケーシュ様の色気ハンパねぇタバコ好きになった要因でもある。匂いは嫌いだから絶対に吸わないけど!

バラ色の人生、メチャメチャに上手かった。ムケーシュ様は死に際が好き。愛があるね。若ムケーシュも老ムケーシュも好きだよ。かっこいいね

ベルリン、わが愛」 んーーー悪役じゃない七海さん久しぶりな気がした(そうでもない)から七海さんの役は好きだった。ベルリンオチすっきりしないけどな。やっぱりこれとか作ってる某脚本家苦手です。私が馬鹿から合わん。

「Bouquet de TAKARAZUKA」 某七海さんのあの投げキッスシーンが大好き。まぁ様の血を感じてしまったし、まずかっこいいし泣いた。毎回泣いてんなこいつ。あと礼真琴歌うますぎた。

うたかたの恋見てない。受験だった。だから東京WSSポーも見てない。BADDYも生で見てない。自分が選んだことだから仕方ないけど悲しいな。うたかたの恋はスカステ流れたからよかったけどWSSは二度と流れないから死にたくなったわ。そらくんアニータはいつ見れるの?

ANOTHER WORLD」まじ可愛いなおい!!!!!研16だからこそ出せる可愛さ!!!好き!!!あとこの公演は単純に楽しかった。

「Killer Rouge」 マスクブルージュちゃんがすきでーーーーす!!!!!!好きすぎて好き。罪な薔薇も好き。贔屓めっちゃ真ん中似合うな。びびった。あと情熱の嵐も好きだなぁ。七海さんが死ぬほどかっこよかったし、礼真琴が歌上手いから。踊ってるし。この礼真琴の舌ペロが好きすぎてちょっと惚れそうになったよ。

あと、台湾公演って知って「アッあかんそろそろ退団のこと覚悟しよ」って思ってお茶会に行った。握手した。死ぬかと思った。七海さんは実在したんだ。さらに惚れて今更ながら会に入った。おっそ!!!!!!!!

七海さんの話じゃなくなるけどハッスルメイツは見に行けたの!!チケット取れた!!そらくんが近かった。ボヘミアンラプソディよかったなぁ…ボヘミアン・ラプソディ知る前に聞いたから「ヘェめっちゃ英語じゃん歌うっま」って感じだったけど。

「東離劍遊紀」 かっこいい。ただただかっこいい。男の中の男。主役やん。好きやで。七海さんが好きそうな男だなって思った。私も好きだよ

「Killer Rouge」 黒髪マスクブルージュちゃん可愛い!!!!!!!好きだ!!!!!

あと個人的やっぱり情熱の嵐の方が好きだった。なんで消したん?版権?まあお亡くなりになったからなぁ…まああんまり関係ないと思うけど。多分。

ディナーショー行きたかったな。別ジャンルライブチケット友達に取ってもらったし悪いなとおもったかディナーショー行かずにライブいったけど正直ディナーショー言った方が良かったなとは思うなぁ。なんであのライブあんなに歌下手くそなん?あ、でもライブのあの感じは好きだった。9900円の価値があったかと言われると否。

霧深きエルベほと

ビアス結婚したい。ただそれだけ。トビアスフロリアンがぶつかるシーン一番好き。永遠に会わないような2人があってすごい邂逅って感じで好きだったよ。トビアスさんめちゃめちゃ煙管かっこいいね。すき。あとフロリアンとも結婚したい。最後叫び声好きだ。

エストレージャス

意外と不評だったけどファンシーガイよりマシでしょ。個人的には馴染みやすい曲つかうよーーーって同じ系統のGHよりもすきだよ。放送だけじゃなくて舞台見てほしい 多分贔屓目500%だからあんまり信用しない方がいいけど。贔屓いたら全部楽しくないですか?そんなことない?たしかに。私も黒燕尾の選曲アレンジそんなに好きじゃないよ。

POP STAR場面でボロ泣きした。星に願いをしんどい。投げキッスありがとう

「行かなくちゃ 桜の花びらが散ってしまう前に」って何?泣かせに来てるの?毎回涙腺大崩壊だった。あとプロローグの足ヤバない?綺麗すぎ無理

羽根背負って降りてくれてありがとう

エストレージャスのお茶会も行けました。レポ禁だからあんま言えないけど、七海さんの歌声には真心がこもってました。七海さんが本当に優しいお人柄でファン想いの素晴らしい方なんだってことが再認識出来ました。

それと、七海さんお誕生日おめでとうございました。

私は七海さんのファンの端くれだし貢献度もないけど、七海さんの事が好きな気持ち古参の人に比べたら負けると思うけど本当に好き。好きなことに変わりはないです。

本当に七海さんのことが大好き。ありがとう

夢を見させてくれてありがとう

宝塚七海さんで夢を見ることはなくなったけど、これからも夢を見させてください。

悔いがないといえば嘘になりますが、

いつまでも大好きです。応援してます

東京も頑張ってください!!!!!!!!!!!!!!!!!!!!!!!!インフルエンザに気をつけて!!!!!!!!!!!!!!!!!!!!

2019-02-01

anond:20190201115716

社員がどうなろうと知ったこっちゃない。僕の理想に付いてこれる人だけで良い

スタートアップ企業には適しているけど、あの大企業リーダーとしては不適切。早めにTOP変えたほうが良いわ。前澤がやりたいことは、もう少しZOZOの土台が安定してからの方が良い

スーツ程度でここまで影響出るのは異常。まさに雰囲気経営

2019-01-31

Webエンジニアが避けるべき転職

転職活動ストレスが溜まっているので備忘録愚痴吐きとして。

人売りSES

* 言うまでもなくクソなので行く価値なし。

* 見分け方はみんな知ってるだろうし割愛する。まあ勤務地は東京23区内とか書いてあったら香ばしいですよね?鼻腔に入ってこないで欲しいよな。

* 「多彩な案件経験」したければ派遣免許取ってちゃんとやってる会社に行きます違法スレスレ人材屋を選ぶメリットあるか?

* こういうクソを紹介してくる無能転職エージェントは生まれてきたことを後悔するほど苦しんでから死んで欲しいものであるSESには興味ないって言っただろうクソが。

* ただ連中は節操なく人を採りまくるので、万が一の滑り止めとして一応受けておく選択肢はある。もちろんその際は次の次の転職先を探す必要があるので本当に最終手段である

* 判断に迷うのは受託や自社開発とSES両方やってるパターンSESという後ろ暗い商売で儲けていることに罪悪感を感じていて、真っ当な道に進みたいと思っているのかもしれない。人売り人材屋にしては比較良心的な可能性はある。少なくとも首までどっぷり商流に漬かってるクズよりはマシである可能性が微粒子レベル存在している。黒いSES灰色SESかを面接などで見極めるのも場合によってはアリ。

* でもやっぱ関わりたくないよな。SES企業営業前世でどんな罪を犯したんだろう。あん仕事をして生き恥晒しってるってことはよっぽどの大罪だと思うんだけど。

Webサイトダサい

* これマジ?2019年にもなってそんなWebサイト大丈夫?客来るの?という企業はたまにいる。社長の頭にウジでも湧いてんのかな。

* 感性10年くらい前で止まってる。まだ人生半ばなのにもう死体みたいな顔してるジジイしかいないか自分のところのWebサイトすらメンテできないほど余裕がないか、それか経営陣が自社サイト重要性を理解していないアホなのか。なんにせよ地雷

* 「今風にしようとしてるけどダサい」というパターンもある。Web系の企業じゃなければまあ仕方ない面もあるが、もしWeb系の企業ならデザインセンスがないというのはわりと痛い。デザインセンス無いくせにWebデザイン受託とかやってるならもう本物のアホだ。人に売る前にまず自前のクソみたいなWebサイトをどうにかしろ私たち楽天市場デザインした間抜け野郎の親戚です、なんてアピールしてどうすんだよ客来ねえぞ。

* そもそも企業イメージや信頼に直結するWebサイトちゃんとしてない時点で色々アレな企業なのでは、という疑念が湧く。

* また、ちゃんと今風で問題のないデザインだけどダサいと感じる場合もある。これはこれでその企業文化あなた感性が合わない可能性が高い。どっちにしても避けたほうが良い。

webサイトUIがクソ

* お前んとこのサイトmixiみたいな操作性してるな。

* 一度しかたことないけど、その昔モバイルで表示が崩れるWeb制作会社がおったのじゃ…。

* デザインの方は「感性が合わないだけ」という逃げ道があったがはっきり言ってこっちは救いがない。技術屋が技術力のなさを晒したらもうおしまいでしょう。

* バカを見てると頭が痛くなるんだよ勘弁してくれ。

固定残業費があまりに多い

* みなし残業自体の是非は判断が分かれるところだが、とりあえずここでは少なければOKとしたい。そうしないと選択肢が大きく減ることになるからだ。

* といってもみなし残業なんてやってないに越したことはない。こんなのは給与を額面だけ高く見せつつ人件費を抑えたいセコいやつらのやることだ。その企業が儲かっていないか、あるいは社員から1円でも搾り取ろうとしている証拠である

* 個人的には20時間とか30時間ならまあ仕方なし、40時間を越えると黄色信号、と判断している。この辺の基準は人によって変わるだろう。

* 過去に「60時間分の固定残業費を含む」とか書いてる間抜け野郎がいた。新卒初任給22万は残業代を引くとほぼ最低賃金であるスタババイトでもしていたほうが時間あたりの給与は上なのだ。アホか、と思い僕はそっとタブを閉じた。

* こういうクソの山を紹介してくる転職エージェントはぜひ生まれてきたことを後悔するほど苦しんでから死んで欲しいものである

企業名に特徴が無さすぎる

* 経営者に思想センスがない証拠

* 起業なんて所詮は金儲けの手段。やってることはただの技術屋。だとしても、なんやかんやで思想というのは重要だ。企業は生き物なのだから

* 果たして思想センスも持ち合わせていない経営者に人が付いていくだろうか?教養のない実務家が求心力を持ち得るか?答えはノーだ。

* この辺は人によって考え方は変わるかもしれない。少なくとも筆者は避けます。人はパンのみで生きるにあらず、というあの古い言葉を信じているからです。

企業理念などに中身がない

* これも上記と同じ理由

* 意識高く見せようとしているけど薄っぺらさを隠せてない企業は多い。学のない経営者ってのは悲惨なもんですね。労働法経営者は守ってくれないしな。

* こういう間抜け野郎に騙されないためにも人には教養というやつが必要なのだ

経営者に魅力がない

* Webサイト代表挨拶とかありますよね、そこに経営者の顔写真が載ってるやつ、よくありますよね。そいつの顔をよく見てみましょう。うわぁこいつキモいなとか、うわぁこいつ悪そうだなとか思ったらやめといた方が良い。人を顔で判断してはならない、なんてのは綺麗事である

* 人柄は顔に出るんだ。だからおまえに備わった直感という名の経験知を信じろ

* 魅力のない人間には魅力のない人間しか集まって来ない。だから経営者に魅力のない企業社員にも魅力がない可能性が高い。高いエロティックキャピタルを持った人間は相応の場所に行くものである

* ああい経営者ってアホづら晒して恥ずかしくないのかな。自分だったらもう街歩けなくなると思うんだけど。まあ経営者って人種恥知らずからな。

* もちろんこれは顔が良いかいかというような話ではない。顔に滲み出る人柄の話である

* 体は食べたもので出来ている。しかし顔を形作るのはその人間の魂の総体なのだ

弊社は顧客第一です

* 顧客第一ということはつまりそう、分かりますよね。従業員二の次なのです。

* まあ、ありがちな売り文句ではあるのでこの文言があったら即黒、というほどのもんではないと思う。見極めよう。

* ただ、こんなことを書いてしま企業センスがないことに変わりはない。この言葉が優秀な求職者を遠ざけるマジックワードであることに気付いていないのだから。まあ採用担当間抜け野郎なだけかもしれないし多少はね?

* 顧客第一と言うのなら、では貴社にとって株主は何番目なんですか?などという質問をして採用担当を困らせるのはやめよう。

* でも気になるよな。こういうこと言ってる企業にとって株主って何番目なんだろう。株主差し置いて顧客第一とはけしからん!とか怒られたりしないのかな。

レガシー技術を使っている

* 正直これ重要だと思うんだけどなんでこんな下の方に来たんだ。

* 上で書いた兆候からある程度探れるもんだとは思う。Webサイトデザインがあからさまに古かったりしたら使ってる技術も古い可能性が高いよな。URLが「〜〜〜top.php」だったりしたらヤバそうだよな。

* その企業が自社でWebサービス展開してるなら一度は見ておこう。デザインUIURLラーメタなどから読み取れる情報は多い。

* まあどの程度これが問題になるかは人によるか。個人的にはこういうのは大嫌いです。

取引先には大手企業が多数!

* もしかして:人売りSES

* 人売りSESじゃなかったとしてSIerと関わってるならやめた方がいい。SIerなんてろくなもんじゃない。奴らと仕事をするくらいならい話題マナー講師にでもなった方がまだマシだね。

* どっちも炎上するしな(激ウマジョーク)

* まあ本当に大手企業と直で取引してるなら良いと思う。見極めるべきか。取引先以外にアピールポイントがない感じだとアレだけど。

* エンジニアにとっては取引先なんかよりも、自社内にどんな開発環境があるか、どんな仕事ができるか、技術力を磨けるか、ってところの方が重要じゃないですかね?人によるかな?どうなんだろう。

Webサイト画像アイコンフリー素材サイトから持って来たやつ

* 即アウト、というほどのもんではないけど、まあセンスないよね

* アイコンはともかく、画像があからさまにフリー素材ってのは期待値を下げる要因になりはしても上げる要因にはなり得ない。

* でかでかと貼られたぱくたそ写真素材は、「弊社は自前で素材を用意することもできなければ有料の素材を買う金銭的余裕もございません」と高らかに宣言している。

* ぱくたそ自体は良いサービスです。こんなクソ記事名前出しちゃってゴメンな。

社員顔写真が載ってる

* なんの罪もない労働者生き恥を晒させるクズだと思うんだけど、どうなんでしょうね。人によるのかな?

* そこそこのブランドがある企業ならともかく、無名零細企業自分顔写真が晒されるとかCIAが開発した新手の拷問手法か何かか?

* この新しい拷問は、クソみたいなサイトデザインと合わさることでより強い効力を発揮することが知られている。

なんかしっくりこない、ダサい自分がその会社幸せに働いているイメージが湧かない

* 明確な地雷兆候が見えない会社なのにこう感じるのだとしたら、それは「合わない」ということだ

* こういう嗅覚は案外バカにならない。あなたは識閾下で何かしら良からものがあると感じているのに、ただそれを言語化できていないのだ。

* 仮にこれが勘違いだとしても働きたいと思えない会社面接行くのしんどいしね。



以上。

あーすっきりした。

ここおかしいだろとか、なんでこれがないの?とかあったら突っ込んでください。今後の転職活動の参考にします。後半雑になったのは自覚してる。

2019-01-30

はてブTOPからブクマ数をクリックして

コメント一覧ページへ移動する際、一瞬画面がフリーズ(1秒ぐらい)する時があるんだけど、俺だけ?

スペックでは無いWin10で見てます。ほかのサイトでは起こらない。

2019-01-28

嵐の活動休止

いや、大して国民全員興味ないよ

なんでTOPニュースレベルの大騒ぎなんだよ

芸能ニュールのTOPくらいでいいだろ。なんで国家の損失みたいな空気なの?

2019-01-26

貧乏くじひきまくった時の話

ふと貧乏くじひきまくる中学生時代を思い出したので吐き出し。

自分コミュ障なりそこそこ青春謳歌した。

当時は溢れ出る正義感と、ずっとつるむ友達はいない程度のコミュ力、そこそこの成績もあって

委員長的なのを押し付けられたもした。

そういったものに喜んでたのも小学校中学年くらいまでで、

どんどん「まとめあげる」的な中間管理職的なことの難しさだとか、

色々言われるのにも疲れて正直「向いてないな」って思ってた。

でも学期ごとのそういったもののの選出は名前が上がり、向いてないと正直に言いつつも結局やることになるのがほとんどだった。


それでも、文化祭だとか祭りごとは大好きで、

行事のための看板製作などは喜んで参加してたし、そうのには関わることはしたいと思ってた。

そういったものに最も関われるのは何か? そう、生徒会だ。

その流れで生徒会立候補するのは、自分でもまっとうな理由だったと思っている。

だがしかし、そこには大きな壁があった。

生徒会は内申にしっかり書かれ、影響する。そのため、やりたがる人間が多かったのだ。



自分中学校の生徒会選挙は1年任期。毎年3学期に1,2年が、投票する。

正直、自分容姿は良くない。演説もうまくない。

そこそこ付き合いのある同学年はともかく、何もしらない下級生、上級から票が入ってる気がしなかった。

おそらく同学年からも入ってないとは思わないが決め手なるほどの支持を得られてなかったのだろう。その程度のコミュ力だった。


だがしかし、まだチャンスはあった。

その後に選出される議長は、ほぼ生徒会と同じ行動をし、行事に関われる。

幸い自分は何度も役職を任された経験上司会を何度も経験し、そこそこできている自覚はある。

しかもこれは

・必ず2年生から

・先に決まった次期生徒会長と2年の担任たちの意向

で決められる。

他に枠はなくこれが最後のチャンス。だがしかしこれなら任されると思った。

…が、落ちた。

選ばれた子は友人だった。

だがしかし、その子は内申+αが目的で、本当にそういった仕事をしたかったのではないのは感じていた

生徒会とそれ以外では関われる行事や行動が全然違う。

生徒会長もよく知った中ではあったし、教師受けもよかった(実際、担当した教員から「この役職が向いてる、推薦する」とお墨付きももらっていた)。

だがしかし自分が良くないと思ったことは曲げられないタイプで「扱いにくい」と感じられていることも自覚していた。

多分敗因はそこだろう。そう自覚しつつも非常に悲しく悔しかった。

結局その他、内申に関係する「生徒会」と各種委員長

それまで面倒を避けてたような要領の良い子が7~8割(もしかしたらそれ以上)が占め、

いままでコツコツとクラス委員会運営を支えて来たような子たちはほとんど落ちていった。





それからしばらく進みできる限り行事に関わるものに参加しつつ、結果受け入れて生活していた。

中学3年にもなると受験意識し、更に「◯◯長」をしたがる人間が増えた。

総合的な学習の班分けも同様だった。

郷土関係することをテーマを分けて発表する、という内容だったのが、

自分が興味をもって提案したテーマ希望者が自分しかおらず、

他の希望者多数のテーマに組み込まれた。しかしそれでもやっぱりそのテーマちゃん学習したくて立候補した。

だがしかし、昨年までが何だったのかというくらい希望者多数となり、じゃんけんで負けた。

勝者は正直、同学年の支持がない子だった。

案の定自分のやりたかったテーマは影が薄れ、忘れ去られ、それでもやることはやって着々と作業を進めていた。

そして発表時テーマ班長は決まっていながら、それとは別に発表の「監督」を複数人選出することになった。

もちろんこれは内申に影響しないし、監督になると発表する側にはなれない。

そして後半は発表に準備だけになるし、実質、監督が指揮を取ることになる。

「船頭多くして船山に登る」状態になるのには反対したが通らず、やはりそこで自分担当することになった。

(今思えば、それまでの行動で求心力がなかった班長で進めるのを避けたかったのかとも疑っている)


発表側をやりたかった自分は不承不承、しかし決まったものは仕方ないと全力で発表に向けて走り回った。

発表側になった班長や、人員が不足したときつのまにか発表側に回った同じ監督だった子を羨ましいと思いながら。

そして発表当日、班長の子に嫌味を言われた。

確か、小道具場所を把握してないのは監督としてどうか、的なことだったかと思う(余談だが小道具係は別にいる)

些細なことだし苦笑いしてやり過ごしたが、これまでのことでパンク寸前だった自分にはだめ押しとなって

本番中誰も来ないところでうずくまってこっそり泣いた。

ちなみにこの後も班長やらかしくれた。


そして部活も同じようなものだった。

部長副部長は生徒の投票を加味して「顧問が選ぶ」という方式だった。

当時の部活は「顧問VS部員」の構造があった。その結果、明らかに顧問が付き合いやすい」

だが部活内での求心力はそこそこの子を選んでしまった。

「票が入ってないわけではない」と強調していたが、密な付き合いのある部員間の話では

それが嘘でなくても1,2人いる?という票数であるのは皆察していた。

ぶっちゃけ得票数TOPの子たちは顧問に不満は持ってなかったんだから

部長はそこから選べばよかったのに、と思う)

その結果、顧問が転属して居なくなると「部長副部長VS部員」の対立構造に変わり、

部長副部長が居づらい環境になり、不満を持つ子たちが言うことを聞かず、落ち込んでいってるのがわかった。

自分比較的その子達と仲良かったのもあり、緩衝材として連絡する、仕切る、やきもきするという謎の構造ができていた。

正直この行動は部長たちの孤立を加速させ、良かったのかは自分でも疑問であったが、そうしないと団体行動も怪しい状況だったのだ。

結果、最初に話した議長/各種委員長でもあった2人は生徒会に入り浸り、ますます対立を深めていった。

これに関しては正直、仕方ないことだと思うし、それほど2人は追い詰められて居たと思う。

だが、生徒会室で仕事がなくても談笑した姿をみると自分が本気でやりたかたことを逃げ場にしていること、

その一方で自分がやりたくもないことばかりしている状況にがすごく虚しかった。

その気持を抱えながら部活動はやりとげた。



今でもこの一連の流れは思い出す。

あー、内申ももらえないし、バイト代がでるわけでも無いのに、

評価もされ… あ、いやこれは幸い一部からはしてもらってた。

まあ、その程度でなにやってるんだろう、明らかに貧乏くじじゃないか

そして残念なことにこの正確、環境は今でも変わってない。


根本的な理由は「やりたがる」「でしゃばりたがる」正確と長年いじられ続ける容姿

心意気をうまく伝えられないコミュ力プレゼン力であり自業自得だ、と自覚している。

本気で「義」を理由に口を出ししても、「自己のため」と誤解されることも多々ある。

そこを変えないと…と思いつつも、「誰かがやらないといけないこと」をやり続けても「やりたいこと」がやれない思い出を愚痴らせてほしい

2019-01-18

anond:20190118195636

弊社、40時間の固定残業

そのためか40時間までは残業させろというTOPの風潮

末端は「一生懸命仕事してるのにまだ足りないのかよ」とモチベーションダダ下がり

2019-01-03

anond:20190103193157

結構面倒

過去ブロックを覚えておく領域

int blocks[100][100];

過去ブロックを再描画

	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;
	}

この辺は めんどくさくはあるけど みてわかってほしい

描画したWriteBoxとおなじ BOXが落ちた場所BOXの有無)を保存しておく

ここがわかりにくいといえば わかりにくい

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

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:20190103155208

これで、ブロックを4つ書くからテトリス

	BOOL WriteBox()
	{
		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;
		}

		this->WriteBox();

		return TRUE;
	}


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:20190101174449

描画部分の違い

変数 y をつかって

高さが8までで移動するように

yが変わると■のいちも変わるから

タイマーで呼び出されるたbに

下へ 下へと作画される

から まぁ アニメーションに見える

8のところを16に変えれば もっと長いアニメーションになる

次はタイマー部分を説明

	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;
	}

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-26

[] Masuda Advent calendar 2018

日付担当者URL
11/30(金)増田明日から!!!
12/01(土)増田そうだ 京都、行こう。
12/02(日)増田リフターツインpaのない家庭は悲惨だ。恐ろしい恐ろしい。
12/03(月)増田京都はオーバーツーリズム?
12/04(火)増田ルンバを使うのって手抜きじゃない?
12/05(水)増田「クックドゥ」って表記、変じゃない?
12/06(木)増田京都の歩道が狭い
12/07(金)増田これもシュリンクフレーション?
12/08(土)増田はてな、SEO弱くなった気がするんだけど。
12/09(日)増田プエルト・リコのような
12/10(月)増田パナソニックのジェットタオル
12/11(火)増田車あずける→代車 ストーブあずける→代ストーブ?
12/12(水)増田「風邪でも、絶対に休めない あなたへ」
12/13(木)増田午後ティーChaiがヌルい
12/14(金)増田はてブTOPのおすすめカテゴリが「アドベント」
12/15(土)増田週末は、ふるさと納税の広告ラッシュ
12/16(日)増田サンタの味
12/17(月)増田「期間限定 10g増量」
12/18(火)増田こんなルンバがほしい
12/19(水)増田♪エビバデ ワイモバーイル
12/20(木)増田膝で棒をへし折る
12/21(金)増田『けいおん!』の聖地巡礼いってきた
12/22(土)増田♪ベル打っても返事はなっしー だっしー
12/23(日)増田平成末期における外タレCM事情
12/24(月)増田想像もできなかった未来
12/25(火)増田Adventうんたらかんたら
12/26(水)増田Masuda Advent calendar 2018
12/27(木)増田増田は餅つき終わった?
12/28(金)増田「プレミアム冷蔵庫」って何?
12/29(土)増田平成最後のカレンダー
12/30(日)増田風情ある京都の町並み
12/31(月)増田次元号の増田アドベントカレンダーで、また会いましょう

2018-12-16

世界文学ベスト100」の英米バージョンを調べてみた

文学ベスト100と検索すると、国内に限ってもいろいろなランキングが出てくる。英語圏では、ベスト100を選んだときどのような小説ランクインするのか、気になって調べてみた。

そうすると、日本と同様にたくさんの種類のランキングが出てくるが、これらをひとつひとつ紹介するのも退屈だ。

から、それなりに信頼がありそうないくつかのランキングを選んで、それらにくり返し選出されている作品名をここに挙げてみたいと思う。

なにをもって信頼があるというのかは難しい問題だが、だいたい以下のような基準を満たしているランキングだけを取り上げることにした。

英語圏文学に偏っていないこと

 英語検索しているからには、英語で書かれた小説が多くランクインするのは当然なのだが、英語圏に限らず、世界文学を選出の対象にしていることを条件とした。なので英米文学オンリーとかなのは避けた。

・あまり最近小説大衆小説を選んでいないこと

 2000年以降に発表された小説割合が高すぎたり、「ハリー・ポッターシリーズ」のような、あまりエンタメ寄りの小説を選出しているものは除外した。

 「ハリー・ポッター」が文学かどうかは知らないが、それが文学ベスト100に選ばれているランキングが参考になるかというと、あまりならないんじゃないかな。

古今東西作品から選ぼうとする意思が認められるもの

 どのランキングにしても19世紀以降の西洋文学に偏りすぎなのだが、そこはもう仕方がない。


このような基準で選んだランキングは以下の4つ。検索すればソースはすぐ出てくると思う。

ガーディアン誌による「The 100 greatest novels of all time」(いつ誌上に掲載されたのかはわからなかった)

Goodreadsによる 「Top 100 Literary Novels of All Time」(国内でいうと読書メーター読書ログみたいな位置づけのサイトユーザー投票して選出している)

・Modern Library(アメリカ出版社)による「100 best novels」

アメリカ文学Daniel S. Burtによる「the Novel 100: A Ranking of the Greatest Novels of All Time」(同タイトル書籍がある。Burtは英文学講師をしていたらしい)

4つのランキングのうちすべてに選出された作品は、ナボコフの「ロリータ」と、ジョイスの「ユリシーズ」の2つだった。ロリータすごい。

4つのランキングのうち3つに選出されたのは、以下の28作品

タイトル作者
インドへの道 フォースター
アメリカの悲劇 ドライサー
アンナ・カレーニナトルストイ
すばらしい新世界クスリ
回想のブライズヘッド イーヴリン・ウォー
キャッチ=22 ジョセフ・ヘラ
ドン・キホーテセルバンテス
失われた時を求めてプルースト
フィネガンズ・ウェイクジョイス
見えない人間ラルフエリソン
ジェイン・エアシャーロット・ブロンテ
白鯨メルヴィル
アメリカの息子 リチャード・ライト
ストローコンラッド
オン・ザ・ロードケルアック
百年の孤独ガルシアマルケス
カラマーゾフの兄弟ドストエフスキー
ライ麦畑でつかまえてサリンジャー
善良な軍人フォード
怒りの葡萄スタインベック
グレート・ギャツビーフィッツジェラルド
緋文字ホーソーン
響きと怒りフォークナー
ブリキの太鼓ギュンター・グラス
崩れゆく絆 チヌア・アチェ
灯台へヴァージニア・ウルフ
火山の下で マルコム・ラウリー
嵐が丘エミリー・ブロンテ


このうち22作品はすでに読んでいた。

けっこうそれっぽいタイトルが並んでいるように見えるが、日本ではほとんどなじみのない作家も中にはいる。ジョセフ・ヘラーとかフォード・マドックス・フォードとか。

フォードの「善良な軍人」が翻訳されているかはわからなかったが、これを除けばすべて翻訳で読むことができる。すばらしい。

12/19追記

ブコメの指摘からフォードの"The Good Soldier"(上では「善良な軍人」と訳した)は、「かくも悲しい話を…」という邦題翻訳されていることがわかった。ありがとう

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