アプリからWindows共有フォルダを作成する方法

先日、ある案件でアプリからWindows共有を作成する必要がありました。

調査しました結果、コマンドラインで以下の2つを実行すれば良いことがわかりました。


net share <共有名>=<共有するフォルダのフルパス> /grant:everyone,full
icacls <共有するフォルダのフルパス> /grant everyone:(OI)(CI)F

C#の場合、これをProcessクラスを使用して実行すれば良いだけです。
案外簡単に出来てしまいます。

ただし、管理者権限が必要なので、それだけ注意です。

AI学習、使用のモラル。

こんにちは mtj です。

最近ではAI生成等が色々な分野で流行っていますね
しかし誰でも扱えるようになった反面 学習データ、生成等に関してはモラルが求められている状態になっています。

他人の絵を勝手に学習して生成し その生成物でお金を取ったり
声であれば 声を学習し歌を歌わせたり
gitのCopilotも 著作権の保護されたコードを出力する等もありました。

絵でもなんでも自分が努力して描いた、作成したものがAIで物の数分でコピーされて金儲けに利用されるなら元の作成者も面白くないでしょう
そうなると作成者がどんどん撤退し 最後には昔のデータを学習したAIが一生古い物を学習して作り続ける袋小路になってしまう気がします

おそらくそのような状態になった事に気づくのが一番遅いのはモラルのないAI使用者になるでしょう。

メモに書いた内容を忘れてしまうのを防ぐには?

私はパソコン上でメモをとり、そのメモをテキストファイルで残しておくことが多いのですが、どのファイルにどの内容のメモを残しておいたか忘れることがよくあります。
下の画像は研修の一環で行っている社内用アプリの開発に関するメモが入ったフォルダです。

その日に何を行ったかでメモが分割されており、ファイル名は作業を行った日付となっています。
メモのファイル名を「日付」にして、その日に何を行ったかをそのメモに書くという癖が染みついてしまっているのですが、この分割方法では自分が参照したい内容を探すのに時間がかかって意味がないと感じました。
「何の内容に関するメモか」をメモのファイル名とし、その内容に関することはすべてそのメモにまとめておいた方が良いと思いました。

コンテンツ自動生成プログラム

GWに趣味で、パターン画像を再帰的に描画するプログラムをC#とOpenCVで実装しました。
フラクタル図形描画プログラムのようなものです。
遠出している最中に処理を考え、その日の内に処理の流れだけ実装し、別日に本実装をしたのですが、
すんなり動くものが実装できて良かったです。
素直に書いたら5重ループになったので、計算量削減には若干手間がかかりました。
人力でも作成可能な画像ではあるのですが、
気が遠くなるような時間がかかるところをPC性能や再帰回数次第ですが数分で描画できます。
自分の代わりに何かコンテンツを自動生成してくれるプログラムは、万能感を感じることができるので好きです。

最近はお絵描きAIがどちらかと言えば悪い意味で話題になっていて、
データを学習しない自動生成プログラムまで叩かれるのではないかと少し不安になりますね。
データを学習するしないに関わらず、法的・倫理的に他者の権利を侵害しない範囲で、
自動生成技術が進歩して行くと良いなと思います。

ChatGPTを使用して自作ソースコードの説明やサンプルコードを作成

今回は、ChatGPTをソフト開発に活用できないかと考えてみました。
例えば、ソースコード一式を与えて、クラスやメソッドの使い方のサンプルを作成してもらうことはできないでしょうか。
また、単体テストも自動作成してもらうことはできないでしょうか。

ChatGPTに以下の質問をしてみました。


以下のC#コードについて、簡単な説明と、サンプルコードを作成してください。

public static Color Blend(this Color color, Color blendColor, double ratio) {
    if (ratio.IsBetween(0.0, 1.0).Not()) throw new FormatException();
    int a, r, g, b;
    a = color.A + ((blendColor.A - color.A).ToDbl() * ratio).ToInt();
    r = color.R + ((blendColor.R - color.R).ToDbl() * ratio).ToInt();
    g = color.G + ((blendColor.G - color.G).ToDbl() * ratio).ToInt();
    b = color.B + ((blendColor.B - color.B).ToDbl() * ratio).ToInt();

    return Color.FromArgb(a, r, g, b);
}

これに対して、以下の回答になりました。


・拡張メソッドとは、既存のクラスに新しいメソッドを追加する機能です。この場合、ColorクラスにBlendメソッドを追加しています。
・Blendメソッドは、引数として、混ぜる色(blendColor)と混ぜる比率(ratio)を受け取ります。
・ratioは0.0から1.0の範囲でなければなりません。そうでない場合は、FormatExceptionをスローします。
・混ぜる色と元の色の各成分(A, R, G, B)について、比率に応じた加重平均を計算します。例えば、R成分の場合は、color.R + ((blendColor.R - color.R).ToDbl() * ratio).ToInt()となります。
・計算した各成分の値を使って、新しいColorオブジェクトを作成して返します。

static void Main(string[] args)
{
    // 色を作成する
    Color red = Color.FromArgb(255, 0, 0);
    Color green = Color.FromArgb(0, 255, 0);
    Color blue = Color.FromArgb(0, 0, 255);

    // 色を混ぜる
    Color purple = red.Blend(blue, 0.5); // 紫色
    Color yellow = red.Blend(green, 0.5); // 黄色
    Color cyan = green.Blend(blue, 0.5); // シアン色

    // 色を表示する
    Console.WriteLine("Red: {0}", red);
    Console.WriteLine("Green: {0}", green);
    Console.WriteLine("Blue: {0}", blue);
    Console.WriteLine("Purple: {0}", purple);
    Console.WriteLine("Yellow: {0}", yellow);
    Console.WriteLine("Cyan: {0}", cyan);
}

完全にメソッドの内容を理解して説明とサンプルコードを作成しています。すばらしいです。
今回はとても単純なメソッドで試しましたので簡単でしたが、実際の業務のコードはこんなに単純ではないのでこんなにうまくは行きません。
しかし、これらのことが実現できれば、開発工数の削減につながりますし、品質も向上する可能性があります。

ChatGPTはまだ研究段階の技術であり、実際にソフト開発に適用するにはさまざまな課題があります。
例えば、ソースコードの構造や文法を正しく理解できるか、サンプルやテストが正確かつ有用か、セキュリティや著作権の問題はないかなどです。
これらの問題を解決するためには、ChatGPTの性能や限界を詳しく調査する必要があります。

弊社では、ChatGPTをソフト開発に応用するための研究を進めております。今後も最新の情報をお届けしていきます。