結果だけでなく過程も見てください

日々の奮闘を綴る日記です。

ゼノブレイド3個人メモ

のんびり進めながらメモしていきます。

ノポンの名簿

場所 NPC ジェムの色
丘陵のキャラバン シルジル
荒野のキャラバン ベネル洞窟の休息地 or レセント湖の休息地 キヌヌ
ネウス湖の休息地 ミムミム
坑道のキャラバン 三話 ゾゾカ
アルフェト渓谷 べレジェ地帯 先陣の野営地 マミマー
古道のキャラバン 四話 ロロカ
第二浮遊岩礁 四話 ジリジリ 黄?

執政官一覧

エスト名などメモ アルファベット
想いの在り処 B
一話で合うメビウス D
力の行く先 G
第三話 J
義を見てせざるは K
イケメン N
なんだな O
Oとコンビの女性 P
ルディのコロニー 優しい右手 Q
ボスっぽい Z

サブクエス

迷いのおくりびと

アグヌス兵との戦闘後のモレイの居場所

ナビゲーションの目的地から北(崖付近)の岩の裏に隠れている

ユニークモンスター

場所 名前 LV
シウェラ浮遊岩礁地帯 第四浮遊岩礁 烈日のカーライル 40
シウェラ浮遊岩礁地帯 第三浮遊岩礁 怯懦のポガード 38
ケヴェスキャッスル 格納庫 下層 エクスキューショナーズ(断罪のアビトレイター&誅罰のドミネイター) 42
同上 漆黒の三連星 43
シウェラ浮遊岩礁地帯 エクダソの崖 弩角のダンテス 55
大剣の麓 隠世のルミー 42
大剣の麓 木漏れ日のフローリア 71
大剣 鍔飾りのファルターレ 47
モクルナ大森林・上層 ターキンの砦 暗愚のターキン 45
インヴィディア山道 要撃戦型フェリト 48
インヴィディア山道 攻城戦型シュルツ 48
インヴィディア山道 45

Windows PCを使っていたら突然ネットから切断されオフラインになったときの復旧方法。OS再起動不要で対処します。

ネットワークインターフェースカード(NIC)の再起動だけを行います。

1.まずタスクバーにある以下のネットワークアイコンを探してください。
見つかったら右クリック→ネットワークとインターネットの設定を開く、と選択する。

2.「イーサネット」を選択する

3.「アダプターのオプションを変更する」を選択する

4.自分の使っているネットワークカード(アダプタ)を右クリックする
その後「無効にする」を選び、少しだけ待ったあと「有効にする」に戻す。
複数NICがあり、自分がどれを使っているかわからないときは、「イーサネット」「イーサネット2」などを対象にしてみてください。

これでOS再起動と同等の効果がNICにだけ適用されるはずです。

H2 Databaseをとりあえずレベルで動かしてみる

酔った状態で適当にやったら動いたんだけどね、次の日になったらなんと何も覚えてないの。
なんとか簡単な手順だけでも記録しておかねば・・・。

H2 DatabaseはJavaで動くDatabaseであり、気軽に使用できるDBとしては最適です。
自分もテストで作成してみましたが、わずか1時間程度でJavaから情報を引き出すことができました。

1.まずはJava(JDK)のインストール
これJDKインストールしなくても、JAVA_HOMEでJavaへのパスが通っていればいい気がします。
自分の場合はpleiadesをインストール済みなので、pleiades内のJavaにパスを通しています。

C:\pleiades\2022-03\java\17

JAVA_HOMEの内容はこんな感じで。

2.H2 Databaseのインストール
H2 Database Engine
ここからWindowsインストーラーをダウンロードしてインストールします。

3.スタートメニューからH2 Consoleを起動して新たにデータベースを作成する
とりあえずC:\temp\db2\testにDBを作るとします。
ユーザー名sa、パスワードは空でログインする。

で、ここで存在しないDBがある場合、新規に作られるはずだが、エラーになってしまうことがある。自分はエラーになった。

その場合はタスクアイコンにあるH2アイコンから先に新規DBを作る必要がある。右クリック→Create a New Database→Database path「C:\temp\db2\test」としてパスワードは適当に設定する。

4.テーブルを作成する
SQL文を入力して、実行ボタンを押す。
以下のSQL文でテーブルを作成する。IDと名前を持つテーブルである。

CREATE TABLE BEER(
  ID INT PRIMARY KEY,
  NAME VARCHAR(100) NOT NULL
);

5.テーブルにデータを入力する

INSERT INTO BEER (ID, NAME) VALUES (1, 'SUPERDRY');
INSERT INTO BEER (ID, NAME) VALUES (2, 'YEBISU');

セットした値を確認したいときは以下。

SELECT * FROM BEER;

6.JDBCドライバをダウンロードする
https://www.h2database.com/html/download.html
ここのMaven (Binary JAR, Javadoc, and Source)のBinary JARをダウンロードします。ここではC:\tempに配置することとします。h2-2.1.214.jar。

7.EclipseJDBCドライバを追加する
プロジェクトを右クリック→[プロパティー]→[Javaのビルド・パス]→[ライブラリー]→クラスパスに外部JARの追加でC:\temp\h2-2.1.214.jarを追加する。

8.Javaのコードを書く
パスワードはsaとしていますが、

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

:

String JDBC_URL2="jdbc:h2:file:C:\\temp\\db2\\test";

try
{
	Connection conn = DriverManager.getConnection(JDBC_URL2, "sa", "sa");
	
	String sql = "SELECT ID, NAME FROM BEER";
	PreparedStatement pStmt = conn.prepareStatement(sql);
	
	
	ResultSet rs = pStmt.executeQuery();
	while(rs.next())
	{
		String id = rs.getString("ID");
		String name = rs.getString("NAME");
		
		System.out.println("ID=" + id);
		System.out.println("NAME=" + name);
	}
}
catch (SQLException sqlex)
{
	System.out.println(sqlex);
}

9.Javaコードを実行する
javaファイルを右クリック→[実行]→[Javaアプリケーション]

トラブルシューティング

他の接続をすべて閉じてください的なことを言われたときは、タスクアイコンにあるH2 Database Engineを終了させるといいかもしれません。

Windowsで超シンプルなC/C++のDLL作成方法、C/C++からDLLの関数を呼ぶ方法、JavaからDLLの関数を呼ぶ方法、DLLに含まれる関数の調べ方

今更な内容の個人的メモ。極力手短な手順で。環境はWindows 10(64-bit)です。
例としてVisual Studio Community 2019を使って、2つの整数を受け取り、その和を返す関数を作ります。
JavaEclipse(Pleiades)を使ってます。

C/C++のDLL作成方法

1.[ファイル]→[新規作成]→[プロジェクト]→「dll」で検索して出てきたテンプレートを選択する。プロジェクト名は「sum」とする。
2.ヘッダファイルを作成する。名前はfunc.hとする。内容は以下。

#pragma once
#ifndef __FUNC_H
#define __FUNC_H

#ifdef DLLEXPORTS
#define DllExport extern "C" __declspec(dllexport)
#else
#define DllExport extern "C" __declspec(dllimport)
#endif

DllExport int __cdecl sum(int a, int b);

#endif

3.プロジェクトを右クリック→[プロパティ]→[C/C++]→[プリプロセッサ]→[プリプロセッサの定義]に「DLLEXPORTS」というマクロを定義する
4.dllmain.cppに関数の定義を書く。内容は以下。
ポイントとして必ず上記func.hをincludeすること!(includeしないと関数はexportされません)

#include "func.h"

int __cdecl sum(int a, int b)
{
    return a+b;
}

5.ビルドしてsum.dllを生成する
※以降で使うので同じ場所に生成されたsum.libがちゃんと生成されてるかも確認してください

C/C++からDLLの関数を呼ぶ方法

1.C/C++のプロジェクトを適当に作る
2.プロジェクトを右クリック→[プロパティ]→[リンカー]→[追加のライブラリ ディレクトリ]に上記「C/C++のDLL作成方法」で生成されたsum.libが存在するディレクトリを指定する
3.プロジェクトを右クリック→[プロパティ]→[リンカー]→[入力]→[追加の依存ファイル]に「sum.lib」を追加する
4.上記「C/C++のDLL作成方法」で作成したfunc.hをプロジェクトに追加する。
5.ビルドして実行ファイルを生成する
6.実行ファイルと同じ場所に「sum.dll」を配置してから、実行ファイルを実行する

JavaからDLLの関数を呼ぶ方法

ここの記事はあまりシンプルにまとまっていないかもしれません。ごめんなさい。
1.Eclipse(pleiades)で[ファイル]→[新規]→[Javaプロジェクト]で適当なプロジェクトを作る。ここではプロジェクト名をUseDllとする。
2.プロジェクトを右クリック→[新規]→[その他]→[Java]→[クラス]を選び、パッケージは「samplepkg」など適当なものにし、[名前]のところは「UseDll」とする。また画面下の方から「public static void main」を生成するように設定する。

3.以下にアクセスしてJavaからC/C++のDLLを呼び出すためのJNAのjarファイルをダウンロードする。わかりにくいけど「JNA Platform」あたりにあるjna-platform-5.11.0.jar(バージョンは時期によって異なる)あたりからjarをダウンロードできる。
github.com
4.プロジェクトを右クリック→[プロパティ]→[Javaのビルド・パス]→[ライブラリー]→[クラスパス]→[外部jarの追加]を選び、3.でダウンロードしたjna-<バージョン>.jarを指定する。[適用して閉じる]でウィンドウを閉じる。
5.DLLをJavaから見える場所に配置する。ここがちょっとややこしい頑張ってください。EclipseでworkspaceにプロジェクトUseDllを作っているとしたら「(Eclipse)インストールパス\workspace\UseDll\bin\」の場所にsum.dllを配置してください。
6.UseDll.javaが以下のソースになるようにする。

package samplepkg;

import com.sun.jna.Library;
import com.sun.jna.Native;

public class UseDll 
{
	public interface CLibrary extends Library 
	{
		public int sum(int a, int b);
	}

	public static void main(String[] args)
	{
		// TODO 自動生成されたメソッド・スタブ
		final CLibrary clib = (CLibrary)Native.loadLibrary("sum", CLibrary.class);				
		System.out.println("result = " + clib.sum(10, 32));
	}
}

7.ここからがあまり慣れていない点ですが、ちょっと手探りです。とりあえずうまく動いたので記事は書いていますが、32-bitのJavaをインストールする必要があったり、少し面倒な印象。なんとかならないのかな…。シンプルでなくてごめんなさい。Visual Studio Communityで何も考えずにDLLを作るとどうやらDLLが32-bit版になるようです。で、64-bitのJavaから32-bitのDLLはどうやらコールできないようで・・・Javaも32-bitにする必要があるようです。今回は古い32-bitのDLL(再作成が不可な状況)を想定していますので、Javaを32-bitにする方法を採用したいと思います。
[https://www.java.com/en/download/manual.jsp:title=Java Archive Downloads - Java SE 8 | Oracle 日本]
ここから「Windows x86」(つまり32-bit版)をダウンロードしてインストールします。
8.Eclipseに7.でインストールしたJavaを追加する。[ウィンドウ]→[設定]→[Java]→[インストール済みのJRE]→[追加]自分は「C:\Program Files (x86)\Java\jre1.8.0_333」を追加した。
9.プロジェクトを右クリック→[プロパティー]→[Javaのビルド・パス]→[ライブラリー]でJRE システム・ライブラリーを選択して[編集]ボタン→代替JRE→8.で追加したJREを指定
10.UseDll.javaを右クリック→[実行]→[Javaアプリケーション]

おまけ

DLLに含まれる関数の調べ方

1.VisualStudioの開発者用のコマンドプロンプト(英語でインストールされているときはDeveloper Command Prompt)を起動する
2.dumpbin /exports <対象のDLLファイル>
3.以下のように「ordinal hint RVA name」みたいなヘッダがあれば関数がエクスポートされている(DLLの関数として使える)ことになります。

DLLが64bitか32bitかを調べる方法

1.VisualStudioの開発者用のコマンドプロンプト(英語でインストールされているときはDeveloper Command Prompt)を起動する
2.dumpbin /headers <対象のDLLファイル> | findstr machine
3.「machine (x86)」のような表記の場合は32-bit、「machine (x64)」のような表記の場合は64-bitだとわかる

トラブルシューティング - libファイルが生成されない

おそらくなんらかの理由で関数がエクスポートされていません。
このあたりのコードが抜けていませんか?

#include "func.h"
#define DLLEXPORTS

DLLとして使用できる関数がない場合、libファイルは生成されません。
↑で紹介したdumpbinコマンドで関数がエクスポートされているか確認してください。
libが生成されない場合おそらくは関数のエントリポイントが存在しないはずです。

トラブルシューティング - JavaでDLLが見つからないときのエラーメッセージ

以下のように「指定されたモジュールが見つかりません」と言われます。

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'sum':
指定されたモジュールが見つかりません。

指定されたモジュールが見つかりません。

指定されたモジュールが見つかりません。

Native library (win32-x86/sum.dll) not found in resource path ([file:/C:/pleiades/2022-03/workspace/UseDll/bin/, file:/C:/temp/jna-5.11.0.jar])
:
:

エクスポート/インポートを自動で切り替えるマクロについて

プロジェクトで「DLLEXPORTS」というマクロを定義しておくとエクスポートになり、定義していないと自動的にインポートになるようなマクロです。DLL関数を定義する際によく使う手法です。

Windows版Discordで「アプリ」を指定して画面共有してるのに、指定したアプリ以外の画面も共有されてしまう現象が発生

題名の通り、指定したアプリ以外の画面がライブに映りこんでしまう現象を確認しました。
これは怖い!!😱ということで情報共有します。
個人的に、これはセキュリティ上かなり重大な問題だと思っています…。


詳細

例として以下の画面を「アプリ」を指定して画面共有しているとします。
CLIP STUDIO PAINTというペイントソフトです。

ここでAlt+Tabを押すと、以下のように「ウィンドウの切り替え画面」が表示されますが・・・

普通なら「アプリ」指定しているのだから、CLIP STUDIO PAINT以外のものは画面共有されないはず、と思うかもしれません。


しかし、実際には、以下「ウィンドウの切り替え画面」の緑色斜線部分も画面共有で見えてしまうのです

メール、ブラウザ、その他テキストなどに本名住所が書いてあったり、一時的にクレジットカード番号が映っていたり、その他見られたくないもの(/ω\)が映っていたりすると、それらすべてライブ視聴者に見られてしまいます。


回避策

画面のキャプチャにOBSを利用する

OBSは有名な画面キャプチャ・配信ソフトです。
OBSはDiscordと連携することができ、PC上の画面をキャプチャする部分をOBSにまかせることができます。
キャプチャをOBSにまかせると、↑で言った「ウィンドウの切り替え画面」が配信に映りこむことはないようです。

OBSとDiscordの連携は以下のURLを参考にしてください。
DiscordでOBSを連携させ画面共有する方法!音が出ない時の対処法も! | しふぁチャンネルのゲーム実況ブログ

配信用アカウントで画面共有を行う

映りこんでも大丈夫なものだけで構成した配信用のアカウントを作成しておき、画面共有をするときはこのアカウントでログオンしなおすという方法が考えられます。…が、めんどうですね。

仮想デスクトップを使う

Windows 10の場合は標準でついている機能ですが、作業するデスクトップを複数に分けられる機能です。
タスクバーのスタートボタンの近くに、以下の赤枠の部分のようなボタンがあると思います。

このボタンをクリックしてから、新しいデスクトップを作成し、そちらで配信で行うという方法が考えられます。
アカウント切り替えよりは面倒ではないですね!

画面共有するアプリを最大化すると、この現象は発生しない…かも?

環境によっては共有しているアプリ(ウィンドウ)を最大化すると現象が発生しなくなるようです。
自分の場合は最大化しても本現象が発生してしまいましたので、確実な回避策ではないようです。


これってバグ(不具合)では?

本件をDiscord公式に問い合わせてみたところ

この動作はすべて意図したものであり、不具合ではない

とのことで、バグではなく仕様とのことでした。


その他Discordの怪しい挙動

画面共有しているアプリを素早く移動させると、なんとその背面にある別のアプリの画面が一瞬見えてしまいます


Apache Tomcatでサーバーが「問題が発生しました」「起動に失敗しました」のエラーメッセージだけを表示して起動できないときの対処法 (Eclipse)

Java/サーブレット/jsp初心者でかなり詰まったときです。
事あるごとにEclipseで↓こいつが表示されたサーバーが起動できなくなるのです。なんでだろうなぁと思っていましたが・・・。

原因はweb.xmlでした。Eclipseサーブレットを追加すると、自動的にweb.xmlに色々と追加されてしまっていて、そいつが悪さをしているようなのでした。
自分はアノテーションを使ってServletのURLを決定しているので、web.xmlには記載が不要だと思うのですが、web.xmlを見ると以下のように色々と記載が追加されていて、それが原因でサーバーの起動に失敗しているようでした。

  <servlet>
    <description></description>
    <display-name>Main</display-name>
    <servlet-name>Main</servlet-name>
    <servlet-class>servlet.Main</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Main</servlet-name>
    <url-pattern>/Main</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>Logout</display-name>
    <servlet-name>Logout</servlet-name>
    <servlet-class>servlet.Logout</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Logout</servlet-name>
    <url-pattern>/Logout</url-pattern>
  </servlet-mapping>

上記をすべて消して、サーバーを起動したら無事正常に起動することができました。

Githubでアクセストークンを使ってリポジトリをやりとりする方法

個人的な備忘録です。

Githubでアクセストークンを作成する

Githubにログインして、右上のアイコンからSettingsを選ぶ

メニューからDeveloper settingsを選ぶ

Personal access tokensを選ぶ

Generate new tokenを選ぶ

Note, Explarationは好きな値を入力する。
リポジトリとやりとりをするため、repo権限にチェックを入れる

Generate tokenを選択する

赤枠の部分にトークンが生成されるのでコピーして使う。
一度このページから離れると、トークンは表示されなくなるので注意


TortoiseGitで前のトークンが有効になって新しいトークンが入力できない場合

Windowsの資格マネージャーから「git:*」のエントリを削除したあと、TortoiseGitからCloneなどを選択すると、トークンを入力する画面が表示されるので、↑でコピーしたトークンをペーストして使用する

GitのリポジトリURLの取得方法

取得したいリポジトリのページにアクセスして、Codeのプルダウン→HTTPSの項目からURLを取得できる

プライバシーポリシー お問い合わせ