サイト管理人のブログです。
ブログ
ブログ一覧
Raspberry Piで固定IPアドレスを設定し、PCと1対1で接続する際のトラブルシューティング
Raspberry Piを使用して固定IPアドレスを設定し、PCと1対1で直接接続した際に、
pingが通らない問題に直面しました。ここでは、そのトラブルシューティングの
過程と解決方法について解説します。
問題の概要
Raspberry PiをPCとストレートケーブルで接続し、固定IPアドレスを設定したにもかかわらず、
pingが通らないという問題が発生しました。IPアドレスの設定自体は正しいものでしたが、
通信が確立できませんでした。
解決策
いくつかの設定変更を試みた結果、以下の設定変更によりpingが通るようになりました:
Automatically configure empty optionsのチェックを外す この設定を無効にすることで、
ネットワーク設定が手動で管理されるようになり、不必要な自動設定が適用されるのを防ぎました。
Disable IPv6にチェックを入れる IPv6を無効にすることで、IPv4のみでの通信が確実に
行われるようになりました。これにより、IPv6とIPv4の競合が原因で発生していた
可能性のある問題を回避しました。
設定手順
具体的には、以下の手順を実行しました:
Raspberry Piのネットワーク設定を開く
「Automatically configure empty options」のチェックを外す
「Disable IPv6」にチェックを入れる
これらの設定変更を行った後、再度pingを試みたところ、正常に通信が確立されました。
まとめ
Raspberry PiとPCを固定IPアドレスで1対1で接続する際、特定のネットワーク設定が
問題の原因となることがあります。今回のケースでは、「Automatically configure empty options」
と「Disable IPv6」の設定変更が問題解決の鍵となりました。同様の問題に直面した場合、
これらの設定を見直すことで解決できるかもしれません。
C# 引数をメソッド内でnewする問題。
C#でクラスのオブジェクトをメソッドに渡す際の注意点
C#で開発をしていると、メソッドにクラスのオブジェクトを渡した場合、
そのオブジェクトをnewすると、参照渡しであるにもかかわらず、親の
オブジェクトに値が伝わらない問題に直面することがあります。
このブログでは、その原因と解決策について解説します。
問題の背景
クラスのオブジェクトをメソッドに渡す際、C#では参照渡しが行われます。
通常、参照渡しではオブジェクトそのものではなく、そのオブジェクトへの
参照が渡されるため、メソッド内でオブジェクトの内容を変更すると、呼び出し元にも
変更が反映されます。
しかし、メソッド内でオブジェクトをnewしてしまうと、元の参照が
新しいオブジェクトを指すようになるため、呼び出し元のオブジェクトには
変更が伝わりません。
コード例
このコードでは、ModifyObjectメソッド内でオブジェクトobjに新しいインスタンスを
割り当てています。
その結果、元のmyObjのValueプロパティには変更が反映されません。
public class MyClass
{
public int Value;
}
public void ModifyObject(MyClass obj)
{
obj = new MyClass();
obj.Value = 10;
}
public void Main()
{
MyClass myObj = new MyClass();
myObj.Value = 5;
ModifyObject(myObj);
// myObj.Valueは5のまま
Console.WriteLine(myObj.Value); // 出力: 5
}
解決策
この問題を回避するためには、メソッド内で新しいインスタンスを
作成するのではなく、渡されたオブジェクトのプロパティを直接変更するようにします。
このように修正することで、呼び出し元のオブジェクトに変更が反映されます。
public void ModifyObject(MyClass obj)
{
obj.Value = 10;
}
また、refをつけることにより、この問題を解決することができます。
public class MyClass
{
public int Value;
}
public void ModifyObject(ref MyClass obj)
{
obj = new MyClass();
obj.Value = 10;
}
public void Main()
{
MyClass myObj = new MyClass();
myObj.Value = 5;
ModifyObject(ref myObj);
// myObj.Valueは10
Console.WriteLine(myObj.Value); // 出力: 10
}
まとめ
C#でクラスのオブジェクトをメソッドに渡す際には、新しいインスタンスを
作成するのではなく、渡されたオブジェクトのプロパティを変更することが重要です。
これにより、呼び出し元のオブジェクトに正しく変更が反映されます。
これができない場合はrefをつければ、親に渡すことができます。
C++Builder
一つ前のバージョンまでは、C++BuilderでAndroidとかIOSのアプリがつくれたんだけと、12では、Windows専用になったみたい。次のバージョンではAndroidとかIOSをサポートするのかな?
github copilot
visual studio2022とかvscodeでgithub copilotが使えますが、かなり便利ですね。
完全なプログラムを作成してくれるわけではありませんが、参考になります。
残念ながらvisual studio 2019では使えません。
後、有料です。
.net mauiのyoutube
.net mauiを勉強しようとすると、ほとんど英語のサイトになるんだけど、
やっぱり日本語で勉強したいですよね。
で、深いところまではないけど、今後に期待したいyoutubeのチャンネルができましたね。
https://www.youtube.com/channel/UCNLJdO3P50m7RnICEtL4AiQ
今後が楽しみです。