はてなキーワード: インスタンスとは
// 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(&amp;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(&amp;msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &amp;msg)) { TranslateMessage(&amp;msg); DispatchMessage(&amp;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, &amp;ps); MyWindow *target = MyWindow::find(hWnd); target->OnPaint(); // TODO: HDC を使用する描画コードをここに追加してください... EndPaint(hWnd, &amp;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; }
// 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); class MyWindow { public: HWND hWnd; MyWindow() :hWnd(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(&amp;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(&amp;msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &amp;msg)) { TranslateMessage(&amp;msg); DispatchMessage(&amp;msg); } } 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, &amp;ps); // TODO: HDC を使用する描画コードをここに追加してください... EndPaint(hWnd, &amp;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; }
こんなかんじ。クラス化した
毎晩、寝る前に自分が遊戯王で一番好きなカード「D-HERO ダイヤモンドガイ」と相性が良いカードを頭の中で作ってはVジャンプに基本紹介的に書かれるようなコンボをレビューしている。
わからない人に説明すると、遊戯王カードの「通常魔法カード」という他のゲームでいう呪文(スペル)とかインスタンスとかいうもので、基本的には「コスト」を払って「効果」を得る。(もちろんノーコストのものもある。)
ダイヤモンドガイはこの「コスト」を踏み倒して「効果」だけを得るぶっ壊れカードで、これに魅せられた私は、遊戯王をすでにやっていないにも関わらず、遊戯王Wikiで通常魔法カードだけをみてダイヤモンドガイが確実に出来ることが増えるのを楽しみにしている。
でも、物足りない。
「D-HERO ダイヤモンドガイ」というのは、2006年だったかに出た。その時の主人公のライバルとして出てきたエド・フェニックス(CV:石田彰)が使うモンスターとして出てきたのが「D-HERO ダイヤモンドガイ」だ。
当時の友達は「D-HERO ダイヤモンドガイってなんて馬鹿げたカードなんだ。普通に使えばいい魔法カードをわざわざ1ターン後に使う意味がない。」という意見だった。
しかし、当時の遊戯王プレイヤーは違った。自分は景品のカードが欲しくて小さいおもちゃ屋の遊戯王の大会に毎週通っていた。
そこでその店のTCGオタクの長である高校生のYさん(遊戯王カードのことを聞いたら何でも教えてくれる)に「D-HERO ダイヤモンドガイ」はどう使えば良いのか?というのを聞いた。
そうして、天啓を得て、少年は「D-HERO ダイヤモンドガイ」に執着するようになる。
だが、仲間内では遊戯王の公式ルールをあまり把握していないものも多く、正式な「D-HERO ダイヤモンドガイ」は増田の勝手な解釈として封じられることになる。
そうして、中学校にあがり部活に勤しむことで実際のカードを買ったり、アニメを見なくなった。
それでも、毎日のように「D-HERO ダイヤモンドガイ」のことは忘れなかった。
毎日毎日、寝る前に必ず「D-HERO ダイヤモンドガイ」はどうすればもっと活躍できるかを考える。
考えるパターンは主に3つだ。
1.「コスト」がおもすぎるかわりに「効果」が大きい通常魔法カード
これは単純に「D-HERO ダイヤモンドガイ」がコストを踏み倒せることに注目したカードである。これが5割を占める。
2.「D-HERO ダイヤモンドガイ」の発動をサポートするカード
つまり「デッキの一番上を操作する」カードであったり、相手のターンを限定的にスキップして即時的に効果を得るカードである。これはバランスブレイカーになりやすいので考える事はかなり多いが採用率は1割に満たない。
遊戯王はシリーズを重ねる度に新しい召喚方法が出るのが遊戯王5d'sというアニメからお約束らしいので、その召喚方法に合ったダイヤモンドガイを作る。これが4割。
このカードが召喚に成功した時、デッキの上からカードを3枚確認する。
確認したカードの中に儀式モンスターまたは儀式魔法カードがあった場合、
その1枚を相手に見せて手札に加える事ができる。
本当にびびった。実際考えていたのは戦士族で同じカテゴリーのD-HEROという名前をもたせたいたが、効果にいたっては
「このカードが召喚に成功した時、デッキの上からカードを3枚確認する。
という感じで儀式関係が全く抜けているがほぼそのまんまだった。3枚というのも一致している。詳しくは省くが3枚はダイヤモンドガイにとって丁度いいのだ。
《終まりの始まり/The Beginning of the End》
通常魔法
自分の墓地に闇属性モンスターが7体以上存在する場合に発動する事ができる。
当時は、「デステニー・ドロー」というカードがあり、そのカードで2枚ドローするというのが「D-HERO ダイヤモンドガイ」の主な使い方だったのだが、
3枚ドローできれば流石にみんな使うんじゃないかと思い、物凄く重いコストで、3枚ドローを何個も考えた。
そのうち一つが「終わりの始まり」にそこそこ近く、考えていたのは「墓地の5枚のD-HEROをデッキに戻して3ドロー」という「墓地を参照して墓地コストで3ドロー」効果だった。これは貪欲な壺というカードのD-HERO限定版だから3ドローしてもいいだろうという判断だったが、後にこういう効果にすると「墓地の5枚のD-HEROをデッキに戻し」はコストではない判定になるので無理だということを知ることになる。
知っている人は知っているIT界隈ではそこそこ有名なdrikinによって立ち上げられたMastodonインスタンスだ。
これが立ち上がった経緯はdrikinが主催しているbackspace.fmというPodcastのリスナー達とコミュニケーションするために立ち上げられたもの。
何故、物凄くマイナーなグルドンなんていうコミュニティの話題を出したのか?はグルドンに関わる以下の人物リストを見てもらえればはてな民は興味を示し、解るかも知れない。
特定の都道府県でのみ有名な人物や一部界隈で有名な人物など挙げればもっと出せるが、あまりにも数が多いので10年以上ネットウォッチしていれば一度は名を見たことがあるであろう人物を列挙した。
はてな民のアイドルおちゅーんやshi3z、Appleポエマーnobi、ミクラスのGOROman、Perfumeプロデューサーのヤスタカ、150万登録Youtuberカズチャンネルとは何なんだこのメンバーは。
仲良しお友達コミュニティなのは間違いないが、はてブにはそんなこと書いてないわけで、関わっている人物を調べれば調べるほど驚いた。
しかもグルドンは企業支援を受けていて、さくらインターネット株式会社とフェンリル株式会社というこれまた有名どころが出てくる。
グルドンにアカウントを作っているユーザ層は30〜50代で20代以下の若者は非常に少ない。多くの登録ユーザがYoutubeへ動画投稿もしており顔出しに対してそこまで頓着が無いようだった。
登録者の大半が30代以上なので、ある程度収入があり生活が安定しているのか、高価なガジェットやカメラの購入報告が頻繁にあり、懐古的なパソコンの話も盛り上がる傾向にある。
今どきのネットユーザはTwitterやInstagramかと思っていたしMastodonなんて使うのは一部のギークばかりと思っていたが、今どきじゃない中年達の手によって気付いたらこんなコミュニティが出来あがっているとは。
時代遅れのおっさんのやる事には若者はついてこないというのは理解できるが、30〜50代の社会人は若者に比べて発言力だけはあるのでどう転ぶかには興味が尽きない。
これを"思い込み"と表現しても良いし、他には"勘違い"だったり、過激な表現を使えば"無知"と言って良いかも知れない。
それは別にTwitterユーザやはてなユーザだけでなく、当のMastodonユーザですらMastodonというSNSの認識へ対して憶測を話してしまうことがある。
今回はその憶測を解いていこうかな?と思う。
もちろん開発がオープンで行なわれており、そういった自由さはTwitterよりもある。
しかし、言論の自由がTwitterよりもあるのか?と言われると「インスタンスによる」としか言いようがない。
なぜなら中央集権ではないMastodonのルールは、そのインスタンスの管理者が法令に背かない範囲で定めるからだ。
Mastodonでは独裁体制を築く自由すらあると考えなければならない(インスタンス登録ユーザがついてくるかは別として)。
現在はTwittetよりも圧倒的にユーザ数が少なく、そのため話題のバリエーションもTwitterよりは抑えられているという傾向はある。
しかし、もしTwitter並のユーザ数となる未来を想定した場合の心的ストレスはそこまでTwitterとは変わらないことが予想できる。
個々のユーザは自分の発言に対して責任を持たなければならないのはTwitterと全く同じで、責任の重さから来る心的ストレスは絶対にある。
Mastodonにはいわゆる"テーマ系インスタンス"と呼ばれるインスタンスが存在する。
Twitterにはないローカルタイムラインが存在し、まるでチャットのようにコミュニケーションをすることが可能なので、コミュニケーションには他のユーザのフォローが必須なTwitterよりはコミュニティを形成しやすい。
しかし、これによって一部のMastodonユーザの中でMastodonというSNSへ対して誤解が生じる原因にもなっていたりする。
これについて語っていこう。
これがMastodonを運用するにおいてイメージしやすい前述したテーマ系インスタンスである。
テーマを絞り、参加するユーザの趣味趣向を近付けることによってコミュニケーションをするローカルタイムライン派。
ローカルタイムラインによってコミュニケーションを行なう場合はユーザフォローは必須でない。
そのインスタンスへ登録しているユーザの公開書き込みはすべてローカルタイムラインへ公開されているのでフォローする理由に乏しいのだ。
しかし、Mastodonにはホームタイムライン派と呼ばれる層も居て、自分の使い方がMastodonすべてでの使い方だと勘違いしてしまうと、考え方の違いによって衝突する可能性が出て来てしまう。
例えばユーザ数が数万も居るようなインスタンスではローカルタイムラインの流速は物凄く速く、人間では読むに堪えない。
そのためユーザ数が数万も居るようなインスタンスではTwitterのように気になるユーザをフォローしてホームタイムラインをメインとして運用する手法がスタンダード。
こういう使い方では単にユーザ数の少ないTwitterでしかないので、Twitterをヘビーに使っているユーザからするとつまらない可能性が高い(面白そうなユーザの絶対数も少ないため)。
ローカルタイムライン派は基本的にフォロー機能の価値が低く、その発言は自身が所属するコミュニティーへ向けて発信されていることが多い。
逆にホームタイムライン派はフォロー機能の価値が高く、Mastodonは他のインスタンスのユーザもフォローが可能なので、ここで認識の違いが生まれる。
ホームタイムライン派はインスタンスを飛び越えてコミュニケーションを取ることへ慣れているので、インスタンスを飛び越えてコミュニケーションを取ることへ慣れていないローカルタイムライン派へ何らかのアプローチを仕掛けてしまうことがある。
その際、ローカルタイムライン派は困惑した状況へ陥ってしまう可能性が高い。相手へどのようなノリで返信して良いのか判らないからだ。
更にはより閉じたコミュニティーであれば他のインスタンスからアプローチを仕掛けられること自体が不快であると感じてしまうことすらある。
しかし、こういうローカルタイムライン派へ「そう思うのであればMastodonを使うこと自体が誤りじゃないか?」とアドバイスしても、単にそれは「お前の中ではそうなんだろ、お前の中ではな」という話にしかならないので無駄。
これはそれぞれの価値観の話でしかなく、不快かそうでないかは話し掛けられた方の主観でしかないので話し掛けられても良い気分のときもある。それは人間だから仕方ない。
想像力の逞しいはてな民であれば、ココまで説明するとココからどんな問題が発生するか?という想定はいくつも出来るだろう。
Mastodonはそういう意味ではTwitterよりもコミュニケーションが大変になる可能性はなくもない。
どんなに社会通念上の倫理観で非難すべき発言であれ、そのインスタンスが「当インスタンスでは、この系統の発言は許容されている」と非難されるべきユーザを庇う可能性がある。
その際、非難した側のユーザは身を引くか、更に広く社会へ訴え出て、庇ったインスタンスへ非難を表明するかのどちらかになる。
これはもはや現実世界の国家へ個人が非難を浴せる、もしくは国家間紛争と変わりなく、MastodonとはそういうSNSなのだ。
これを認識せず「MastodonはTwitterよりも気楽」と安易に考えてしまうのは早計である。
国であるからこそ、それぞれの思想によって自由に国造りをすることが可能。
※この記事はウィスキーストレートの影響により読みづらい部分があります。
クラスやインスタンスすら知らない人達がJavaエンジニアを名乗ったり、Hueのデモをしただけで IoT 特区に派遣されたり
色々不安はあったので、いつか転職しようとは思っていたが、これがまた微妙にぬるま湯な環境なので特に行動しなかった。
インフラ系なんで経営的には過去最高だったり(でも給料はかわらない)会社の存続を心配することは皆無だけども
特定派遣法も厳しくなったこともあり、エンジニアリングより営業や、データーセンターのベンダーコントロールを任されることが増えてきた。
中学の頃からVBをやっているくらいプログラミングが好きなので、
来年の30前に転職を経験しておこうと思って活動してみた・・・わけだが。
書 類 す ら と お ら ね え ^_^
とりあえず、”業務経歴として”開発できることを求められることがわかった。
ちなみに、自分のコーディングスキルは、学生の頃にSDL、末期にはXNAやcocos2dxでスマホゲーくらいなら作ったことがある。
Unityはまったくしらん。
Web系では vue.js+rails で社内(2000人程)向けの okweb的なものはつくったりもした。これは割と好評だった。
しかし、振り返れば、確かに「一般サービスの開発経験」は皆無だし、自分が業務でやってきたのは公共系の改修作業がメインで、
新卒であれば、業務経験は問われないので、そういう意味では新卒で入る会社を誤ってしまったようだ。
組込み界では今時のプログラミング界隈の常識の多くが通用しない。最初にあなたが相手にするのはRAM 1kB, ROM 4kB、クロック 20MHzなどというMCUである。
使用する言語はC99かアセンブラである。幸か不幸かC++を使わされることもある。既にC++で書かれたプロダクトに係わってはならない。
当然フロントエンド界隈などのようなイミュータブルインスタンスを大量に使い捨てる富豪的な言語やアプローチの採用は難しいだろう。
トラブルが起きたときにプログラムだけでなく回路図を読んでハード側に問題があるこを示せないと極めて立場が悪くなる。
むしろプログラムし易いコンポーネントの選択や回路構成に積極的に口を出していかないと動かない責任だけがソフト担当者に投げられて割を食う。
開発環境はWindows上のEclipseベースの統合環境が使えれば上等であり、運が悪ければMCUメーカーお仕着せのクソIDEを使わせられる。Macで優雅に開発することはまずあり得ないだろう。
底辺企業でバージョンコントロールシステムの導入のための意識改革は簡単ではない。もし強行に導入しようとすればあなたは孤立する。
誰かがIoTだ、機械学習だの言い始めても社全体として主力製品を作るのでなければ本気で取り組んではいけない。あなたがそのテクノロジーを理解していても誰もサポートもメンテもしてくれないのだから。
クラスは確かなんでも良いんだよね? 性別のクラスがあったり、性格のクラスがあったりとか…。
シリアライズはたくさんのクラスを通って作られたインスタンス(実体)の特徴をまとめたデータってこと?
クラスってのはバーサーカーとかライダーとかキャスターとかいろいろあるだろ。
「属性」と「振る舞い」が定義された人間側の便宜的な区別だよ。
セイバークラスには「顔が似てる」って属性が定義されていて、キャスターには「重いものを運ぶのに便利」って属性が定義されてるだろ。そういうのの塊。
野獣先輩なんかはバーサーカークラスから作られたインスタンス。吉田沙保里もバーサーカークラスから作られたインスタンス。
それは、バーサーカークラスに「乱暴である」という属性定義があるからなんだ。
そして、その野獣先輩の特徴をwikiなんかに箇条書きで纏めていくことを「シリアライズ」と言う。
そうすることでwikiを参照した他の野獣先輩ファンが、自身も野獣先輩になり切ることができるわけだろう。
このようにインスタンスの詳細を言語化することをシリアライズするってことになるんだよ。
分かった?
クラスって、FunctionとかSubプロシージャとかそういう感じ?
シリアライズは、この例えで無理やり続けるなら、インスタンスのたい焼きの頭を食べたとして、この時点で実体の状態が変化している
だめだ、わからん。