「E+」を含む日記 RSS

はてなキーワード: E+とは

2020-03-01

Message for DIALOGUE+

https://youtu.be/dxyFwdCsABU?t=140

ゆーな「これからは私がみんなを支えるので」

やかん「いっぱい失敗しちゃうと思うけど」

ねーね「こういうおっきいところで8人で歌って踊って」

さっぴ「名をこの日本に轟かせたい」

きょんユニット活動とかできないって思ってて」

まゆゆん「こんな仲間っているんだなって」

まなてぃ「友達誰とかいわれるともう一番にみんなの顔が浮かぶし」

ゆりにゃ「ダイアローグとして歩んでいきたいって思ってます

2020-01-31

VIMを使っていて gfファイル開くときVue.jsとかで

import fuga from '@/hoge/fuga.js'

みたいなファイルパスプロジェクト任意ディレクトリを示すアットマークが入っている謎のインポート表記があるやつを開く方法

autocmd FileType vue setlocal isfname+=@-@  includeexpr=substitute(v:fname,'^@/','src/','')

2019-04-06

作画資料参考ページ

個人用メモ

クロッキーカフェ有料化についての情報

ttps://twitter.com/hisayo_w000/status/1350801173595316224

クロッキーカフェ instagramページ

ttps://www.instagram.com/croquiscafe/

https://e-hentai.org/g/1383297/605020f175/

平成同人物語

https://e-hentai.org/tag/parody:getsuyoubi+no+tawawa

月曜日のたわわ

ttps://chan.sankakucomplex.com/?tags=himura_kiseki%20order%3Apopular

月曜日のたわわ(sankakucomplex)

https://e-hentai.org/g/1568331/7eb9441874/

ららまじチューナーノート2

https://e-hentai.org/g/1520949/67a7887ed5/

[よー清水]「キャラの背景」描き方教室 CLIP STUDIO PAINTで描く! キャラの想いを物語風景技術

https://e-hentai.org/g/1511811/c6c1574bad/

[isuZu] プロが教える!CLIP STUDIO PAINT PROの教科書

https://e-hentai.org/?page=9&f_cats=767&f_search=official&f_sname=on&f_stags=on&f_sr=on&f_srdd=5&advsearch=1

景教本が特に多いページ

ttps://e-hentai.org/g/1483978/1f6473e191/?p=4

クロノトリガーアルティマニア

ttps://e-hentai.org/g/1508441/aa361ba353/

聖剣伝説LOM キャラクター設定画集

ttps://e-hentai.org/g/1581326/3fc1dc150a/

ミカピカゾ

ttps://danbooru.donmai.us/posts?tags=mika_pikazo

ミカピカゾ2

ttps://e-hentai.org/g/1489415/90f6b1c158/?p=2

ファイアーエムブレム設定資料

ttps://e-hentai.org/?f_cats=34&f_search=megami+magazine&advsearch=1&f_sname=on&f_stags=on&f_spf=&f_spt=

メガミマガジン

ttps://e-hentai.org/g/1353102/869b408c7e/

ごちうさ画集

ttps://e-hentai.org/g/1338066/466687e162/

アズールレーン一周年記念画集

ttps://e-hentai.org/g/1526505/50eed6bb19/

機動警察パトレイバー設定資料

ttps://e-hentai.org/g/1559166/2b371b13b1/

RocksyChan 赤ずきんコス

ttps://e-hentai.org/g/562431/389777fa90/

良いドレス資料

ttps://danbooru.donmai.us/posts?page=4&tags=love_live%21+official_art+

ラブライブオフィシャルアートワーク

ttps://danbooru.donmai.us/posts?tags=atelier_%28series%29+official_art

アトリエシリーズオフィシャルアートワーク

ttps://danbooru.donmai.us/posts?page=1&tags=hibike%21_euphonium+official_art

響け!ユーフォニアム

ttps://danbooru.donmai.us/posts?page=1&tags=tamako_market+official_art

たまこまーけっと

ttps://danbooru.donmai.us/posts?page=1&tags=k-on%21+official_art+

けいおん!

ttps://yande.re/post?page=1&tags=houkago_no_pleiades

放課後のプレアデス

ttps://yande.re/post?page=1&tags=fantasista_doll

ファンタジスタドール

ttps://e-hentai.org/g/1076222/6a007e40b0/

Cave Shooting Art Works

ttps://yande.re/post?tags=disc_cover

CDジャケット

ttps://danbooru.donmai.us/posts?tags=mandrill

mandrill氏イラスト集

ttps://danbooru.donmai.us/posts?tags=kantoku

カントクイラスト集

ttps://danbooru.donmai.us/posts?tags=kanzaki_hiro

かんざきひろイラスト集

ttps://danbooru.donmai.us/posts?tags=namori

なもりイラスト集

ttps://danbooru.donmai.us/posts?page=1&tags=nardack

nardack氏イラスト集

ttps://chan.sankakucomplex.com/?tags=hanamura_mai%20order%3Apopular

hanamura mai

ttps://chan.sankakucomplex.com/?tags=narumi_arata%20order%3Apopular

arata narumi

ttps://chan.sankakucomplex.com/ja/?tags=monable

monable

ttps://chan.sankakucomplex.com/ja/?tags=mokyu

mokyu

ttps://chan.sankakucomplex.com/ja/?tags=mmu

mmu

ttps://chan.sankakucomplex.com/ja/?tags=utako_yukihiro

雪広うたこ

ttps://chan.sankakucomplex.com/?tags=non-web_source%20order%3Apopular

non-web source

ttps://chan.sankakucomplex.com/?tags=dengeki_girl%27s_style%20order%3Apopular

dengeki girl's style

ttps://danbooru.donmai.us/posts?tags=whoisshe

whoisshe

ttps://danbooru.donmai.us/posts?page=2&tags=anmi

anmi

ttps://danbooru.donmai.us/posts?tags=tiv

tiv

ttps://danbooru.donmai.us/posts?tags=misoni_comi

misonikcomi

ttps://yande.re/post?page=3&tags=shirabi

shirabi

ttps://yande.re/post?page=2&tags=range_murata

村田蓮爾

ttps://danbooru.donmai.us/posts?page=1&tags=ataruman

ataruman

ttps://yande.re/post?page=1&tags=cuteg

cuteg

ttps://yande.re/post?page=3&tags=oyari_ashito

大槍葦人

ttps://danbooru.donmai.us/posts?page=1&tags=kuroboshi_kouhaku

黒星紅白

ttps://danbooru.donmai.us/posts?page=1&tags=momoko_%28momopoco%29

momoko

ttps://danbooru.donmai.us/posts?tags=necomi

necomi

ttps://e-hentai.org/g/1515496/7385b962a1/

幻像黒兎

ttps://danbooru.donmai.us/posts?tags=naruko_hanaharu

鳴子ハナハル

ttps://danbooru.donmai.us/posts?page=6&tags=narumi_arata

鳴海アラタ

ttps://danbooru.donmai.us/posts?page=1&tags=nishihara_isao

いさお

ttps://danbooru.donmai.us/posts?tags=shigure_ui

しぐれうい

ttps://danbooru.donmai.us/posts?page=1&tags=nekometaru

ねこめたる

ttps://danbooru.donmai.us/posts?tags=himura_kiseki

月曜日のたわわ

ttps://danbooru.donmai.us/posts?tags=u_jie

u介

ttps://danbooru.donmai.us/posts?page=1&tags=kkuem

kkuem

ttps://danbooru.donmai.us/posts?tags=mery_%28yangmalgage%29

mery

ttps://danbooru.donmai.us/posts?page=1&tags=akizone

akizone

ttps://danbooru.donmai.us/posts?tags=kagawa_yuusaku

香川悠作

ttps://ocolorboard.tumblr.com/

ocolorboard

ttps://danbooru.donmai.us/posts?page=1&tags=lf

If

ttps://danbooru.donmai.us/posts?page=1&tags=handheld_game_console+official_art+

携帯ゲーム機を持つポーズ

ttps://danbooru.donmai.us/posts?tags=heart_hands

手でハートを作るポーズ

ttps://chan.sankakucomplex.com/?tags=shopping+order%3Apopular+%E5%85%AC%E5%BC%8F%E3%82%A2%E3%83%BC%E3%83%88&commit=Search

買い物シチュエーション

ttps://danbooru.donmai.us/posts?page=1&tags=undressing+official_art+

海外版:脱衣シチュエーション

ttps://danbooru.donmai.us/posts?tags=novel_illustration

ノベルイラストレーションラノベイラスト集

ttps://danbooru.donmai.us/posts?tags=hiota_no_kanojo_ga_ore_no_motteru_eroge_ni_kyoumi_shinshin_nandaga......

ttps://danbooru.donmai.us/posts?page=492&tags=multiple_girls+official_art+

multiple girls 492ページ目

https://e-hentai.org/g/1393321/d6d6ceb56b/

https://e-hentai.org/g/1211889/df9210a0f8/

https://e-hentai.org/g/1307324/9b7765cdb4/








仕事が来たという報告があったサイト 他に情報が上がれば随時追加

 ・pixiv

 ・TINAMI

 ・アイラブユカンパニー ttp://www.iloveyou-company.com/

 ・アビルダング ttp://abbildung.jp/

 ・Arrows ttp://www.arrows-g.jp/

 ・アンシャントマン ttp://www.mangaculture.com/

 ・Ameizia ttp://ameizia.co.jp/

 ・アクア ttp://aqua-web.co.jp/

 ・S-TRIVE ttp://s-trive.com/

 ・EXYS ttp://exys2008.com/

 ・オートクチュール ttp://hautecouture.jp/

 ・Ga-show ttp://ga-show.co.jp/";

 ・Qmax ttp://www.qmax.co.nz/

 ・クラウドゲート ttp://www.crowdgate.co.jp/

 ・QBIST ttps://www.qbist.co.jp/

 ・クラウドグラフィックス ttp://crowdgraphics.jp/

 ・クラゲ ttp://crage.co.jp/

 ・クリークアンドリバー ttp://www.cri.co.jp/

 ・グレープ ttp://www.grapee.co.jp/

 ・グレイゾーン ttp://gray-zone.biz/

 ・グラフィクト9 ttp://graphict9.jp/

 ・グラホリック ttp://grapholi.com/

 ・サーチフィールド ttps://plusgeek.jp/

 ・C2 ttp://www.c2inc.co.jp/

 ・サイドランチ ttp://www.sideranch.co.jp/

 ・サンバード ttp://sun-bird.jp/

 ・SeAL ttp://seal-web.jp/

 ・スカイリンク ttps://sky-link.co.jp/

 ・スタジオハードデラックス ttp://www.hard.co.jp/

 ・Skillots ttp://www.skillots.com/design/

 ・スポマ ttp://spoma.jp/company/

 ・テクノアート ttp://technoart-tokyo.com/

 ・デジタルハーツ ttp://www.digitalhearts.co.jp/

 ・デジタル職人 ttp://digishoku.co.jp/

 ・トゥーザワールド ttp://totheworld.jp/

 ・PANDAGRAPHICS ttp://panda-graphics.net/

 ・Permission ttp://www.permission.co.jp/

 ・フロンティアエージェント ttp://www.frontier-agent.co.jp/

 ・BookLive Artstudio ttp://booklive.co.jp/artstudio/

 ・フーモア ttp://whomor.com/

 ・フーム ttp://www.foom.co.jp/

 ・マグノリアファクトリー ttp://magnolia-factory.com/

 ・水野プロダクション ttp://www.mizunopro.co.jp

 ・ムゲンアップ ttps://station.mugenup.com/

 ・Monoii ttp://www.monoii.jp

 ・ベアトリックス ttp://www.beatrixx.co.jp/

 ・ロータス ttp://www.lotus-creative.net/

 ・ロフトワーク ttp://www.loftwork.jp/

 ・ランサーズ ttp://www.lancers.jp/

 ・Wakka ttps://www.wakka-illustorder.com/

 ・キュートロン ttp://www.qtron.jp/index.html

 ・ex-design ttp://www.exdesign.info/

 ・Asian Bridg ttp://graphics.asianbridge.jp/

 ・トラスロッド ttp://trussrod.jp/

 ・ORATTA ttp://www.oratta.net/

 ・ツジヒール ttp://tsujiheal.com...contact/recruit.html

 ・シリコンスタジオ ttp://www.siliconstudio.co.jp/

 ・Lavan7(マエストロ?) ttp://maestro-work.com/

 ・フロンティアクリエイターズプロジェクト(FCP) ttps://fw-fcp.jp/


261名無しさんお腹いっぱい。2020/02/02(日) 21:51:40.21ID:eRB+DOb2

>>258

自分もツイとかシブやってなくて飛び込み面接ポートフォリオ持って仕事貰いに行ったわ

全くの素人(デッサン赤まみれレベル)だったけど普通に仕事貰えて今まで悶々としていたのは全て無駄だった事に気がついた

上手くなるには~とか、仕事受けられるレベルは~ってのは自分妄想が混じる

仕事金も貰えて更に勉強も出来る素晴らしい環境

263名無しさんお腹いっぱい。2020/02/02(日) 22:07:41.75ID:wA0UU6Qz>>264

上手くなって何とかしようという発想しかねぇわ

飛び込み面接とかムリムリカタツムリ

264名無しさんお腹いっぱい。2020/02/02(日) 22:20:28.70ID:eRB+DOb2

>>263

企業から「上手いです!仕事受けて貰えますか…!?」ってのを期待するのが勘違い

「なに?仕事欲しいの?…じゃあお前でもできる仕事これな」って感じでもいいから何か仕事する

気がついたら仕事絵は増えていき、いつの間にかその絵を見た他企業からお仕事受けて貰えますか…?」に変わるよ

下積み時代は年齢的にも早く始める方がいいし、仕事してる時間の成長と1人練習する時間じゃ全く上達具合が違うから後悔してる

2019-01-31

e+登録した

SMS認証はまあいいんだけど認証コード取得のために登録したらすごい勢いで電話がかかってくる

おそらく音声ガイダンスなのだろうけどその電話番号で検索するとアダルトサイト請求とか出てくる

認証コード自体ショートメッセージで別の番号からくるのでユーザ的にその電話必要なく

ユーザ体験としては「e+SMS認証したら秒でアダルト詐欺から電話がかかってくる」

もしかして登録ページ自体が巧妙な偽物で水飲み場フィッシング詐欺なのかな?と思ってしまったしそれを疑い始めると何を信じていいかからなくなる

Google電話番号を検索すると1番上に「ワンクリック アダルトサイト請求詐欺」と出てくるのでガセならe+は訂正なり何かの措置をとったほうがいいのでは?

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

2018-12-23

anond:20181223182722

一気に並べてみる

オーソドックスな書きかた

int i;
int space;
for (int i = 0; i < 8; i++)
{
	for (space = 0; space < i; space++)
	{
		printf(" ");
	}
	printf("Hello world\n");

}

すまん <は半角の<に置き換えてくれ(w)

バッファをつかってループを1つ削る

	int i;
	int space;
	char buffer[8];
	char buffer2[8];
	memset(buffer, 0, 8);
	memset(buffer2, 0, 8);
	for (int i = 0; i < 8; i++)
	{
		memset(buffer, 0x20, i);
		printf("%sHello world\n",buffer);

	}

memsetも削ってみる

	int i;
	int space;
	char buffer[8];
	char buffer2[8];
	memset(buffer, 0, 8);
	memset(buffer2, 0, 8);
	for (int i = 0; i < 8; i++)
	{
		buffer[i] = 0x20;
		printf("%sHello world\n",buffer);

	}

この場合特に影響はないが一般的にはmemsetを使う使わないは大きな影響になるので

memsetを削る場合は注意が必要

C++を使ってみる

	std::string space;
	for (int i = 0; i < 8; i++) {
		printf("%sHello world\n", space.c_str());
		space += " ";
	}

C++を使ってみるの別回答

	std::string space_org;
	for (int i = 0; i < 8; i++) {
		std::string space = space_org + " ";
		printf("%sHello world\n", space.c_str());
		space_org = space;
	}

考察

ざつにかんがえても 書き方いろいろ 

それぞれメリット デメリットが有る

まり まぁ どれがいいというよりは

状況に応じてかき分けていく必要がある

学校の授業などだと

アルゴリズムの話で

ヒープソート マージソート クイックソート比較みたいな話があるけど

そこまで難しい話にいかなくても

ハローワールドだけ見てかつ雑に考えてもこのぐらいは

書き方がたくさんある

どれを書くか?どれがいいか? 考えると面白い

anond:20181223150830

3つともおなじ

int i;
int space;
for (int i = 0; i < 8; i++)
{
	for (space = 0; space < i; space++)
	{
		printf(" ");
	}
	printf("Hello world\n");

}

すまん <は半角の<に置き換えてくれ(w)

	int i;
	int space;
	char buffer[8];
	char buffer2[8];
	memset(buffer, 0, 8);
	memset(buffer2, 0, 8);
	for (int i = 0; i < 8; i++)
	{
		memset(buffer, 0x20, i);
		printf("%sHello world\n",buffer);

	}
	int i;
	int space;
	char buffer[8];
	char buffer2[8];
	memset(buffer, 0, 8);
	memset(buffer2, 0, 8);
	for (int i = 0; i < 8; i++)
	{
		buffer[i] = 0x20;
		printf("%sHello world\n",buffer);

	}

書き直すごとにアルゴリズムちょっとづつ良くなったり悪くなったり

どれがすき?

int i;
int space;
for (int i = 0; i < 8; i++)
{
	for (space = 0; space < i; space++)
	{
		printf(" ");
	}
	printf("Hello world\n");

}

すまん <は半角の<に置き換えてくれ(w)

====

Hello world
 Hello world
  Hello world
   Hello world
    Hello world
     Hello world
      Hello world
       Hello world

2018-12-10

anond:20181210113445

俺はワークブーツちゃん

川底のワークブーツこういうのならそんなに違和感ない。

問題は「楽にはける」という当初の目的から逸脱してること...

2018-10-16

anond:20181016154609

知らんけど、Apple Care+に入ってる前提として、インシデント代は全額過失者負担でも別におかしくないんちゃうかな。(8000円くらい)

壊れる可能性がある中でApple Careに入ってないのなら全額弁償はナシで折半位やろうけど。

2018-09-26

プロデューサーよ、お前らの愛は結局金か?

どうも、元アイマスPです。

元、というのは私はもうすでにPを引退たからです。

現状アプリの類は消去しました。

グッズの類が大量に残っていますが、まぁいずれ処分するでしょう。

今回このブログを書こうと思ったのは、私のとある胸糞悪い経験を吐き出しておきたかったのと、これを見たPさん、あるいはアイドルマスターに限らず、いわゆる課金アプリゲームプレイしてる全ての人に表題の内容を問いかけたいからです。

課金ゲームにおける「愛」は結局課金しか測れないのか?という事

アイマス風の言い方をすれば

プロデューサーの「担当愛」は結局課金額でしか測れないのか?

という事です。

事の発端は2年前、私がサークルの先輩からアイドルマスターを勧められた事に始まります

私はどちらかというとオタクコンテンツはそれなりに嗜んでいたのでアイマスもすぐにはまり、のめり込んでいきました。

アニマスから入り、劇場版で気になった後輩の子達を見てミリオンライブを始め、シンデレラガールズSideMと次々にどハマりしていきました。

改めて説明するまでもないと思いますが、アイマスにはゲームライブがありますゲーム内のガシャを回し、イベントを走って担当SRカードをゲットする。ライブ声優さんパフォーマンスを見て感動して「アイマス最高」と唱える(笑)まぁそんな感じで各々楽しんでると思います

コンテンツ応援するにはいろんな方法がありますゲーム課金する、ライブに参加する、グッズを買う、二次創作をしてみる。

楽しみ方は本来人それぞれであり、それぞれがそれぞれの形で趣味謳歌しています

私の楽しみ方は基本的ライブに参加する事でした。

アイマスにハマった当初、私はまだ学生でした。

学生アルバイトでは月々稼げる金額はどんなに頑張ってもたかが知れています

どんなに頑張っても、社会人が月々稼げる金額になど到底及ばない事は想像に難くないでしょう。

アイマスを含めいわゆるソーシャルゲームには「天井」が設けられていることが多いです。

ガシャなどで「この金額までつぎ込めば必ず目当てのカードが手に入りますよ。」というボーダーラインだ。

ゲームにもよるがアイマスは大体ソシャゲの方は5万くらい、音ゲーアプリの方だと10万程度だろうか。

5万10万など学生にとってはかなりの大金である

それ以上を稼ぎ出せたりお小遣いをもらっていたりと状況は様々だがこの金額を毎月叩き出せる人は全国でもそんなにいないだろう。

さらイベントランキング上位に到達するためにも上記レベル課金はある程度必須と言っていい。

私は各コンテンツ(当時3つ)毎に「担当(他のコンテンツで言うところの「推し」)が複数人いた。

一人がイベントないしガシャで来たら5〜10万ぶっ飛ぶのである

しかもそれが複数人いると言うことは数ヶ月に一回レベルでその出費、ましてやイベントが重なろうものなら倍プッシュである

どんなにバイトを増やして掛け持ちしても追いつけるものではない。

そもそもバイトを増やしたら肝心の学業遊び就活諸々に支障が出る。

でも、担当の事は本当に好きだから何かしらの形で応援したい。

なので私はライブを中心に応援することを選んだ。

ライブなら事前に日程が設定されているのでそれに向けて貯金ができる。

ライブを通じて金銭面でも、気持ち的にも担当コンテンツ応援できる。

そう思っていた。

だが、アイマス布教してくれた先輩(仮にN氏としよう)は違った。

彼は社会人であるしかもどうやらそこそこ良い仕事をしていると見られる。

毎月のように一定数の金額を彼の担当のガシャやイベントに費やし、コンスタント入賞していたところを見ると間違いない。

はいわゆる「ライブ勢」が大嫌いで、「声優ライブを見て何が面白いんだ」

「こいつらがライブにつぎ込んだ金を直接課金すれば良い話だ」

「こいつらは声優オタとしては一流だがアイマスPとしては三流」

などと事あるごとにこき下ろしていた。

まぁ、いわゆる「在宅」というやつである

彼はサークルOBオタク仲間の中の中心的な存在だったため、同期後輩もなかなか彼に意見する事は難しかった。

それを知ってか知らずか、彼はその集まりの中で二言目には「プロデューサー流儀」を語りたがり、「コンテンツ課金できない奴は三流のにわか」という定説を偉そうに唱えていた。

私はミリオンライブが初めて触れたアイマスだったため、イベントの走り方など分からず、中途半端課金額で爆死するということを繰り返していた。

といっても前述した通り、学生にとっての大金を定期的にぶち込めるなんて暴挙ができるわけがないので突然イベントが告知されて担当が上位報酬に来てさぁ走れと言われたって走れるわけがない。

突然の出費もある、月々のいろんな支払いがある。それを社会人と比べれば微々たるお金の中で工面してるのだ。趣味であるゲームに対する優先順位なんて、お察しである

それでもなんとか工面したお金をつぎ込んだところで結果は散々たるものだった。それを知ったN先輩は事あるごとに

「お前の担当愛はその程度なのか?」

中途半端な事しかできなくて担当申し訳ないと思わないのか?」

「おい爆死野郎w」

バカにしてきた。

自分担当が本当に好きだったからそれなりに調べてるし、イベントも出来る限り追ってるし、二次創作を出してみたりもした。何よりライブ担当が出演すると分かれば必ずCDを積んだり、e+に殴りこんだり、最悪友達を頼ってでも必ず参加した。極力現地で。

それなのに爆死したら担当を名乗る資格がないのだろうか?

ゲーム課金できなかったら担当としてダメなのか?

そんな漠然とした疑問が胸の内を占めていた。

だが、所詮趣味だし、好きでやっている事だからと気に留めていなかった。

今年の3月あの日が来るまでは。

大学卒業した私はサークル追い出しコンパ(追いコン)に参加した。

1年生から4年生まで数十人という大規模な追いコンで、サークルで顔を合わせるけど名前は知らない後輩も数多くいた。

N先輩も参加していた。

追いコン事態は順調に進み、最後に4年生が一人ずつ挨拶をするとき事件は起きた。

自分の番になった時にN先輩が

「よっ!三流クソにわかP!」

「爆死野郎!」

と大声で叫んでいたのだ。

みんなに聞こえる声で

流石に私も堪忍袋の緒が切れた。

いくらなんでも後輩が何十人もいる前でそんなこと言わなくても良いじゃないか

これでは卒業間際の最後最後で飛んだ赤っ恥である

その時は笑って流したが、後日、新歓ミーティングに顔を出していたN先輩に詰め寄り、あの時の発言意味説明し、訂正して欲しい。本気で恥ずかしかったんだからみんなの前で謝罪してほしいと訴えた。

すると、彼の隣にいた別の先輩(A先輩とする)が顔を真っ赤にして怒り、怒鳴り散らし始めたのだ。

彼の主張を要約すると以下の通りである

・先輩に向かってその態度はなんだ。

大勢の前で生意気な態度を取ったお前もNの事を貶めている。お前にNを断罪する資格などない。お互い様だ。

そもそもアイマスにおいて何を持って担当とするかなんて人それぞれで明確な基準などない。お前の主義主張押し付けるな。

私はとても惨めな気持ちになった。

私はただ、あの時の発言を取り消して欲しかっただけで、せめてみんなの前で謝って欲しかっただけなのに…

これではただの公開処刑ではないか

するとA先輩の怒りっぷりを見たN先輩はへらへらと笑いながらA先輩をなだめ、以下のような主張を始めた。

・酒の勢いで言っただけだ、気にするな。

・お前が○○(私の担当)をいかに愛してるのかはみんながよく知っている。

・なのにも関わらずイベントの走り方が下手くそから私はそれをいじってるだけ

自分は昔ライブ専門でゲームに全く金を落とさない同期に「お前はだから三流なんだ」と言われたことが本当に悔しかった。お前にそうなって欲しくないからああやって言ってあげてたんだ。

彼の口から最後まで「後輩数十人の前で私の名誉を貶めた事に関する謝罪言葉」はありませんでした。

これを期に私はアイマスから遠のきました。百年の恋も冷める瞬間とはこの事なのでしょう。

アイマスPは課金額で他人マウントを取り合うような人間しかいないんだなぁ

こんなデータクラッシュしたら吹っ飛ぶ画像にうん万円も賭けなきゃ担当名乗る資格がないのが、Pの常識なんだなと察してしまいました。

ここまでの話を聞いて

別にこの先輩がおかしいだけ。」

増田が考えすぎ気にしすぎ。」と思う人が大半なのではないかと思います

ですが、私がこの件について許せないのはそこだけではないのです。

私の担当田中琴葉でした。

そう、中の人である種田梨沙さんが昨年活動を休止されて、ミリシタでの実装が大幅に遅れた、あの田中琴葉です。

私は、声優さんの不在によって琴葉の存在だんだん希薄になっていく事をずっと悩んでいました。

4th Liveでも現地で感じた「琴葉が置いていかれてるのではないかという不安」にずっと悩まされていました。(最後のThank youでそれが解消され、安心から大泣きしてしまいましたが笑)

ちょうど就職活動中だった事もあり、イベントになかなか課金ができず、どうすれば琴葉を応援できるのか、どうしたらミリシタから入ったPさんに琴葉がここにいると示すことができるのか、ずっと悩んで、苦しんで、精神をかなり病みましたがそれでも2月に琴葉がミリシタに実装されてやっとこれからなんだと思いました。

自分就職が決まり、やっとこれから琴葉にたんまりお金を使ってあげられる、本気でプロデュースできると思っていました。

その思いを、悩み抜いた思いの全てを、N先輩はみんなの前で汚い足で踏みにじったのです。「課金額が少ない」「ゲーム投資してない」たったそれだけの理由で。

もう一度言いますが、わたしライブを中心にお金を落としています

ライブだけに費やした金額なら数十万に上るでしょう。

でも、それ以外に一切お金をかけていないということではありません。そんなこと有り得ません。

グッズも買ってるしCDだって全て新品で揃えたし肝心のゲームだって課金してます

学生時代はイベント時に1,2万が限度でしたがそれでも担当が来たら必ず走って回すようにしてます

それでも足りないのでしょうか。

担当が取れなかったらその時点でP失格なのでしょうか。

私はあの日大勢の前で3流にわかと罵られないといけなかったのでしょうか。

もう全てがバカバカしくなってしまいました。

5thは一応参加しました、最高でした。

もも自分アイマス人生はこれで終わりだなと思いました。

あんな辱めに公開処刑まで受けては大学の後輩や同期に顔向けできないからです。

いまだにガシャやイベントが来るたびにN先輩の言葉が、あの日の恥ずかしさ惨めさが胸をよぎって、まっすぐアイマスを愛することができないからです。

もうすでに周囲には引退を伝えました。

N先輩はいずれ勝ち誇った顔で「やっぱりあいつはその程度だったかw」と話すことでしょう。

画像データ音声データにうん万もぶち込んで一生イキってろバカ

2018-09-22

JWTに関してのお伺い

http://b.hatena.ne.jp/entry/s/co3k.org/blog/why-do-you-use-jwt-for-session

適当コメントを書いたら

スーパーエンジニアに「そういうことではない」

と厳しい叱責を受けたため、無能の見識を書いてみた。

「聞くは一時の恥、聞かぬは一生の恥」のとおり、

せっかくの機会のため、びしばしセキュリティに関する認識の甘さを指摘してほしい所存

expの期限と任意セッションが切れないデメリットに対する私見

作ったシステムではexpは約1時間でやってしまいました(機密保持契約違反を恐れ多少ぼかしております)

私は無能なのでたぶんユーザーから報告を受けて

確認している間に1時間はかかるからいいやと思ってしまっていた

師はきっとJWT生成直後3秒でユーザー

「これは、セッションハイジャックか・・・!?

と気づいて通報

そして師が2秒で

「これは、セッションハイジャックだ!」

と検知してセッション遮断、秒速で一億円の被害が出るところを阻止する前提なのではないかと推測している

これは確かにJWTだと厳しそうだ

そもそもログインできるアプリなら

セッションハイジャック成功直後にパスワードを変更された場合

セッション任意に切れることに意味はないのでは、と思えてきたが、浅はかだろうか

(師はログインを即座に検知してセッションを切れるから問題ないのか)

とにかくアカウントロック機能を作れば上記懸念全てにきれい対応できそうに見えている

「定期的な鍵交換が必要」に関する私見

この理屈だと例えば.envに書くような他のkeyも定期的な交換が必要に見える

これはまずい、自分の今までの見識の甘さを思い知らされた

今使っているフレームワークリファレンスを見たが

keyは初回に設定したのみで、定期的な交換を勧める文が見つからない

私の検索力不足なのかと思ったが、もしかして彼らもこの危険性に気付いていないのではないか

JWTはhash化してつないでいる前提で

hashのkeyを総当たりで破る仮定で書く

私は無能なのでライブラリを用いることにしている

32文字keyが生成された

解読時間は下記を参考に、計算windows10電卓アプリを用いて手動で行った

https://ja.wikipedia.org/wiki/%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E6%94%BB%E6%92%83

数字大文字文字で約60の時は10桁で20万年と書いているが

現代の解析技術20万倍は速度が出ると仮定して1年として計算する

果たして、どのくらいの速度で鍵はやぶられると推定されるのか

とりあえず60を10乗した時点で(20文字相当)

6.0466176e+17

日本語に直すと60京4661兆7600億年かかる計算となった

実際にはこれが6.0466176e+17倍されさらに3600倍されつまりどういうことだ

これだけ長くともkeyの交換は必要なのであろうか

そもそも師は何年で交換したら安全と書いていないが、何年なら安全という意見だったのだろうか

「JWTはセッションIDを含めれば安全」に関する私見

から「そういうことではない」と指摘された点である

私の理解ではとかくuser_idのみ必要なら意味がないと思っていたため落ち込んでいる

まず、IDとpassを内蔵するネイティブアプリに対するapiサーバでの実装経験しかないこと

JWTが切れたら都度IDとpassを投げる方向でリフレッシュトークン実装しなかったことを告白しておく

そのためapiサーバ上記前提で用いた場合に考えたことを書く

webアプリのJWT実装経験はないので、そちらの論は差し控えさせていただく

JWT送信→user_id取得

では危険

JWT送信セッション(cookie形式?)送信切り替え→セッションからuser_id取得

だと安全になるのか検討する前提で記載する

とりあえず思いついたのは下記だった

通信途中で傍受されてログイン情報が奪われる危険が上がる
アプリから直接ログイン情報が奪われる危険が上がる

通信途中で傍受される危険に関して

tokenはheaderにbearerで付けユーザーID(あるいはそれに代わる特定可能識別子)が含まれ

おそらく一般構成仮定で書く

https通信するのでパケットキャプチャによる傍受は不可能と思っていた

(http通信するのはJWTとかcookieとか関係なく傍受できるため考慮しない)

0に何をかけても0なので、何回送っても解読されないならJWTを何回送っても問題ない

というかJWTが抜けるなら同様にheaderに付けるcookieでも抜けると思うので

JWTだからといって危険性に差はない、という論拠により安全性は変わらないという個人的結論になった

※余談だが、たまに送る回数が少ない方が安全という

言説を見るのだが、個人的には上記理由で納得できていない

アプリから情報が抜かれる危険性に関して

クライアントネイティブアプリ場合

攻撃者がアプリに保存されたJWTが取得できるならIDもpassも同じ方法で抜けそうに見えた

(厳密には保存場所が違ったかもしれんが実装依存なので同一とする)

その前提のため、わざわざ

JWT送信セッション(cookie形式?)送信セッションからuser_id取得 

接続しても、おそらくcookie形式で送れる何かもJWTらと同じ方法で抜かれると思われる

まりcookieだろうがJWTだろうがアプリから直接情報が抜かれる危険性には変わりがないという結論になった

結論

まりcookieだろうがjwtだろうがidpasswordの組だろうが同じ危険性で抜かれる可能性があり、いずれでも同じことができるなら

JWT→user_id

でいいじゃん、わざわざcookieと同様の形式を間に挟むの無駄じゃん、となりコメント発言に至った

ここまで書いて、常にJWTにsession_idを含めておいて送ることを意図されていた可能性にも気づいたが

それならもっと無駄なため考慮しない

セッションにするメリットとして唯一思いついているのは任意サーバ側でセッションを切れることだが

それを指していたのであろうか

それは最初段落問題と同一と思っている

余談だが、ブコメ雰囲気日和って「ユーザーIDのみ入れ」(そもそもJWTを自然に作れば入るのだが)

というセッションストア的にJWTに他の情報を入れると入れない時に比べて危険性があがることに同意したような記載をしてしまったが

結局JWTが奪えたら中身に関係なくbearerとしてセットして接続するだけなので

正直JWTを使った時点でついでにセッションストアのように使おうが使わまいがセキュリティ的にそこまで変わらないのでは、と思っている

強いて上げるならセッションに保存している内容が分かる可能性があり、サーバー内部の実装が推測できる危険があるくらいだろうか

でも暗号化したらよいのでは、と思った

私的結論

expの期限と任意セッションが切れないデメリットに関して

expを適切に設定しつつ、必要ならアカウントロック機能を入れる

(アカウントロック機能はJWTに関係なく被害の増加を抑えられる可能性がある)

定期的な鍵の交換について

長いkeyを設定すれば不要

「JWTはセッションIDを含めれば安全」について

少なくともapiサーバネイティブアプリに関して、セッションIDを含めても危険性は変わらない

正直webアプリでも大して変わらんのでは、と思っているのは内緒である

と思ったので短慮なところ、見落としている視点があるようなら今後のためにご教示をいただきたく

以上、よろしくお願いいたしま

2018-09-06

プロデューサーよ、お前らの愛は結局金か?

どうも、元アイマスPです。

元、というのは私はもうすでにPを引退たからです。

現状アプリの類は消去しました。

グッズの類が大量に残っていますが、まぁいずれ処分するでしょう。

今回このブログを書こうと思ったのは、私のとある胸糞悪い経験を吐き出しておきたかったのと、これを見たPさん、あるいはアイドルマスターに限らず、いわゆる課金アプリゲームプレイしてる全ての人に表題の内容を問いかけたいからです。

課金ゲームにおける「愛」は結局課金しか測れないのか?という事

アイマス風の言い方をすれば

プロデューサーの「担当愛」は結局課金額でしか測れないのか?

という事です。

事の発端は2年前、私がサークルの先輩からアイドルマスターを勧められた事に始まります

私はどちらかというとオタクコンテンツはそれなりに嗜んでいたのでアイマスもすぐにはまり、のめり込んでいきました。

アニマスから入り、劇場版で気になった後輩の子達を見てミリオンライブを始め、シンデレラガールズSideMと次々にどハマりしていきました。

改めて説明するまでもないと思いますが、アイマスにはゲームライブがありますゲーム内のガシャを回し、イベントを走って担当SRカードをゲットする。ライブ声優さんパフォーマンスを見て感動して「アイマス最高」と唱える(笑)まぁそんな感じで各々楽しんでると思います

コンテンツ応援するにはいろんな方法がありますゲーム課金する、ライブに参加する、グッズを買う、二次創作をしてみる。

楽しみ方は本来人それぞれであり、それぞれがそれぞれの形で趣味謳歌しています

私の楽しみ方は基本的ライブに参加する事でした。

アイマスにハマった当初、私はまだ学生でした。

学生アルバイトでは月々稼げる金額はどんなに頑張ってもたかが知れています

どんなに頑張っても、社会人が月々稼げる金額になど到底及ばない事は想像に難くないでしょう。

アイマスを含めいわゆるソーシャルゲームには「天井」が設けられていることが多いです。

ガシャなどで「この金額までつぎ込めば必ず目当てのカードが手に入りますよ。」というボーダーラインだ。

ゲームにもよるがアイマスは大体ソシャゲの方は5万くらい、音ゲーアプリの方だと10万程度だろうか。

5万10万など学生にとってはかなりの大金である

それ以上を稼ぎ出せたりお小遣いをもらっていたりと状況は様々だがこの金額を毎月叩き出せる人は全国でもそんなにいないだろう。

さらイベントランキング上位に到達するためにも上記レベル課金はある程度必須と言っていい。

私は各コンテンツ(当時3つ)毎に「担当(他のコンテンツで言うところの「推し」)が複数人いた。

一人がイベントないしガシャで来たら5〜10万ぶっ飛ぶのである

しかもそれが複数人いると言うことは数ヶ月に一回レベルでその出費、ましてやイベントが重なろうものなら倍プッシュである

どんなにバイトを増やして掛け持ちしても追いつけるものではない。

そもそもバイトを増やしたら肝心の学業遊び就活諸々に支障が出る。

でも、担当の事は本当に好きだから何かしらの形で応援したい。

なので私はライブを中心に応援することを選んだ。

ライブなら事前に日程が設定されているのでそれに向けて貯金ができる。

ライブを通じて金銭面でも、気持ち的にも担当コンテンツ応援できる。

そう思っていた。

だが、アイマス布教してくれた先輩(仮にN氏としよう)は違った。

彼は社会人であるしかもどうやらそこそこ良い仕事をしていると見られる。

毎月のように一定数の金額を彼の担当のガシャやイベントに費やし、コンスタント入賞していたところを見ると間違いない。

はいわゆる「ライブ勢」が大嫌いで、「声優ライブを見て何が面白いんだ」

「こいつらがライブにつぎ込んだ金を直接課金すれば良い話だ」

「こいつらは声優オタとしては一流だがアイマスPとしては三流」

などと事あるごとにこき下ろしていた。

まぁ、いわゆる「在宅」というやつである

彼はサークルOBオタク仲間の中の中心的な存在だったため、同期後輩もなかなか彼に意見する事は難しかった。

それを知ってか知らずか、彼はその集まりの中で二言目には「プロデューサー流儀」を語りたがり、「コンテンツ課金できない奴は三流のにわか」という定説を偉そうに唱えていた。

私はミリオンライブが初めて触れたアイマスだったため、イベントの走り方など分からず、中途半端課金額で爆死するということを繰り返していた。

といっても前述した通り、学生にとっての大金を定期的にぶち込めるなんて暴挙ができるわけがないので突然イベントが告知されて担当が上位報酬に来てさぁ走れと言われたって走れるわけがない。

突然の出費もある、月々のいろんな支払いがある。それを社会人と比べれば微々たるお金の中で工面してるのだ。趣味であるゲームに対する優先順位なんて、お察しである

それでもなんとか工面したお金をつぎ込んだところで結果は散々たるものだった。それを知ったN先輩は事あるごとに

「お前の担当愛はその程度なのか?」

中途半端な事しかできなくて担当申し訳ないと思わないのか?」

「おい爆死野郎w」

バカにしてきた。

自分担当が本当に好きだったからそれなりに調べてるし、イベントも出来る限り追ってるし、二次創作を出してみたりもした。何よりライブ担当が出演すると分かれば必ずCDを積んだり、e+に殴りこんだり、最悪友達を頼ってでも必ず参加した。極力現地で。

それなのに爆死したら担当を名乗る資格がないのだろうか?

ゲーム課金できなかったら担当としてダメなのか?

そんな漠然とした疑問が胸の内を占めていた。

だが、所詮趣味だし、好きでやっている事だからと気に留めていなかった。

今年の3月あの日が来るまでは。

大学卒業した私はサークル追い出しコンパ(追いコン)に参加した。

1年生から4年生まで数十人という大規模な追いコンで、サークルで顔を合わせるけど名前は知らない後輩も数多くいた。

N先輩も参加していた。

追いコン事態は順調に進み、最後に4年生が一人ずつ挨拶をするとき事件は起きた。

自分の番になった時にN先輩が

「よっ!三流クソにわかP!」

「爆死野郎!」

と大声で叫んでいたのだ。

みんなに聞こえる声で

流石に私も堪忍袋の緒が切れた。

いくらなんでも後輩が何十人もいる前でそんなこと言わなくても良いじゃないか

これでは卒業間際の最後最後で飛んだ赤っ恥である

その時は笑って流したが、後日、新歓ミーティングに顔を出していたN先輩に詰め寄り、あの時の発言意味説明し、訂正して欲しい。本気で恥ずかしかったんだからみんなの前で謝罪してほしいと訴えた。

すると、彼の隣にいた別の先輩(A先輩とする)が顔を真っ赤にして怒り、怒鳴り散らし始めたのだ。

彼の主張を要約すると以下の通りである

・先輩に向かってその態度はなんだ。

大勢の前で生意気な態度を取ったお前もNの事を貶めている。お前にNを断罪する資格などない。お互い様だ。

そもそもアイマスにおいて何を持って担当とするかなんて人それぞれで明確な基準などない。お前の主義主張押し付けるな。

私はとても惨めな気持ちになった。

私はただ、あの時の発言を取り消して欲しかっただけで、せめてみんなの前で謝って欲しかっただけなのに…

これではただの公開処刑ではないか

するとA先輩の怒りっぷりを見たN先輩はへらへらと笑いながらA先輩をなだめ、以下のような主張を始めた。

・酒の勢いで言っただけだ、気にするな。

・お前が○○(私の担当)をいかに愛してるのかはみんながよく知っている。

・なのにも関わらずイベントの走り方が下手くそから私はそれをいじってるだけ

自分は昔ライブ専門でゲームに全く金を落とさない同期に「お前はだから三流なんだ」と言われたことが本当に悔しかった。お前にそうなって欲しくないからああやって言ってあげてたんだ。

彼の口から最後まで「後輩数十人の前で私の名誉を貶めた事に関する謝罪言葉」はありませんでした。

これを期に私はアイマスから遠のきました。百年の恋も冷める瞬間とはこの事なのでしょう。

アイマスPは課金額で他人マウントを取り合うような人間しかいないんだなぁ

こんなデータクラッシュしたら吹っ飛ぶ画像にうん万円も賭けなきゃ担当名乗る資格がないのが、Pの常識なんだなと察してしまいました。

ここまでの話を聞いて

別にこの先輩がおかしいだけ。」

増田が考えすぎ気にしすぎ。」と思う人が大半なのではないかと思います

ですが、私がこの件について許せないのはそこだけではないのです。

私の担当田中琴葉でした。

そう、中の人である種田梨沙さんが昨年活動を休止されて、ミリシタでの実装が大幅に遅れた、あの田中琴葉です。

私は、声優さんの不在によって琴葉の存在だんだん希薄になっていく事をずっと悩んでいました。

4th Liveでも現地で感じた「琴葉が置いていかれてるのではないかという不安」にずっと悩まされていました。(最後のThank youでそれが解消され、安心から大泣きしてしまいましたが笑)

ちょうど就職活動中だった事もあり、イベントになかなか課金ができず、どうすれば琴葉を応援できるのか、どうしたらミリシタから入ったPさんに琴葉がここにいると示すことができるのか、ずっと悩んで、苦しんで、精神をかなり病みましたがそれでも2月に琴葉がミリシタに実装されてやっとこれからなんだと思いました。

自分就職が決まり、やっとこれから琴葉にたんまりお金を使ってあげられる、本気でプロデュースできると思っていました。

その思いを、悩み抜いた思いの全てを、N先輩はみんなの前で汚い足で踏みにじったのです。「課金額が少ない」「ゲーム投資してない」たったそれだけの理由で。

もう一度言いますが、わたしライブを中心にお金を落としています

ライブだけに費やした金額なら数十万に上るでしょう。

でも、それ以外に一切お金をかけていないということではありません。そんなこと有り得ません。

グッズも買ってるしCDだって全て新品で揃えたし肝心のゲームだって課金してます

学生時代はイベント時に1,2万が限度でしたがそれでも担当が来たら必ず走って回すようにしてます

それでも足りないのでしょうか。

担当が取れなかったらその時点でP失格なのでしょうか。

私はあの日大勢の前で3流にわかと罵られないといけなかったのでしょうか。

もう全てがバカバカしくなってしまいました。

5thは一応参加しました、最高でした。

もも自分アイマス人生はこれで終わりだなと思いました。

あんな辱めに公開処刑まで受けては大学の後輩や同期に顔向けできないからです。

いまだにガシャやイベントが来るたびにN先輩の言葉が、あの日の恥ずかしさ惨めさが胸をよぎって、まっすぐアイマスを愛することができないからです。

もうすでに周囲には引退を伝えました。

N先輩はいずれ勝ち誇った顔で「やっぱりあいつはその程度だったかw」と話すことでしょう。

画像データ音声データにうん万もぶち込んで一生イキってろバカ

2018-08-30

anond:20180830191405

Santa Cruzが来てもどうせワイヤレス技適通らないので、今VIVE+TPLINK+フルトラセット買うのが正解やぞ。

2018-07-04

anond:20180704102549

https://anond.hatelabo.jp/20180618192659

3個芝の例を見つけたぞ低能www

たぶん同じことを何度も言わせるとそのたびに増えていく感じだぞ低能www

「NEW GAME+++」みたいな感じだなwww

2018-05-23

anond:20180523132351

最近はnode+seleniumやゆうとるやろが。(割と遅くて困ってるが)

2018-04-12

ライムスターってRHYME+Starだと思ってたんだけど、Rhymest+erなんだな。

rhymestって都都逸野郎とかそんな感じの蔑称な気がするんだが…

2018-02-12

IPoEでも遅い

八方手を尽くして調べたんだが結局わからなかった

2ヶ月だけ100Mbps出ていたんだが、今や300kbps〜6Mbps

 

一体何が起きているのか分からない

IPoE+DSLiteは確かに動いている

でもIPv6の速度チェックでも遅い

 

もうわからん

疲れた

夏か秋までに引っ越して、au光かNuroを導入するしかない(今のマンションは全部NGだった)

2017-11-23

ポケ森よりぶつ森e+の方が面白い

懐古補正無しに過去作の方が面白かったのは間違いない。ハードの違いによるゲーム性云々抜きに。下手すりゃ64版の方が良かった。

というわけで恐らく出るであろうスイッチ版に期待

2017-10-10

増田のrails屋、ちょっと教えろ

ミーにはステマ起点に見える

IntelliJベースRubyMine(完全有料:個人紐付ライセンス1万円/年(税込))がベター

IntelliJは使ったことあるかな

あれの有償版Ultimate+Ruby特化+Railsプラグインみたいな感じ

1か月の試用期間付き

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