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では使えません。

後、有料です。