「KEY」を含む日記 RSS

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

2019-03-13

anond:20190313104523

Light colorsとは (ライトカラーズとは) [単語記事] - ニコニコ大百科

https://dic.nicovideo.jp/a/light%20colors

... ないが、完成度の高いメロディーと深いテーマを持った作品ストーリーを上手く表現した歌詞は非常に評価が高く、key楽曲の中でも屈指の名曲との声も少なくない。 またこの曲を使用した動画では、1番及びラストのサビの「プリズムを通した」の部分が弾幕 ...

2019-03-12

anond:20190311205913

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13176679408

この歌詞どう思いますか?

鍵穴 平井堅

もっと奥深くまで触れて君に届きたい

新しい世界こじ開けたいこの鍵で

I've got a perfect key 右曲がりの

君の繊細な鍵穴にfitするかな

刺さったまんまで Stay with me 鏡越しに君と目が合って

淫らなポーズで Say my name 鍵をかけて遥かかなたへ

ふくませて 匂(かお)って にじませて

そんなすぐに欲しがらないで スペアキーは無い

君の顔が歪む度に 膨らんで

Do you want a special key? そびえ立ってる

君が隠してる鍵穴にjugしたいな

初めは焦らして1.2.3. 動物より露骨な僕等

おねだりするよに Say my name 卑猥なこと声にしてみて

刺さったまんまで Stay with me 鏡越しに君と目が合って

淫らなポーズで Say my name 鍵をかけて遥かかなたへ

絡まって 砕けて 溶け合って

2019-02-23

anond:20190223045232

perlでは連想配列

しかし、この話を読んでJavaだけ違うよなって思ってしまった。他のはみんな実装言語処理系にお任せだけれど、JavaだけはMapは単なるインタフェースで、どの実装にするかはお前が選べってところがねぇ。こいつだけはGenericsを使って、keyvalueの型を指定するのも違う。

Javascriptはプロトタイプベースオブジェクト指向言語から、こいつもこいつで思想が他のと違うんじゃないかとも思えてきた。

2019-01-22

[] Japanese research and development collapsed by the Chinese government

It is not acceptance of immigration as a labor force population to save the country from GDP reduction due to population reduction.

Many of the simple labor supplemented with foreign workers can be automated by computer.

By raising technological innovation in supercomputers and artificial intelligence development, increasing the productivity by fully automating the factory, increasing the productivity by means of the automation of the store by the AI ​​monitoring system leads to economic growth and it is not necessary to easily accept immigrants.

The key to supercomputer operation is "power consumption", while the U.S. and U.S. are fighting for supercomputing on the basis of computing capacity, Japan is always supercomputer with a low power supercomputer ranking, "Green 500" It is contained.

Japan has high technical capability in low power consumption supercomputer.

The third superior in "Green 500" in June, 2018 is supercomputer using Japanese PEZY computing technology led by Mr. Motoaki Saito.

However, there were only a few media to cover about this low power consumption type supercomputer technology that the US and China seek pursued behind PEZY's "grant fraud" report.

 

 

[中国] 中国政府に潰される日本研究開発 https://anond.hatelabo.jp/20190122195754

2019-01-03

anond:20190103184241

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

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

#define MAX_LOADSTRING 100

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

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

#include <list>

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

class MyWindow
{
public:

	HWND hWnd;



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

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

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

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

		}

		return NULL;
	}



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

		wcex.cbSize = sizeof(WNDCLASSEX);

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

		return RegisterClassExW(&wcex);
	}

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

	int blocks[100][100];

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

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

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

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

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

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

		return ret;
	}


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

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

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

			}
		}


		return TRUE;

	}

	int boxType;

	BOOL WriteBoxOLDBox()
	{
		int width = 24;

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

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

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

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


			}
		}

		DeleteObject(hBrush);

		return FALSE;
	}


	BOOL WriteBox()
	{
		WriteBoxOLDBox();

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

		}

		return TRUE;
	}

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

		int width = 24;

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

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

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


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

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

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


		DeleteObject(hBrush);

		return TRUE;
	}


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

		int width = 24;

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

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

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


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

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

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

		DeleteObject(hBrush);

		return TRUE;
	}

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

		int width = 24;

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

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

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


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

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

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

		DeleteObject(hBrush);

		return TRUE;
	}

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


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

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

		this->WriteBox();

		return TRUE;
	}



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


};


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

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

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



	MyWindow win;



	win.hInstance = hInstance;

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

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

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



}






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

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


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

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

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

anond:20190103170543

テトリス

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

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

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

 

WriteBoxLとWriteBoxIとWriteBoxZ

の違いをよく見比べて

自力で違いがわかれば

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

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

 

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

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

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

#define MAX_LOADSTRING 100

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

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

#include <list>

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

class MyWindow
{
public:

	HWND hWnd;



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

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

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

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

		}

		return NULL;
	}



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

		wcex.cbSize = sizeof(WNDCLASSEX);

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

		return RegisterClassExW(&wcex);
	}

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

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

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

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

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

		return ret;
	}


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

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

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

			}
		}


		return TRUE;

	}

	int boxType;

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

		}
	}

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

		int width = 24;

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

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

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


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

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

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


		DeleteObject(hBrush);

		return TRUE;
	}


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

		int width = 24;

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

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

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


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

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

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

		DeleteObject(hBrush);

		return TRUE;
	}

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

		int width = 24;

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

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

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


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

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

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

		DeleteObject(hBrush);

		return TRUE;
	}


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

		this->WriteBox();

		return TRUE;
	}



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


};


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

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

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



	MyWindow win;



	win.hInstance = hInstance;

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

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

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



}






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

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


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

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

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

anond:20190101175055

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

第何回だろうな

キー入力を追加した

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

タイマー自動落下

 

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

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

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

#define MAX_LOADSTRING 100

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

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

#include <list>

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

class MyWindow
{
public:

	HWND hWnd;



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

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

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

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

		}

		return NULL;
	}



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

		wcex.cbSize = sizeof(WNDCLASSEX);

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

		return RegisterClassExW(&wcex);
	}

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

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

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

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

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

		return ret;
	}


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

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

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

			}
		}


		return TRUE;

	}

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

		return TRUE;
	}

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


};


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

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

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



	MyWindow win;



	win.hInstance = hInstance;

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

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

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



}






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

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


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

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

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

2019-01-01

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

anond:20190101162210

やすいように フルソー

青い■を表示するだけ

// 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);


		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 Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));

		// メイン メッセージ ループ:
		while (GetMessage(&msg, nullptr, 0, 0))
		{
			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}


		return TRUE;

	}

	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
		RECT Rect = { 0,0,48,48 };
		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;
}

anond:20190101161939

次の解説

staticキーワードを付けることで

クラス内にグローバル関数から呼べる関数を作る

これでHWNDを通して

グローバル関数にthisポインタを伝える

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

anond:20181231104029

// 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);


		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 Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));

		// メイン メッセージ ループ:
		while (GetMessage(&msg, nullptr, 0, 0))
		{
			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}


		return TRUE;

	}

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


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


Windowsシステムは基本 グローバル関数なので

グローバル関数<>クラス化されたメソッド

ブリッジ関数を書いた

2018-12-21

https://anond.hatelabo.jp/20181221162102

七福神 -- Key:雑学事典より。

後に福禄寿寿老人が加えられ、七福神誕生することとなった。この際、五福神福禄寿を加えただけでは六福神になるため、「福」と「禄」を福禄寿とし、「寿」だけを独立させて寿老人を作り、無理矢理七福神としたと伝えられる。

福禄寿寿老人神様ではなく仙人であり、元々数合わせ的に参加させられたためか、元禄10年(1697年)の『日本七福神伝』には、「福禄寿の変わりに吉祥天七福神に加えてもよい」と記され、また享保年間(1716-1735年)の『書言字考』では寿老人に代えて猩猩七福神の一柱とされている。また、寿老人福禄寿はともに南極老人星化身とされることから、この二神は本来同一とみなし、寿老人の代わりに吉祥天猩猩が入れられた時代もあったといわれている。

2018-12-20

自分デッドロック対策トランザクションかけてる時は、primary key昇順で更新するように気をつけるてるんだよ、

でも他の人はselect ... for updateで別トランザクション更新後の値を取得しつつデッドロック対策してて、自分もその書き方に直すとなると結構手間だな

2018-12-13

当時16歳の私から見た『涼宮ハルヒの憂鬱

私は1990年まれ高校の時にリアルタイムハルヒニコニコ動画出会った男性です。あまりアニメ全般については詳しくありませんが、私の経験の限りにおいてハルヒについて語ってみます

ハルヒは当時の印象では「わけがからないが、とにかく新時代のすごいアニメ」という作品でした。一つ一つの要素を見ると取り立てて珍しいものではないのですが、それらをアレンジするセンスと細部のクオリティがずば抜けていたと思います

まず、日常系学園ラブコメと高度なSFとを融合させたアニメが珍しかたことは記憶しています。当時の私はスクールランブルあずまんが大王にハマっていましたし、エヴァンゲリオンカウボーイビバップも大好きでした。しかし、両者の世界観が融合するような日常系アニメがあり得るとは思ってもいませんでした。その後六畳間の侵略者ニャル子さんなど似たような作品が出てきましたが、少なくとも当時の私にとっては斬新な世界観でした。

もちろん作画も素晴らしかったです。これについて私はほとんど語れませんが、日常系萌え作品であれだけぬるぬると人物を動かしたことには驚きました。それまではロボット飛行機をどれだけなめらかに動かすのかについては意識してきました。しか美少女の手足や顔を実写のように丁寧に動かすことについては、ほとんど注目していませんでした。明らかにキャラクター日常身体動作を美しく作画する流れは、けいおんやその他の萌えアニメに繋がっていったでしょう。

また、ブログや2chなどでの考察が盛んになったのもこの頃でした。ハルヒは謎が多い設定や話数シャッフルなど、視聴者探究心を刺激するギミックが多数仕掛けられていました。当時のアニメブログ上では考察記事参考書籍の一覧があちこちで見られ、2chでは解釈を巡る論争が白熱していました。その後、シュタインズ・ゲートまどマギでも同じような光景が繰り広げられることになります

さらにはニコニコ動画Youtubeの「ハレ晴レユカイ踊ってみた動画社会現象になりました。この流行高校生や大学生の社交的な人々の多くが参加したこと意味は大きかったです。これによって電車男以来続いてきた、社会におけるオタク文化容認の流れが加速することになったと思います。深夜に放送している萌えアニメが、陰気なオタクが見るものから「(女性も含めた)普通の」中高生も楽しめるものに変わる転機でした。

2000年代京アニは、Key作品のような男主人公ハーレムかららき☆すたけいおんのような百合日常物へと変化していきました。それは2000年代から2010年代にかけてアニメの潮流がエロゲ的な物からラノベきらら的な物、オタク的な物からサブカル的な物、男性作家原作から女性作家原作へと変化する動きと重なっているように私には見えました。そういったアニメ界の地殻変動結節点存在していたのがハルヒであり、90年代文化終焉10年代に続く新たな文化の始まりの両者を象徴するアニメだったのではないかと今にして思うのです。もしかするとハルヒのこうした両義的な立ち位置フォロワーの少なさに影響しているのかもしれません。

ちなみに2010年前後の私は一連のアニメ業界流行の変化を「男性向けアニメ少女マンガ化」だと漠然と感じ、個人的にそのことを嬉しく思っていました。というのも私はエロゲ象徴されるようなハーレム作品が苦手で、少女漫画百合が大好きだったからです。けいおん以降の百合アニメ全盛のこの10年間は私にとってアニメ黄金期でした。今後、ハルヒやその前後アニメの潮流は、どのように分析批評されるのでしょうか?近い内にどなたかが『10年代想像力』を書かれる日を楽しみにしています

ハルヒ第三次オタク黎明期〜隆盛期間だから分析は難しい

anond:20181212171225

ちょいちょい分析として抜けてるので勝手上から目線で補足してみたい。

下手くそ補足ってことは最初に謝っておく

あくま社会的観点として分析で、

作品の是非や好みは個人問題だと思う。

京アニについて

京アニハルヒ以前にAIRがあり、加えてもともと人気ラノベフルメタの二期もやりきり、

すでに実力派だったよね。Key作品もあったから、

人気原作 + 泣き演出 + 作画 という武器の多さもあったと思う。

ラノベブームは背景にエロゲブームもあったのよ

ラノベエロゲ同人月姫ひぐらし)が相互に影響を与えていったというのがある。

メディアミックス読み物コンテンツアニメ化が色々されてきた頃だった。

今はエロゲ原作ってほとんどないんだよな。。

音楽は歌だけでなく、劇伴人気もあった。

今はアニメ界のAKBであるアイドルマスター楽曲をやっていたMONOKAの人が

劇伴担当してコア層も確保してた。

メディアミックス展開のお手本というのがハルヒの一番の強み

まとめの通り社会的な変化が背景にあった。

加えて、ハルヒアニメ人気がでたあとも、二期までは本当に

毎月といってもいいくらい何かしらコンテンツを順繰りに出し続けてた。

アニメ

ラノベ新刊

マンガ

フィギュア

ゲーム

キャラソン

イベント

・毎年7月サイト更新とか

今はどの作品も当たり前のようにやりすぎてる手法麻痺してるけど、

オタクコンテンツがまだ少ない当時、

ここまで上手に展開し続けたのは当時少なかったじゃないかな。。

これも角川の資本があったからだと思う。

最後個人的な感想

なんだかんだハルヒ面白い

小説ラノベを初めてまとめ買いした作品だった。

SFとか全然しらなかったけど、

野ブタをプロデュースとか、蹴りたい背中とかもあったからかな、

当時は作品青春をすごく感じた記憶がある。

ほんと純粋に魅力があったよなーと思うわ。

2018-12-03

日本ポリコレって女性限定から男性オーケーな変更が多い

https://ja.m.wikipedia.org/wiki/ポリティカル・コレクトネス

これ見てて思った

性別限定する職業を男女共通で使えるようにするのもポリコレだが↓のように

職業 伝統的な表現 ポリティカル・コレクト表現

議長 chairman chairperson または chair

警察官 policeman police officer

消防官 fireman fire fighter

実業家 businessman businessperson

写真家 cameraman Photographer[要検証 – ノート]

要の人物 key man key person

英語で見ると男性限定表現だったもの女性も使えるようになった例が多い

それに対して日本女性限定名称男性も使えるように変更されたものが多い。

この違いはどこからまれたのか興味深い。

カメラマンビジネスマンキーマンのような海外では既に改定された用語はそのままなのは日本人はマン=男という意識が薄いからだろうか?

従来の用語 中立用語 備考

看護婦

看護士 看護師 2002年保健師助産師看護師法改正男性職業に就いているため。

障害者 障がい者

障碍者 「害」の字が使われていることに不満がある人の感じる悪い印象を回避するため。2001年平成13年)に東京都多摩市最初採用

助産婦 助産師 2002年保健師助産師看護師法改正。ただし現行では資格付与対象女性限定である同法3条)。

保健婦 保健師 2002年保健師助産師看護師法改正

保母

保父 保育士 1999年児童福祉法改正男性職業に就いているため。

スチュワーデス

スチュワード 客室乗務員

フライトアテンダント

キャビンアテンダント (CA) 1996年日本航空が従来の呼称廃止。他社も追随した。世界航空会社では、男性従事している。

土人 先住民 1997年北海道土人保護廃止

トルコ風呂 ソープランド トルコ人留学生、ヌスレットサンジャクリの抗議により、1984年に改称。

肌色 ペールオレンジ

うすだいだい 人種により、肌の色は異なることから

女優 俳優 男優という言葉があるのにもかかわらず、男性のみに俳優という肩書が使われることが多いため。

メクラフランジ 閉止フランジ JISなども改正済み 英語ではblank flange・blind flangeなどと云い、JISでも記号BLと残る

2018-11-26

商品名とかの頭文字にiつけるやつ

ここ10年くらいずっと思ってたんだけど、商品名とかサービス名の頭文字「i」つけるやつ多すぎて鬱陶しい。

なので、由来を調べてみた。

Apple製品

iMaciPodiPhoneiPadiCloudなど。統一感があるといえばそうだけど、アイアイうるさい。

由来は、

The person to ‘blame’ for the massive i-trend is Ken Segall. After presenting the see-through drop-shaped monitor, Jobs was in desperate need for a name that would suit it, and its follow-ups. The key importance of the new product was that it would be easily used for internet work – that was the design. And they wanted to incorporate the Macintosh brand in the name. So Segall proposed iMac – an internet-Mac. The ‘i’ as a prefix could also incorporate other adjectives such as individual, innovative, imaginative etc, depending on the product.

(HIGHNAMESより)

ということらしい。「i」頭文字に持つポジティブ英単語が多すぎるのが悪い。

ちなみに、Apple Watchが慣習に則ってiWatchと命名されなかった理由については、Why the Apple Watch isn't called the iWatchでは商標問題だとかApple Watchは、なぜ「iWatch」ではなかったのかではコンセプトの問題だとかいろいろ憶測が流れている。

iモード

iモード」の『i』は、インタラクティブ・インフォメーション・インターネット頭文字の『i』、そして英語で「私」の意味の『i』であるとされる。

(Wikipediaより)

ありがちなやつな。当時は先進的だったのかもしれないけど。

iGoogle

A prime example of a good product with a really bad name. Formerly Google Personalised Homepage, in a rare mistake by Google they chose to rename it using the faux Apple and now meaningless 'i' prefix, meaning 'Internet'.

(Urban Dictionaryより)

Urban Dictionaryなので信憑性はない。当初の名前が「Google Personalized Homepage」であったことを考えると、「私」の意味での「i」だと言われた方がしっくりくるけど、由来が何であれ、この名前はださい(愛用はしていた)。

IPython

Interactive Python

そういえばirbもInteractive Rubyか。

iframe

Inline Frame。

これはちょっと毛色が違う。一括りにしてごめんな。

===

実際書き出してみたら、意外とそんなに思いつかなかった。もうこれ以上出てこないでほしい。

2018-11-13

タッチタイピングの速度と仕事の速さ(出来不出来)は関係ない

5分で1200文字打てる自分の持論である

ほぼ関係ないと思う

20代前半から5分で7~800文字は打てていた。タイピングだけで言うなら日常業務レベルなら一級品だと思う(特殊仕事ではない限り)

しかし、当時一番残業が多かったのは自分だった

いつも定時に帰るおばちゃん(と言っても先輩)は、社内ではちょっとした有名人で俺もよく仕事の進め方を怒られてたし、俺もその人に頭を下げて仕事の進め方を教わった(その人はもともと人に教えたがる人ではない)

から、その時教わった事は今でも血肉になっている

そんな彼女キーボードを両手人差し指で打っていた。今でも覚えている。なのに一番早く帰る

彼女に口酸っぱく言われた事は「全体像の把握(試験開始後、問題用紙をすぐ解くのではなく、まずは一通り眺める・・というのに近い)」「ゴールから逆算する事」「何にどれだけ時間がかかるのか正確に把握する事」「他人をうまく使う事」「断る事(電話になんて全部出るな!など)」・・など目からうろこの話しばかりであったが、そこには「キーボード一生懸命早く打つこと」や「入力ミス率を下げる事」なんてワードはただの一度も出てこなかった。

その後彼女は辞めて、タイピングはコツコツ練習を続けて、5分900文字くらい打てるようになっていただろうか。それでも残業が多く、いつもストレスをためていた

当時所属していた部署課長。30代で課長になったらしく、うちの会社の中では出世スピードダントツで早いという人だった

その人もまた、キーボードを両手人差し指で打っていた。俺と課長で100m競争したら、90mハンデもらっても勝てるLV。それくらい彼は遅かった。

でも、仕事が遅かったのは俺だ

現在5分で1200文字前後。 1秒当たりの数字key/秒)はだいたい6~6.2ぐらいなのだけど、周囲の人間よりはダントツキー入力は早い

でも、ダントツ仕事が早い訳ではない。もうこの年齢になればわかる。

仕事段取り八分であってキー入力ではない、というのが俺の結論

追記

1秒当たりの数字key/秒)はだいたい6~6.2ぐらい・・がいまいち実感がない人たちへ。

http://neutral.x0.com/home/ghost/

ゴーストタイピング

上記サイトでは実際に登録したタイパー達のゴースト(実際にランキングに挑んだ時の残像が記録されている)と戦う事が出来る。

ハイレベルカテゴリの最下層がちょうど俺ぐらいなので、6.0当たりの奴と一度戦ってみるといい。スピードが実感出来ると思います

隣の芝生は青く見えるってね。

2018-11-12

BTSに対するSWC非難声明邦訳)――これはSWCによる「全面降伏要求」だ

邦訳適当なので適当かもしれない

---

November 11, 2018

2018年1111

The Simon Wiesenthal Center denounced BTS, an internationally popular Korean band whose live performance on Japan TV was cancelled.

先日日本テレビ局ライブパフォーマンスの予定を取り消された、韓国国際的人気バンドBTSを、サイモン・ヴィーゼンタール・センター非難する。

“Wearing a T-shirt in Japan mocking the victims of the Nagasaki A-bomb, is just the latest incident of this band mocking the past,” charged Rabbi Abraham Cooper. Associate Dean and Director of Global Social Action of the Simon Wiesenthal Center, a leading Jewish Human Rights NGO.

サイモン・ヴィーゼンタール・センター副部長であり、グローバルソーシャルアクション部門であるラビアブラハム・クーパー師は、「長崎原爆による犠牲者嘲笑するようなTシャツを着用したということは、過去嘲笑するこのバンドが起こした、最新の事例であるに過ぎない」と批判した。

Members of the band posed for a photo shoot wearing hats with the Nazi SS Death Head logo. The SS was a key component of the Nazi mass murder of 6 million Jews during the WWII Holocaust. “Flags appearing on stage at their concert were eerily similar to the Nazi Swastika. It goes without saying that this group, which was invited to speak at the UN, owes the people of Japan and the victims of the Nazism an apology.”

たこバンドメンバーは、ナチ親衛隊の髑髏をあしらった帽子かぶり写真ポーズを収めている。ナチ親衛隊は600万人のユダヤ人第二次大戦中のホロコースト殺害した中心組織だ。「彼らのコンサートで見られた旗はナチハーケンクロイツ酷似している。国連演説にも招かれるようなグループが、日本の人々、またナチズムの犠牲者に対し謝罪の責務を負うのは言うまでもない」

“But that is not enough. It is clear that those designing and promoting this group’s career are too comfortable with denigrating the memory of the past. The result is that on young generations in Korea and around the world are more likely to identify bigotry and intolerance as beingcool’ and help erase the lessons of history. The management of this group, not only the front performers, should publicly apologize,” Rabbi Cooper added.

さらラビクーパー師は、「それだけではない。このグループを作り、運営している人々が、過去について中傷することに無頓着すぎるのは明らかだ。その結果、韓国や、世界若者たちが、偏見不寛容をカッコイものと考えるようになり、歴史の教訓を忘れることを助長することになる。先頭でパフォーマンスをしている彼らだけでなく、グループ運営している人々も、公式謝罪すべきだ」と付け加えた。

---

まり報道されていない部分への個人的感想

この2点はかなり気になる――なぜなら日本人でも知らない「長崎広島キノコ雲の違い」を明らかにして非難していること、Mocking the victimsという表現を使って「被爆者侮辱している」とSWC認識していることを明らかにしていることから、決して「ナチの方は謝るけど、原爆部分は言いがかり」というメッセージを受け入れないという姿勢が伝わるからだ。はっきり言ってこのメッセージナチ部分がかすむほどに反核的に読み取れる。謝罪すべき対象については「日本の人々(被爆者)とナチズムの犠牲者」と「日本の人々」を最初に置く念のいりようだ――これはそういう流儀なのかもしれないが。

SWCがこのようなリリースを出すのは驚きに値する。「原爆終戦を促し無駄犠牲を防いだ」という史観にさえ抵触しかねないからだ。原爆を開発した科学者ユダヤ人が多く含まれいたことも鑑みると、このようなメッセージが出たことは極めて興味深い。少なくとも巷間マスコミはてなブックマーク等で言われるように「SWCが出てきちゃったよ、やれやれ」とかいった話ではなさそうなのである原爆開発に積極的に加担したユダヤ人代表するような団体が、「広島」と「長崎」を明示的に分けて「嘲笑した」と非難していることについて、多少の考えをいたして欲しい。

2018-11-11

[]2018年11月10日土曜日増田

時間記事文字数文字数平均文字数中央値
006710683159.449
01508608172.248
02223825173.948.5
03215617267.525
041985745.138
051157452.240
0622204492.940.5
0731295795.457
08548958165.974
09749056122.450.5
1093889995.743
11130916770.538
127915319193.948
139310214109.847
14769001118.442.5
159814516148.153
16105955791.058
1785401447.232
186210497169.360.5
1985499258.731
20616124100.448
211451073974.141
2211917378146.038
231421145980.744
1日1744195055111.845

頻出名詞 ()内の数字単語が含まれ記事

人(175), 自分(145), 今(91), 日本(77), 話(58), 増田(57), 前(53), 仕事(52), 女(51), 相手(50), 好き(50), 必要(49), 女性(47), 人間(47), あと(45), 男(44), ー(44), 意味(42), フェミ(42), 普通(41), 問題(38), 気(38), 理由(37), 感じ(36), 日本人(36), 子供(35), 原爆(35), 他人(33), 気持ち(33), 金(32), オタク(32), 頭(31), 目(30), 内容(30), 時間(29), 世界(28), 男性(27), レベル(27), 英語(27), 親(27), 大学(26), 言葉(26), 関係(26), 無理(26), 全部(26), しよう(25), 他(25), ネット(25), 最近(25), 一番(24), 自由(24), 国(24), 結婚(23), 理解(23), 手(23), 迷惑(23), 美人(23), 存在(22), 趣味(22), 今日(22), ゲーム(22), 昔(22), 嫌(21), じゃなくて(20), 場合(20), b(20), 世の中(20), 幸せ(20), 結局(20), お金(20), 漫画(19), 完全(19), 状態(19), 社会(19), 無料(19), 会社(19), 車(18), 結果(18), 事実(18), 説明(18), 心(18), 一人(18), 子(18), 時代(18), 最初(18), 誰か(18), アニメ(18), 映画(18), 別(18), 表現(17), 人生(17), ダメ(17), しない(17), タイプ(17), 正直(17), 勉強(17), シコ(17), ファン(17), バカ(17), 土(17), 家(17), 無駄(17), 先(17)

頻出固有名詞 ()内の数字単語が含まれ記事

日本(77), 増田(57), フェミ(42), じゃなくて(20), 表現自由(16), BTS(15), ネトウヨ(14), KKO(13), 韓国(13), 東京(13), 可能性(12), わからん(12), アメリカ(11), 外国人(11), 中国(11), いない(11), 京都(10), いいね(10), 基本的人権(10), OK(10), Twitter(9), 婚活(9), 価値観(9), hatena(9), 20代(9), 基本的(9), 元増田(9), アプリ(9), いいんじゃない(9), キモ(9), biz(9), 自分自身(8), なのか(8), ぶっちゃけ(8), f8(8), f6(8), d1(8), s(8), なんだろう(8), …。(8), にも(8), 自己紹介(8), b6(8), ブクマ(8), SNS(8), twitter(8), 10年(8), php(8), 個人的(8), 専業主婦(7), お気持ち(7), 精神的(7), 毎日(7), 被害者(7), f1(7), w(7), b1(7), a(7), 奨学金(7), b2(7), なんの(7), f5(7), な!(7), キズナアイ(6), ポリコレ(6), ttp://(6), 笑(6), bb(6), 生産性(6), fe(6), amp(6), トラバ(6), ゾーニング(6), 2人(6), ブクマカ(6), フレームワーク(6), ガチ(6), スマホ(6), ニート(6), 1年(6), ブコメ(6), 5年(6), 下方婚(5), individual(5), 14億(5), コレ(5), アレ(5), 30代(5), 昭和(5), 最低賃金(5), 1週間(5), PC(5), 一般的(5), reception(5), cytbunxi(5), ホッテントリ(5), コチラ(5), 夫婦(5), ブログ(5), member(5), マジで(5), ディオ(5), e4(5), AI(5), b4(5), aa(5), 異世界(5), チョコパイ(5), メルカリ(5), 論理的(5), 1人(5), キモい(5), ナチス(5), key(5), 一緒に(5), 100%(5), 何度(5), 3p(5), 自分たち(5), n/(5), Web(5), おまえら(5), 1回(5), URL(5), p(5), パティシエ(5), 犯罪者(5), ラノベ(5), キチガイ(5), スマブラ(5), ???(5), mkey(5), 仕方がない(5), 萌え絵(5)

本日の注目単語 ()内の数字単語が含まれ記事

恋文(6), individual(5), ディオ(5), パティシエ(5), bb(6), チョコパイ(5), f8(8), コチラ(5), 3p(5), d1(8), スクウェア(4), 原爆(35), 土(17), 戦士(12), 基本的人権(10), y(7), シコ(17), o(7), e(15), フレームワーク(6), Tシャツ(12), h(10), d(15), 反日(9), c(12), 奨学金(7), 指定(13), 運転(12), 表現自由(16), 美人(23), 学ん(10), 無料(19), 借金(9), 返信(9), 食う(11), 20代(9)

頻出トラックバック先(簡易)

40代KKO必死婚活アプリを一か月間使ってみた結果 /20181110151336(20), ■悪質サイトからメールを晒そう /20181110075713(19), ■営業してるとやたらナンパされる /20181109185912(15), ■サンマの内蔵って食べるのが普通? /20181110001043(11), ■車酔いする奴面倒くさすぎ /20181109204321(10), ■未だに特撮ものの偉大さがよくわからない /20181109222920(8), ■結局1番強いキャラってなんなの? /20181110181336(7), ■スクウェア黄金期ってそんなすごかったの? /20181110085030(7), ■日本人が英語能力が低いのを /20181109174335(7), ■汚れちまった悲しみって /20181110034243(6), ■才能のない人間人生ってつまんねーわ /20181109024136(6), ■表現自由十字軍の苦手なモノ /20181110214012(6), ■クレジットカード債務が支払えず裁判まで行ったやばい人達の例 /20181110025858(6), ■ニコニコオススメ動画 /20181109105536(5), ■ /20181110100229(5), ■例の原爆の件って典型的正義の反対はまた別の正義案件だよな /20181110033210(5), ■日本テレビ番組あるある /20181017172802(5), ■高校生はチンチンチャンバラするってマジ? /20181110004841(5), ■スマブラの話 /20181110120600(5), ■ぶっちゃけ日本廃止して英語公用語にした方がいい /20181108223659(4), (タイトル不明) /20151030013920(4), ■いよいよ日本語がわからなくなってきた /20181110131131(4), ■何故か部屋貸してくれないんだけど心当たりがない /20181110121914(4), ■趣味演劇をやったら面白かった事あれこれ /20181110030720(4), ■勉強しに日本に来ている外国人への援助が批判されていることについて /20181110201532(4), ■彼女200円以下のゲロマズ牛乳を買ってきた! /20181110224118(4), ■ /20181110082352(4)

増田合計ブックマーク数 ()内の数字は1日の増減

5781155(3071)

2018-10-27

萌え絵についてオタクが見ていない不都合な真実

ここで語る萌え絵は00年ごろに完成したエロゲ表現様式としての絵柄を指す。なぜならそれが初めて萌え絵と呼ばれた絵柄であったという歴史があるからだ。

現代感覚萌え絵範疇を広げた挙句その源流を少女漫画やらミュシャやらに求め出すアホはすっこんでろ。

さて、現在萌え絵と呼ばれている絵柄は幅広いが、元々萌え絵とは00年頃に絵柄が完成したエロゲ絵のみを指していた。

萌え絵少女無垢性を表現したものという言説もあるが、そんな綺麗事萌え絵一般アニメ絵マンガ絵に多大な影響を与えて却って薄まってしまった現代からこそ言える戯言であり、元は少女が脱いで媚態晒すシチュエーションとセットであったことを忘れてはならない。

しかしながら完成した萌え絵エロとセットであった期間は非常に短い。多分10年もない期間のことだろう。具体的には、Windows98の発売によりPC向けのエロゲーで表現できる絵が豊かになった98年頃からCLANNADが発売した04年までだ。

萌え絵の完成というのは当時のオタク界にとってはエポックメイキングであった。

ここで当時の萌え絵の特徴について整理したい。

まず、よく挙がるのが非常に大きな目の表現である。これが萌え絵の大きな特徴であることは間違いない。ただ、ここだけを以って萌え絵の源流は少女漫画だと語る人も多いがそれは間違いだ。萌え絵少女漫画には大きな隔たりがある。それを作っているもう一つのキーワードが立体感である

萌え絵には大きな目の他にもう一つ、丸っこく柔らかい影をつけて体の立体を表現しているという特徴がある。その表現は平面的な水彩塗りを主とする少女漫画には存在しないものだ。そしてその表現は、女性の裸体を質感をもって表現するという必要性と、当時のCG塗りに使われていたPhotoshopエアブラシというツールの二つが合わさって発明された。

体感を持つ体に大きな目が合わさって初めて萌え絵となったのだ。

この萌え絵という表現様式は控えめに言っても非常に優れていた。可愛いエロいを初めて両立させた絵柄だったからだ。

それまでのエロ絵と言ったら劇画調のものが主だった。一方で可愛い絵と言ったら少女漫画吾妻ひでおあたりで、これらにエロティシズムを感じるのは当時のオタク定義ロリコンと呼ばれたオタクの中でもさらに一握りの人々だけだった。つまり、このころはまだ可愛いエロいは両立していなかったのだ。

それを両立させた萌え絵エロゲーというジャンルから現れたのは必然であった。

そして萌え絵エロとセットになっていた時代を終わらせたのは、エロゲー界に流行った泣きゲーというジャンル物語だ。

泣きゲーというジャンルエロゲーは、KeyLeafといったエロゲメーカーが得意とするものだった。いわゆる葉鍵系である。これらのメーカーが出すエロゲーはエロゲーでありながらエロはおまけ的であり、その価値は泣かせる物語にあった。

この泣かせる物語は正直エロとは相性が悪かった。だが、萌え絵にはそれらの物語ともマッチする懐の深さがあった。萌え絵エロのみに価値があるわけではなかったのである

これらの物語萌え絵マッチは、元はエロゲーの絵柄として発生した萌え絵からエロを剥がすことに成功した。

そしてそれから萌え絵エロゲーを表現する絵柄であったというコンテキストから解放され、アニメ絵マンガ絵に多大な影響を与えていくのである。その過程萌え絵自身もどんどん進化していき、今となってはエロティシズムとは無縁の絵柄に到達したものもある。

一方で、エロゲーの絵柄としての萌え絵も残り続けた。可愛いエロいを両立させ続けている絵柄だ。

さて、ここで萌え絵性的ものだと言って批判する人々が連想している萌え絵とはなんなのか考えてみよう。

今のオタク萌え絵と言って連想するのはエロコンテキストから引き剥がされた現代萌え絵だ。

だが、萌え絵性的だと殊更に槍玉にあげる人々が連想しているのはエロコンテキストにべったり沿った、いわゆる原義通りの萌え絵だろう。それらは主流派ではなくなったが今でもまだ存在している。

これでは両者の話が噛み合わないのは当然である

さら萌え絵性的だと批判する人々がなぜ萌え絵特別視するのか考えると、そこには萌え絵が実現した可愛いエロの両立が非常にショッキングものであることが大きな要素になっているだろう。

萌え絵以前はエロといえば劇画であり大人世界のものであった。一方で可愛いといえば少女漫画であり、子供特に女の子のためのものであった。しか萌え絵可愛い世界エロを持ち込んだのだ。

これが子供を守る親の視点から見て、ショッキングでないはずがない。

から私自身は萌え絵が好きなオタクであるが、個人的には萌え絵批判する非オタクの大人批判宜なるかなと思っている。

そして、萌え絵といえばエロゲー用の絵柄であったという歴史に目をつぶり、萌え絵エロくないと言い張って萌え絵批判批判するオタクには幾らかの憤りを感じる。

重要なところを復習する。

まず、初めて萌え絵と呼ばれた絵柄はエロゲー用に完成された可愛いエロを両立する絵柄であること。

それは一般的に見て非常にショッキングな絵であり、それを受け継いだエロ萌え絵が今も存在していること。

これらを今のオタクは忘れてしまったのだろうか?少なくとも今のアラフォー以上で20年くらい前からオタクをやっていたような人は覚えているべき歴史ではないのか?

これらの歴史をまるでなかったかのように扱い、萌え絵エロいという人を一方的非難するのは非常に不誠実ではないだろうか?

萌え絵と呼ばれている絵柄は非常に豊饒で、エロとは無関係のものが主流だ。それは確かな事実である

一方で萌え絵エロゲからまり、今もそれを引き継いだエロ萌え絵存在するのも事実である

普通に考えて、萌え絵性的ものだと批判する人々が連想しているのは後者だ。前者に引きずられて後者連想している場合もあるか。

だが、それが考えられずに、あるいはわざと無視して萌え絵批判批判を返すのは非常に不実だと言わざるを得ない。

萌え絵の元の定義を今一度思い返してほしい。

ブコメレス

id:cloq 萌え絵の源流はエロゲ絵であり、萌え絵性的描写とは関係ないと言い張るオタクは嘘つきだって話だよ。

2018-10-24

増田プログラマー養成講座 その11 データベースを使ってみよう

前回まで手続言語の基本(構造プログラミングオブジェクト指向プログラミング)を見てきた。

今回から問合型言語SQLを学び、データベースDB)を使ってみよう。

 

データベースとは?

大量のデータを記録して、活用するために特化したソフトウェアが「データベース」だ。

データベースには、いろんな種類があるけど、今回学ぶのは「リレーショナル・データベース」(RDB)だ。

 

データベースの利点

データベースがなかった時代の人々は、大量のデータを扱うのに苦労していた。

データベース活用すれば、人間は脳の記憶力を補完して、膨大な知識を扱うことができるようになる。

キミも今日からデータベース活用して、記憶力を100億倍にしよう!ドラえもんの暗記パンなんて目じゃないぜ!!!

 

勉強方針

 

MySQLの起動

MySQL無料で使えるRDBです。MySQLデータベース練習をやってみよう。

それではさっそく、以前インストールしたXAMPPで、MySQLを使ってみよう。

 

  1. xamppフォルダの中にある「xampp-control.exe」をダブルクリックしてください。
  2. XAMPP Control Panel」が表示されたら、一番上の「Apache」と次の「MySQL」の「Start」ボタンクリックします。

Port(s)が「80,443」「3306」と表示されたら、PHPMySQLが使える状態になってます

 

phpMyAdminの起動

Webブラウザー(Google Chromeなど)で、「 http://localhost/phpmyadmin/ 」というURLを開く。

phpMyAdmin」という画面が出てきたらOK

 

phpMyAdminとは?

phpMyAdmin」は、MySQL管理するツールです。

phpMyAdmin」で検索したら、使い方を紹介する記事が、たくさん見つかります

 

phpMyAdmin(ピーエイピーマイアドミン)はMySQLサーバーウェブブラウザ管理するためのデータベース接続クライアントツールで、PHP実装されている。

phpMyAdminを用いることで、SQL文を記述することなく、MySQLデータベースに対して様々な操作が行える。

また、ユーザ任意SQL文を記述して実行することもできる。

 

phpMyAdminの使い方解説ページ

検索したら、こんなのがありました。

 

データベース作成

それでは練習で使うデータベースを1個作ってみよう。

後で簡単チャット(おしゃべり)ができるWebアプリ作ってみたいと思う。(Twitterをショボくしたシステムw)

チャット用のデータベースとして「chat」という名前データベースを作ろう。

 

これで「chat」という空のデータベースが1個できた。

 

テーブル作成

RDBの「テーブル」とは、データを保存する表のこと。

「chat」データベースの中に、テーブルを1個作ってみよう。

 

すると「名前」「データ型」「長さ/値」「デフォルト値」…などの空欄がたくさん並んだ画面が表示されただろう。

4段ある上から順番に、以下の通り入力してくれ。

これでテーブル構造を設定することができた。

これら4段の下にある「ストレージエンジン:」欄は「InnoDB」にしておく。

ここまで入力したら、画面右下にある「SQLプレビュー」というボタンクリックしてみよう。

すると、

CREATE TABLE `chat`.`message` (

 `id` INT NOT NULL AUTO_INCREMENT ,

 `create_at` DATETIME NOT NULL ,

 `update_at` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,

 `message` TEXT NOT NULL ,

 PRIMARY KEY (`id`)

) ENGINE = InnoDB;

というSQL文が表示されただろう。

これが「SQL」というデータベース操作するプログラミング言語の書き方なんだ。

今はツールを使って自動的SQL文を作成したが、SQL文法を学べば、自分で書けるようになる。

とりあえず、今はphpMyAdminでMySQL簡単操作してみよう。

 

すると、画面左側のデータベース一覧で、「chat」の下に「message」というテーブルが表示されるようになっただろう。

これでテーブル作成ができた。

 

データ作成

データベースと、その中のテーブル(表)を作ったけど、まだデータが入ってないので空のままだ。

phpMyAdminでデータを1件、追加してみよう。

すると、

INSERT INTO `message` (`id`, `create_at`, `update_at`, `message`) VALUES (NULL, '2018-10-24 12:34:56', CURRENT_TIMESTAMP, 'Hello, world!')

というSQL文が表示されただろう。

これがデータ操作するSQL文の一例だ。これも後でSQL文法を学んでみよう。

これでデータが1件追加できた。

 

こんなかんじで、とりあえず、phpMyAdminでMySQLをいろいろいじって練習してみよう。

 

まとめ

 

次回以降の予定は、

  1. データベース参考書を紹介
  2. SQL文法
  3. データベース設計方法
  4. データベースを使ったWebアプリ作成
  5. データベース理論

といったかんじです。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう ←★今ここ★

anond:20181026145516 増田プログラマー養成講座 その12 データベース参考書

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-10-09

エロゲ美少女ゲームは違う

美少女ゲームは、美少女との恋愛がメインで、R18のkeyゲームでも、セックス恋愛の末の到達点ではあっても、少女性的に消費してる訳ではなく、一方でエロゲ(ヌキゲ)はセックス描写がメインになっています

萌えという言葉からkeyゲームCCさくらイメージするぐらい古い人なので、萌え絵が、女性の性を強調している事自体が逆に驚きというか、世の中変わったなと。

もちろん、それらを種にしたエロ目的2次創作は山ほど作られていたけど、元ネタ美少女女性性よりは、むしろ、より無垢で未成熟存在として描かれることの方が多かったように思えます。(それがいいかいかは別の問題

萌えという言葉に、無垢で未成熟イメージの方が強い当方としては、おっぱい股間が強調されたり、露出度の高い女性キャラというのは、エロゲ萌えキャラ悪魔合体のように思えてしまます

フェミニズムとか、表現の自由かには、あまり関心がなのですが、当時の萌えキャラと、今の萌え絵と呼ばれているものが、うまく接続しない人、他にもいませんか?

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