「GitHub Copilot」で効率的なコーディング

「GitHub Copilot」とは、コーディング中にAIがコード例を提示してくれる、今後のソフトウェア開発を大きく変える革新的なツールです。
弊社でも最近このツールを使用しております。
VisualStudio標準のAI補完機能「InteliCode」よりも柔軟にコード例を提示してくれます。

自分が書いたコードを学習し、適切なコード例を提案してくれます。
開発者は、Copilotが提供するコード例を参考にしながら、より迅速かつ正確なコードを作成することができます。
これにより、開発の生産性が向上し、バグのリスクを低減することができます。

Copilotはまだ新しいツールであり、正しくないコードを提案することもあります。
しかし、Copilotの精度は徐々に向上していくことが期待できますので、今後が楽しみです。

IT技術の勉強

こんにちは mtjです。

IT業界は昔から常に勉強と言われている業界です。
どんどん新しいサービス、デバイス、技術等が生まれ消えていっています。

数十年前はクラウドでクラウドと盛り上がり
その数年後にはディープラーニングで盛り上がり。
現在ではChatGPTでしょうか

盛り上がった物だけで考えてもかなり移り変わっていると思います
デバイスで考えても小型化、高速化も顕著です

そういった技術についていき活用する、勉強することで自分の価値というものが上がっていくと思います。
会社で使っていないから勉強しない、覚えないでなくなんでも吸収していく事をこういう業界だからこそ心掛けたいと思います。

オープンソースのライセンス

先日、とある案件でライセンスを表記せずに使っているオープンソースがたくさんある、
という問題が発生し、対応を依頼されました。

ライセンスにもさまざまな種類があり、
利用する際にソースコードの開示が必要なもの、著作権を表示するだけでよいものなどがあります。

もしライセンスに違反してしまうと、製品の配布停止や損害賠償などにつながる恐れがあります。
実際にライセンス違反で訴訟される事例もあります。

株式会社オージス総研 岩佐 朗子
「OSSライセンス違反とその対策」(2023年6月12日アクセス)
https://www.ogis-ri.co.jp/otc/hiroba/technical/oss-license-violations/

オープンソースを利用するときはライセンスが何かをきちんと確認して、
ライセンス違反しないように利用条件を守ったうえで利用していきたいものです。

商用利用については、GPLなどソースコードの開示の必要がある場合は
自社の独自技術の流出のリスクがあるために製品としての配布が難しいので、
ApacheやMITなど、ソースコードの開示の必要がないものを
使用した方が無難と思われます。

おすすめのアミノ酸

皆さん、日々元気にお過ごしでしょうか。

自分は平日毎日働くだけで疲れがちだったのですが、
最近ネットで味の素のアミノバイタルなるアミノ酸を飲むと良いと見かけたので、
試しに買ってみて就寝2,3時間前に毎日飲んでいます。
まだ2週間程度ですが既に効果を実感しており、
疲労が溜まりにくく元気に過ごせております。
アミノ酸量の異なる2種(アミノバイタル プロ3800mg/アクティブファイン2200mg)を試してみているのですが、
量の多い方がより効果を感じています。

本来は運動や筋トレをしている人が踏ん張る力や疲労回復を目的に運動前や運動後に飲むことが多いようなのですが、
デスクワーカーでも効果があるみたいです。
もしプラシーボ効果だったとしても日々を元気に過ごせるなら儲けものですね!

以上、おすすめ商品紹介でした。

アプリから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をソフト開発に応用するための研究を進めております。今後も最新の情報をお届けしていきます。

アミューズメント系のコントローラー

こんにちは mtj です。

アミューズメント系で長らく進化していないものとして コントローラーがあると思います。
特に家庭用の物はファミコンぐらいから同じようにボタンと十字キーではないでしょうか

色々機能がついたりはしていますが何十年経っても基本は同じかと思います。
キーボードで遊んだり コントローラーで遊んだりと行き来はよくしますが
やはりコントローラーのほうが直感で動かしやすいですね よくできていると思います。

次世代のコントローラーが何になるのかは楽しみです。
VR機器ではハンドジェスチャーでの操作が 追加機器なしでできたりします
それも新しいかと言われればそうでもなく XBOXのKinectあたりからある物です。

よく言われるのが脳波のコントローラーですが そこまでくるとアミューズメント系のシステム自体、設備が大きく変化しているような気がしますね