ルービックキューブを作りたくなったお話(続き)

前回記事のとおり年末にルービックキューブを作った

前回記事にてどうにか平面図のルービックキューブを完成させた私は、またも無謀なチャレンジを始める(笑)

 

それは立体図で出来ないか・・・というチャレンジである

 

やるなら図形?画像?それとも・・・

と考えた結果、SVGにチャレンジすることに

 

とりあえず1マス作ってみた

こんな感じですかね

で、ですね、色指定はfillを指定してあげるんですけど、ここで問題発生です

コレクションに保持しているColorをLookupしてもエラーです

これ色々試してみましたが、どうにも上手くいきません
Textで囲ったり、ColorValueで囲ったり・・・

ということで当初のコレクションにFillを文字列で持たせることにしました(笑)

さて参照してくれますかね

お、大丈夫そうですね

出来ることはわかった、さてコードの書き換えを・・・

ここでやらなきゃいけないのはColorとして指定していたすべてのコードをFillに置換することと、コレクションを別名にしたい(別にしなくてもいいが)ということです。

これ何気に置換でやるとけっこうな労力だよなあ・・・と思ったので、ここは生成AIの出番です(笑)

 

最近お気に入りのGoogle AI Studioでやってみます

さて、結果は

いやー素晴らしい、これでコード修正もらくちんですね(笑)

さて、出来栄えは?

まあ、こんな感じでしょうかね

年末年始の大人の工作には十分ではないでしょうか

SVGの勉強にもなりましたし(ホントか?)

年末にルービックキューブを作りたくなったお話

ルービックキューブとは?

ルービックキューブは、ハンガリーの彫刻家であり建築学の教授であったエルノー・ルービックによって1974年に考案された、6つの面を持つ立方体のパズルです。各面は9つの小さな正方形(キュービクル)に分割され、それぞれ異なる色が塗られています(通常は白、赤、青、オレンジ、緑、黄)。

 

私が小学生のころ

日本におけるルービックキューブのブームは、1980年に株式会社ツクダオリジナルが「ルービックキューブ」として販売を開始したことから始まりました。

発売当初から大きな話題となり、老若男女問わず多くの人々がルービックキューブに熱中しました。街中や学校、職場など、至る所でルービックキューブを回している人々の姿が見られました。

爆発的な販売数: その人気は凄まじく、1980年から1981年にかけて、日本国内で推定400万個以上が販売されたと言われています。これは当時の人口から考えると驚異的な数字です。

攻略法の登場: 当初は誰も解き方が分からず、試行錯誤する人が多かったのですが、攻略本や攻略記事が雑誌などに掲載されるようになると、それらを参考に解法を学ぶ人が増えました。

 

当時はルービックキューブの本物と偽物みたいな議論があったように思います。それだけ人気があった証なんだと思いますね。

 

ことの始まり?

ことの始まりはこの記事を見たことに始まります。

qiita.com

一目見ただけで創作意欲をそそられる内容!!

早速得意?の写経を開始・・・がしかし!

うーん、全部は書いてないなあ・・・
しゃーない自分で考えるか・・・と思い立ったのが水曜夜

 

違う実装をまずは考えてみた・・・

この実装何気にいろいろ考えましたね

ギャラリー使うべきか否か・・・

一意のインデックスをつけるべきか否か・・・

迷いに迷い、まずはGoogle AI Studioを使ってみることにしました。

aistudio.google.com
このStudioではGemini2.0 Flash Thinkingが無料で使えます!!

いわゆる推論モデルになります。
GPTですとo1と同等レベルということかと思います。

 

ということで最初の思想設計は

こんな設計で挑みました・・・

一意のインデックスはありません、画面のコレクションを作って色だけ変えるという発想です。正直、このときはこれでイケると思っていました・・・

 

途中までは上手くいった、がしかし

途中までは上手くいきました、証拠がこれです(笑)

上面と下面を動かす動きは簡単に実装できました。

がしかし・・・

右面や左面を動かす動き、いわゆる縦の動きで頓挫・・・・

やっぱ配列苦手なんだなあ・・・と思った次第です

この思考で木曜日を費やす・・・

たぶんですが、やろうと思えばやれると思いますが、思考能力の限界を感じたのでこの案はボツに

 

私なりの結論(というほどでもないが)

所詮私は市民開発者、小難しい実装やロジック考えても仕方ないので、めっちゃ単純化することにしました。(ホントに単純です)
それぞれの面は正方形の集合体です、何かが動くということはそれに応じた色が変わるということです。

この概念、いうなれば「塗り絵」です。

ということでギャラリーすら使わずに正方形を配置(笑)

で色の指定をするという方式にしてみました。

いやお前、気は確かか・・・こんなベタに色指定して(笑)

ええ、大丈夫なんです

で、動かすボタンには


こんな感じで
回転前の状態を一時保存して
面があれば面を回転させて(中段は面の回転がない)
隣接する面の更新をそれぞれUpdateIfでベタに行うということになります。
 
ちなみにボタンは18通り作る必要があります。
何気に背面の更新が面倒だったりします
未だに合ってるかどうかよくわかっていません(笑)

とにもかくにも

まずは出来たということにしておきましょう
これ、遊ぶのかな(笑)・・・

思ったこと

自分だけではどんな設計思想にするか考えあぐねていたところにGemini2.0 Flash Thinkingの破壊力はすごかったですね~

2024年は生成AIが多くの人類を超えた年だと思います。

来年はAIエージェント元年になるんでしょうかね

生成AIを味方につけることは、自分よりも頭の良い相棒が身近にいることと同義です。

来年も生成AIの進化から目が離せませんね。

 

 

AI Builder使ってあれこれやってみた​

Power Apps Advent Calendar 2024シリーズ1 12月22日分の記事です

2024年、それは​

私が思うに2024年は生成AIが人類の能力を超えた年だと思います。​

この1年で生成AIで出来ることの幅が広がったことと、精度が上がりました。​

​

本日はAI Builderを通じてですが、その一端をお話させていただきます。​

 

2022年11月    Chat-GPT(3.5)登場​

2023年3月    GPT-4​

2023年9月    GPT-4v             音声入力・画像入力が可能に​

2024年5月    GPT-4o             音声認識・画像認識の速度が向上​

2024年9月    OpenAI o1        複雑な推論が可能に​

 

他社もGeminiやClaude他で抜きつ抜かれつのデッドヒートを繰り広げている

AI Builderって何?​

AIの機能を非常にお手軽にPower AppsやPowerAutomateに組み込むことが可能である​

​

利用にはライセンスとクレジットが必要​

​少々お金はかかるが破壊力は絶大​

​何より構築スピードがヤバい​

 

learn.microsoft.com

 

​7月3日、私に衝撃が?

7月3日に私はとあるコミュニティに参加します(おうじゃさんといっしょ)​

 

そこですごいものを目撃します​

それはAI Builderです​

というかカスタムプロンプトというべきでしょうか​

とにかくその衝撃を忘れることは出来ません​

​

がしかし、この日、私は寝落ちしてちゃんと内容を理解していません(笑)​

 

7月10日、再度そのコミュニティに参加します​

どうしてもやってみたくなった私は教えを乞います​

ライセンスが足りてなかったのでその場で課金(笑)​

PowerAutomateプレミアムライセンスを購入します​

​

いや、でも、そのくらいやってみたい内容なんです​

 

やりたかったことは構造化​

 

今回の肝はコレです!!
プロンプト設定の出力
そこにJSONを指定できます
さらに編集からJSON形式を編集可能です
9月時点ではプレビューでしたが、先般GAされました。

 

前述のように
7月3日にAI Builderのカスタムプロンプト(JSON出力)に出会い
7月10日にPowerAutomatePremiumを課金

そんな私にさらなる衝撃が走ったのが7月17日!!

まあなんと素敵なUdemyのコースをギークフジワラさんが出しました

 

www.udemy.com

このコース私にとっては

まずはモデル駆動型アプリを初めて本格的に触ることに
モデル駆動型の基本から何が出来るのかが網羅されていた

AI Builderの使い方も実に様々なパターンが用意されていた

9時間越えのコースであったが、そこは必死に見た(笑)

私の特技は写経(笑)

ということでまずは完コピ開始!!

がしかし、半ばに差し掛かったところで、いつもの悪いクセが・・・

 

さて、何が出来た?

1.百名山登山計画アプリ

講座内のトレーニング計画アプリを模して作成
私は登山が趣味なので、これはなかなか面白かった
カスタムプロンプトには出発地を入れている

プロンプトはこんな感じで

さらに改良するなら以下の案もありますかね?

出発地を可変にする(今回は北海道札幌市固定)
本来の登山計画書に転記可能な出力をしてみる⇒ここにJSON出力使えそう!!

 

2.旅行計画アプリ

ちなみに行先は複数指定することが出来ます

プロンプトはこんな感じで

さらに改良するなら以下の案もありますかね?

出発地を可変にする(今回は固定)

交通手段の案を複数出力する

これも出力結果のJSON化は面白そう

 

3.カード明細読み取り

TextRecognizerで読み取った内容をカスタムプロンプトでJSON化
それをギャラリー表示させて、手入力を大幅削減させるイメージ

 

プロンプトはこんな感じで

これがこの夏、夢中になったJSON出力
無指定だとマークダウン形式になるのでこう記述

これ手入力の残っている職場だと効率化にめっちゃなります

 

この動作、PowerAutomateのみでも可能です

トリガーは手動でもいいですし
アイテムが作成または変更されたときでもOK

あとはファイル取得して
ファイルコンテンツ取得して

テキスト読み取って

カスタムプロンプトでテキスト作成して(JSON)

必要な項目をリストに作成する

 

ちなみに夢のようなイベントもやりました

www.youtube.com

ビリビリにギークさんをお招きして

私のアプリを披露するという暴挙(笑)

夢のような時間をすごさせていただきました

 

みなさんの職場にはこんな仕事ありませんか?

ということでこんなアプリを作ってみました

仕掛けはいたって簡単

読み取りと構造化が一撃で出来ます


今回、こんなシーンに実装予定です

ご利用は計画的に・・・

AI Builderの利用にはライセンスとクレジットが必要です

learn.microsoft.com

私の個人テナントですと
Power Apps Premium で    500
Power Automate Premium で5000
の5500クレジットがあります

職場で2回、個人で1回やらかしました(笑)

 

計画的な利用をするために

個人の消費クレジットはPowerAutomateのAI Builderの活動から見ることができます

 

さて、今日は12月22日ですね

悲願の打倒!!有馬記念!!

それがなんと、なんと!!

進化した!!

4.競馬妄想文作成アプリ!!

やってみて

AI Builder、めちゃめちゃ簡単です!!
APIとかよくわからない人には超オススメです
ですが、ご利用は計画的に(笑)
でもライセンス購入する値は十二分にあります
特に紙やFAXがまだ残っている職場ならなおさらです

明日、私の悲願が叶うとさらに最高です!!

 

有馬記念の予想

ベラジオオペラ

スターズオンアース

ローシャムパーク

の3頭ということですね

さてはてどうなることやら

 

www.docswell.com

DreamProWrestlingⅡへの道~その4~

Power Apps Advent Calendar 2024シリーズ2 12月15日分の記事です

前回で対戦結果までは返ってきています、さて

ただ単に対戦結果だけ返しても面白くないですね

ここはText to Speechの出番です(笑)

対戦結果をフローで渡してあげます

Set(audio,texttospeechforAI.Run(varresult.reply))

対戦結果のvarresult.replyをフローに渡して変数audioに格納です

HTTPリクエストでcognitiveserviceを叩いています

リファレンスはこちら

learn.microsoft.com

 

結果を作成アクションに格納して、アプリに返却します

作成:@{body('HTTP')?['$content']}

 

でアプリにはaudioコントロールを置いて

この返却された音声を入れます

- Audio2:
    Control: Audio
    Properties:
      OnEnd: =Set(varAudio,false)
      Media: ="data:audio/mpeg;base64," & audio.speech
      Reset: =
      Start: =varAudio
      Fill: =RGBA(0, 0, 0, 1)
      Height: =45
      ShowControls: =false
      Width: =238
      X: =284
      Y: =723

 

audioコントロールのstartプロパティは変数で開始します。

OnEndプロパティでは変数をfalseにします。

 

さてはて勝敗判定どうしましょうか

ここでですね、AI-Builderの出番です!!

どうするかというと対戦結果のvarresultをもう一度AIに投げて、勝者と敗者を判定してもらいます。かつそれをJSONで!!

ではAI-Builderのカスタムプロンプト作りますね

いや~こんなに簡単なんですよ(笑)

マジで笑っちゃいますよこれは

次にアプリ側に実装します、これも簡単

ボタンのOnSelectに

Set(varwinlose,DreamProWrestling2Win判定.Predict(varresult.reply))

たったこれだけで勝者敗者のJSONがvarwinloseに格納されます

 

さてはて、勝者敗者はわかりました

では赤コーナー、青コーナーそれぞれvarwinloseと比較しなければいけません

赤コーナー、青コーナーのレスラー名はこんな風になっています

Split(Gallery3.Selected.red," ")

一度Concatでつないだレスラー名をもう一度Splitしています

これによりタッグマッチや6人タッグマッチにも対応させています

 

ではそれを判定するには?

If(
    CountRows(
        Filter(
            Table(ParseJSON(varwinlose.Text).winner),
            Value in Split(
                Gallery3.Selected.red,
                " "
            )
        )
    ) > 0,
    "WINNER",
    "LOSER"
)
 

こんな感じで判定しています

今回チャレンジした機能、それは

今回のコンセプトは「興行」です。

「興行」には複数試合があります、それを結果ごと格納しておきたい。

それを実装するためにSharePointリストの複数行テキスト列へのJSON格納を試みました。

かつそれをParseJSONして表示するも当然のことながら実装です。

まずは格納から

これはなんのことはないコレクションをJSON関数使ってるだけです。

Patch(
    DreamProWrestling2_Result,
    Defaults(DreamProWrestling2_Result),
    {
        Title:Text(Gallery3.Selected.date&" "&Gallery3.Selected.arena),
        Result: JSON(
            colcard,
            JSONFormat.Compact
        )
    }
);
Notify("試合結果を保存しました。",NotificationType.Success);

 

こうするとリストにはこんなふうに格納されています

ではParseJSONしてみましょう

こんなふうに型指定しつつやります
ClearCollect(
    colresult,
    ForAll(
        Table(
            ParseJSON(
                LookUp(
                    DreamProWrestling2_Result,
                    ID = ThisItem.ID,
                    Result
                )
            )
        )As R,
        {
            no: Value(R.Value.no),
            date:Text(R.Value.Date),
            arena:Text(R.Value.arena),
            red: Text(R.Value.red),
            redresult:Text(R.Value.redresult),
            blue: Text(R.Value.blue),
            blueresult:Text(R.Value.blueresult),
            detail:Text(R.Value.detail)
        }
    )
);

 

なんですが、これだけじゃ面白くないですね

youseibubu.com

ハイ、わが盟友、ヨウセイさんの記事です

私の腕はヨウセイさんには遠く及びませんが、ありがたくパクります

まずはFomulasに

JSONDef := Type([

    {

        arena: Text,

        blue: Text,

        blueresult: Text,

        date: Text,

        detail: Text,

        no: Number,

        red: Text,

        redresult: Text,

        time: Text,

        type: Text

    }

]);

 

いよいよ次です

Select(Parent);
ClearCollect(
    colresult,
    ParseJSON(
        LookUp(
            DreamProWrestling2_Result,
            ID = ThisItem.ID,
            Result
        ),
        JSONDef
    )
);
Set(
    varresultvis,
    true
)
 
 

 

実装できたようですね

 

これにて細かな機能はほぼ実装完了です。

前作よりもはるかに短い時間で作れたことは、自分の成長を感じました。

 

またやったことのない機能にもチャレンジし、学習にもなりました。

 

せっかくなので、来月あたりビリビリでイベントでもやりましょうかね

奇想天外ビリビリ☆Power Apps同好会 - connpass

 

当初の目的は果たしたのか?

1.画面は増やし過ぎない(笑)

前作38画面(笑)⇒今回8画面!!

 

2.関数、特にコレクションを意識して使う

これも意外と綺麗にまとめたほうかと・・・

3.前作にはない機能を盛り込む

SVG使ってみたり

試合入替機能つけてみたり

6人タッグマッチも実現したり

試合結果をJSOnで格納して、また表示させたり

勝敗判定にAI Builder使ってみたり

色々やりましたね、これも

 

4.たぶんCopilotは全力で使うに違いない

いやあ、使った使った、あと一押しに威力を発揮しましたね!!

ホントにCopilot様様です

 

ついでにMobile版も思わず作成

これでどこでも遊べる(笑)

この作成ではYAMLコピーが威力発揮しましたね!!

 

一番変わったこと!

前作作成するのに45日費やしたのが、実日数5日で作れました!!

少しは成長しましたかね、私も・・・

コミュニティって​ 素晴らしい!​~アラフィフ素人オジサンがMicrosoft MVPになれたお話​~

Power Apps Advent Calendar 2024シリーズ1 12月15日分の記事です

2024年11月1日、なんと私は

この日、私の元に一通のメールが届きました、MicrosoftMVPなんちゃらと書いてあります。正直、何かの間違いかと思いました。

まさか、まさか、こんな素人オジサンがMVPになれるだなんて・・・

ちなみにMicrosoftMVPとは?

ja.wikipedia.org

ということで今回はポエムです(笑)

これまでの歩みを一度振り返ってみることにします。

また、たくさんの方々にお世話になっているので、その感謝の意もこめて色々な方が登場します。

 

2020年時点で、私はただの素人だった(今も素人)

昨年の記事で2020年から2023年秋くらいまでのことは記事化させていただきました。

ただの素人オジサンがPower Appsにハマっていく様を描いています。

また、その中で何人もの方々に助けられていくのです。

この記事では素人オジサンがプロレスゲームまで作っちゃうあたりを書いています。

powerdaaps.hatenablog.com

 

今回はその続編という位置づけです。

新しいものにいつもワクワク​

2023年9月下旬、ここで私はノーコードツールClickなるものに出会います​

click.dev

正直驚きました、それまでアプリ作成の関数に四苦八苦していたのに​

ノーコードツールなるものは一文字も関数を書かせてくれません!​

興奮した私は、このツールを知ったその夜に「おうじゃさんといっしょ」で話​

果ては同社CTO(最高技術責任者)を「おうじゃさんといっしょ」に呼ぶという暴挙に出ます​

​

なんですが、話してみてわかったのは、何でも知っている人など世の中には存在しないのだなということ、お互いに非常にいい学びになったと思います​

​

実際、私はこのあと同窓会の事務局をやることになり​

受付・広告申込アプリをClickで作ることとなります(超簡単ですよ)​

 

ついに夢の「気ままに勉強会」LT登壇​

2023年10月、なんと「気ままに勉強会」にLT登壇です!!​

いやだって、2月までは何にも知らなかった初学者ですよ(笑)​

しかもネタはついこの間覚えたノーコードツールとPowerAutomateの連携​

https://kimamani.connpass.com/event/299425/​

​

登壇の経緯は「おうじゃさんといっしょ」でたなさんに誘われたからだった気がします​

こんなオジサンにお声掛けいただいたことに感謝です​

 

自分の場所が欲しくなってくる(笑)​

2023年11月、このころからまたおかしなゲーム?アプリ?の作成に勤しみ始めます​

それをどこかで発表したい!!​

なんですが、この発表には条件がありました(笑)​

どうしても12月23日土曜日でなければならなかったのです​

実は色々模索しました​

コルネさんにJPPGB出来ませんかね・・・とか​

おうじゃさんにこの日やれませんかね・・・とか​

さすがに気ままでやるネタではないよな・・・とか​

​

そこで誕生したのが「奇想天外ビリビリ☆Power Apps同好会」なのです​

ポイントはビリビリと同好会ですかね、ハイ、あくまで同好会ですからね​

名付け親はおうじゃさん、たなさん、いい名前をありがとうございました。​

 

夢はAIに乗せて​

12月23日、ついにビリビリは初回を迎えます​

内容はその日まで伏せておいたような気がします(笑)​

なんといってもやるイベントの目的は「競馬のAI妄想」です​

そんなの予告できません​

​

この日の概要は記事化してますのでそちらをどうぞ​

https://powerdaaps.hatenablog.com/entry/2023/12/23/155853​

​

実は買った馬は5着だったのですが、人生で一番当たり馬券に近づいた有馬記念でした​

リベンジ?もちろんしますよ!​

 

プロレスゲーム大会?

​

年が明けて1月20日​

今度は作成したプロレスゲームでのゲーム大会です​

こんなしょーもないイベントになんと18人も参加していただきました​

本当にありがとうございます​

​

栄えある初代王者はMasayanさん​

すいません、まだ防衛戦やってませんでしたね​

年明けにやりましょう!!​

​

で、実はこの前日に私は300人が一斉に使うアプリを稼働させていた・・・​

 

2024年1月に日本のどこかで稼働したアプリよもやま話​

2月24日、ビリビリ3回目のイベントです​

1月に稼働させた人事異動関連アプリのお話をさせていただきました​

当時は所属を隠しておりましたので(バレバレ?)機能面に絞った話でした​

​

なんといっても300人超が一斉に使用開始するというドキドキ感を味わいました​

こんなふうに私は職場内で​

自分で企画して、自分で作って、自分で稼働させる、という自作自演を繰り返してます(笑)​

​

このアプリ、いくらか改良してまた年明けに稼働します​

今年はスマホ版も登場します!(何気にこっちのほうがかっこいい)​

​

今思えば、このあたりから忙しさが増していったような気がしますね・・・​

 

写経のススメ~学ぶは真似ぶから始まる~​

4月6日、ビリビリ4回目のイベントです​

前述したように忙しさが増しておりました。どうして忙しくなったかというと​

まず2月にデジタル推進を行う新部署が出来まして、そこの長となってしまいました​

プラス同窓会の事務局を引き受けてしまい、2月から受付開始や諸々の準備に忙殺​

​

なので、この回は本当に真似事をした中身しか話せておりません​

​

今、スケジュール見返したら、前日も飲み会でその日も飲み会してますね(遊びではない)​

そんな最中にイベントをやってしまう、まさかマゾなんでしょうかね?私は​

 

ビリビリ☆Power Apps 同好会 登壇大会#1​

5月25日、ビリビリ5回目のイベントです​

この回ですね、私はもはや司会進行しか出来ないほどに追い込まれていました​

ハイ、同窓会の事務局です、このとき開催2週間前でした​

​

この回、今見返しても豪華ですね~​

MVP2名(出戻りガツオさん、ヨウセイさん)にPPログさんに初代王者のMasayanさん​

​

この回で印象に残っているのはガツオさんが直前に急遽内容変更して​

GPT-4oをやっていただいたことですね、衝撃でしたね!​

 

【JPPGB】ゲーム作成コンテスト #1​

​

6月22日、たいした実力もないのに、こんなのに応募しちゃって(笑)​

なんか作ってみたかったんでしょうね・・・​

で、私が作ってみようとしたのはマインスイーパー​

当初Phythonで作成しているYoutubeを見よう見まねで作り始めましたが​

再帰的な動きがどうしても再現出来ずに断念​

結果、Minesweeper?として参加しました。​

​

なんですが、終わってからネット検索したら​

あるじゃないですか!!(笑)すでに誰か作っていたんですね​

community.powerplatform.com

 

2024年6月に日本のどこかで開催された同窓会よもやま話​

6月29日、ビリビリ6回目のイベントです​

今年の半分を捧げた同窓会よもやま話の内容です​

私はこの同窓会事務局を通じて、行き過ぎたデジタル化を行い(笑)​

あげく自らの首を絞め、一人情シス状態になるという​

それにしても忙しかったですわ~​

​

Clickで作った受付アプリに始まり​

請求書発行・領収書発行、当日の進行、当日の抽選会​

いったいいくつ作ったんでしょうかね(笑)​

​

最後には売れ残りのタオルまでアプリで完売させました​

 

ネタ切れ感のある中で、ヨウセイさんありがとう​

7月18日から実に8週連続でヨウセイさんが私のネタ切れを救ってくれます​

毎週木曜日にやったナレッジ共有アプリを作ってみるシリーズです​

私は同窓会にすべてを捧げ、そしてそのネタでイベントやったのでネタ切れ感満載です(笑)​

​

この時期にヨウセイさんがイベントやっていただいたのは超助かりました​

それと私、ただ見ているだけだったんですが、めっちゃ勉強になりました​

​

https://biribiri.connpass.com/event/317367/

 

この夏はこれに夢中!​

7月3日、私は「おうじゃさんといっしょ」に参加します。​

がしかし、疲労困憊のため思わず寝落ち(笑)​

なんですが、耳に入ってきたのはAI-Builderなる単語​

見たい、聞きたい・・・がしかし、眠い。人間弱いものですねぇ、結局睡魔に負けました​

​

7月10日、またも「おうじゃさんといっしょ」に参加します。​

そこで先週のお話を伺い、自分の環境で再現を試みる・・・​

あ・・・ライセンスの試用期間終わってる・・・​

これは課金しないと何も前に進まないやつ​

ということで、その場でPowerAutomateプレミアムライセンスに課金!!​

 

さらなる衝撃が!!​

そんな私にさらなる衝撃が走ったのが7月17日!!​​

まあなんと素敵なUdemyのコースをギークフジワラさんが出しました​​

www.udemy.com

​​

​

まずはモデル駆動型アプリを初めて本格的に触ることに​​

モデル駆動型の基本から何が出来るのかが網羅されていた​​

AI-Builderの使い方も実に様々なパターンが用意されていた​​

9時間越えのコースであったが、そこは必死に見た(笑)​​

 

8月10日には、またも「気ままに勉強会」にてLT​

テーマが社内勉強会ということでLTをやらせていただきました​

私、組織内ではデジタルシフト相談会なる勉強会をやっておりまして​

今年はなんと実に、27回もの開催をいたしました​

内容はそんなに高度ではないですが、草の根的に底上げを図っていければと思っています​

​

がしかし、この日、事件はアフタートークで起きます​

その日のトリを務めていただいたオモシロドリブンさんとプロレスネタで盛り上がりすぎてしまい、他の参加者をドン引きさせてしまいました​

たなさん、その節は大変申し訳ありませんでした​

​

ですが、これがのちのアレに繋がります​

 

8月27日には、ギークフジワラさんがゲストに!!​

ビリビリ☆Power Apps 同好会 ビリビリ座談会#1 にゲストとしてギークフジワラさんにお越しいただきました。​

​

ギークさんのUdemy見ながら作成したモデル駆動型アプリについて語らせていただきました。​

またギークさんの素晴らしいアプリについてもご紹介いただきました。​

​

ギークフジワラさん、本当にありがとうございました。​

 

9月24日には、オモシロドリブンさんがゲストに!!​

ビリビリ☆Power Apps 同好会 ビリビリ座談会#2 にゲストとしてオモシロドリブンさんにお越しいただきました。​

​

この回、Power Appsの話も、技術的な話も一切しておりません(笑)​

なんですが、話していてものすごく楽しい回でした​

​

プロレス回、またやってみたいですね​

 

10月10日には、出戻りガツオさんがゲストに!!​

ビリビリ☆Power Apps 同好会 ビリビリ座談会#3 にゲストとして出戻りガツオさんにお越しいただきました。​

​

この回は海外の達人について紹介させていただきました。​

海外には凄腕の人がたくさんいますねえ​

​

世界のRezaさん、いつもお世話になっています​

 

そしてMicrosoft MVPに

 

界隈の皆さん、本当にいつもお世話になっています。

このようなことになれたのも本当に皆様のお陰です。

今後も引き続きコミュニティ活動を通じて技術の素晴らしさを伝えていきたいと思います。(って技術あるのか?)

 

画像

 

 

 

 

 

DreamProWrestlingⅡへの道~その3~

Power Apps Advent Calendar 2024シリーズ2 12月9日分の記事です

前回まででメッチメイクが終わっています

さて、前回までの内容で〇月〇日、〇〇体育館での試合が決まった状態にはあります

いよいよ興行です(笑)

観戦するファンはワクワクしながら会場に到着します

まずファンがすべきこと、それはパンフレットを買うことです!!
そしてその日の試合カードがどんななのかを期待しながら表紙をめくる・・・

そんな光景が昭和のプロレスにはありました。

こんな感じです、今回はこれを現代風に再現してみます

とはいえ何のことはない、ギャラリーに表示するだけです

ここでは試合を格納してあるコレクションcolcardを表示させています

たまたま偶然ですが、背景に髪のある武藤と髪のない武藤ですね(笑)

ちなみに背景はランダムに切り替わります

 

ではいよいよ対戦画面にいきましょうか

 

さあ対戦です!!

では試合会場に入ってみましょう

*実際には選手画像がありますが、権利の関係上お見せしません

まず、今回はシングルマッチ、タッグマッチ、6人タッグマッチの3種類があります

前作ではそれぞれに画面を用意したので画面数が非常に多くなりました

今回は前作よりも成長した私(笑)を見せなければ・・・

ということでギャラリーを使ってみました

- GalleryRed:
    Control: Gallery
    Variant: galleryVertical
    Properties:
      Items: =Split(GalleryMatchlist.Selected.red," ")
      DelayItemLoading: =true
      Height: =690
      Layout: =Layout.Vertical
      LoadingSpinner: =LoadingSpinner.Data
      TemplatePadding: =0
      TemplateSize: =230
      Width: =275
      Y: =18
    Children:
    - Image4:
        Control: Image
        Properties:
          OnSelect: =Select(Parent)
          Image: =//LookUp(WreslerMST,name=ThisItem.Value).image
          Fill: =RGBA(0, 0, 0, 1)
          Height: =184
          Width: =275
    - Label7:
        Control: Label
        Properties:
          OnSelect: =Select(Parent)
          Text: =ThisItem.Value
          Align: =Align.Center
          Font: =Font.Georgia
          Height: =43
          Size: =If(Len(Self.Text)>19,10,15)
          Width: =275
          Y: =184

 

ここでcolredのredつまり赤コーナーの選手(1人or2人or3人)の結合された文字列をもう一度split関数でバラして表示しています

青コーナーも同じ要領ですね

 

Fightボタンには盛りだくさんのてんこ盛り

まずですね、ここには世界のRezaさんのテクニックを盛り込みました

処理中はアイコンくるくるして、ボタンを押せなくするアレです(笑)

www.youtube.com

 

関係する部分のみ抜粋です
      OnSelect: |
        =UpdateContext({locIsFighting: true});
        // Add your onselect code here(この間に色々処理を書きます)
        UpdateContext({locIsFighting: false});
       
      Icon: =If(locIsFighting,"ArrowSync","" )
      IconRotation: =If(locIsFighting,locRotationAngle,0)
      Text: =If(locIsFighting,"Fighting...", "Fight")
      DisplayMode: =If(locIsFighting,DisplayMode.Disabled, DisplayMode.Edit)

 

なんか変なチェックボックスありますね?

 これですね、試合概要を生成AIに作ってもらうのですが、技の 名前をPowerPlatformなどの関数から考えてもらうようにしています

ではAI機能を見ていきましょう

 

Fightボタンにこう仕込んであります

Set(
    varresult,
    'GPT-4oプロレス'.Run(
        "本日の第" & GalleryMatchlist.Selected.no & "試合、" & GalleryMatchlist.Selected.red & "VS" & GalleryMatchlist.Selected.blue & "の" & GalleryMatchlist.Selected.type & "、",
        If(
            CheckboxPower.Checked,
            "技の名前はPowerPlatformやPowerApps,PowerAutomate,Excelの関数を面白い名前にアレンジして駆使してください",
            ""
        )
    )
);

今回はPowerAutomateでやってます

本当はAI-Builderでも出来るのですが・・・作成時点でクリジットが枯渇しました

ちなみにクレジットが枯渇するとこんな残念なメールが来ます

ということで今回はAzureOpenAI使います

フロー全体はこんな感じです

では順に見ていきましょう

まずアプリからtextとmodeを渡します

textは試合カードを渡していて、modeは試合モードを渡しています

こんな感じでfewshotプロンプトにしています

作成アクションは

body('HTTP_GPT-4o')?['choices'][0]?['message']?['content']
 
でそれをアプリに返却します
ではちょっと対戦させてみましょうか

いや~PowerMODE最高ですね(笑)
ワークフロー・スリーパーとかどんな技なんだよ・・・と
ということでその4につづく

DreamProWrestlingⅡへの道~その2~

Power Apps Advent Calendar 2024シリーズ2 12月6日分の記事です

今回のコンセプトは?

さて前回はトップページ作った内容でしたが

今回はメニュー・・・と行きたいところですが、メニューは何の変哲もないギャラリー使ったメニューなので割愛します。

ということで今回のコンセプトはというと

それは「興行」です!!

前作はリーグ戦、タッグリーグ戦、シングルマッチ、タッグマッチ、試練の十番勝負、勝ち抜き戦と試合形式にこだわりました(笑)

がしかし、今回のコンセプトは昭和の時代ならではの「興行」です

つまり何月何日にどこの会場で全〇試合、ということがコンセプトなのです

恐らく今までにそんなところに焦点を当てたプロレスゲームはないと思います

 

さあ、マッチメイクだ!!

レスラーマスターは前作のをそのまま使用しています

権利関係があるのでここでは画像は掲載しません(実際には画像もあります)

さて、どんなふうにマッチメイクしていくのでしょうか

 

まず選手を選ぶボタンには

- ButtonCanvasRedselect:
    Control: Button
    Properties:
      OnSelect: =Select(Parent);Collect(colred,{name:ThisItem.name});Collect(colwrestler,{name:ThisItem.name})
      BasePaletteColor: =Color.Red
      Text: ="Select"
      DisplayMode: =If(CountRows(Filter(colred,name=ThisItem.name))=1||CountRows(Filter(colblue,name=ThisItem.name))=1||CountRows(Filter(colwrestler,name=ThisItem.name))=1,DisplayMode.Disabled,DisplayMode.Edit)
      Width: =50
      X: =190
      Y: =14

 

赤コーナーか青コーナーで選ばれていたら選択させないようにしています

いくつかコレクションを作ります

colredには赤コーナーで選択した選手を

colblueには青コーナーで選択した選手を

colwrestlerにはどちらかで選択した選手の判定用にそれぞれコレクションを作ります

 

Removeボタンには
- ButtonCanvasRedremove:
    Control: Button
    Properties:
      OnSelect: =Select(Parent);RemoveIf(colred,name=ThisItem.name);RemoveIf(colwrestler,name=ThisItem.name)
      BasePaletteColor: =Color.Red
      Text: ="Remove"
      Width: =50
      X: =255
      Y: =14

ではちょっと選手を選んでみましょうか

おっと2025.1.4東京ドームでは三沢VS武藤ですよ!!

今となっては絶対に見ることの出来ない夢カードですね

レスラー名のテキスト表示はこうしてあります

- TextCanvasRed:
    Control: Text
    Properties:
      Align: ='TextCanvas.Align'.Center
      Font: =Font.Georgia
      FontColor: =Color.White
      Size: =25
      Text: =Concat(colred,name," ")
      Weight: ='TextCanvas.Weight'.Bold
      Height: =60
      Width: =Parent.Width

 

さて、なぜConcatしてる?

それはですね、今回はシングルマッチだけではなくタッグマッチや6人タッグマッチにも対応させるべく、例えば赤コーナーで選んだ選手のnameをConcatでつないでいるということです

見栄えを考慮してあえて半角スペースで結合しています

でここからがマッチメイクの本番です(笑)

 

試合会場にもこだわる(笑)

プロレス者にしかわからない感覚ですが、だいたい全国各地の体育館の名前を憶えているはずです。取り壊しになった体育館まで憶えています(笑)

さてはてここでCopilotの出番です。

こんな感じでやりとりをした結果

[
    "東京ドーム",
    "後楽園ホール",
    "両国国技館",
    "大阪城ホール",
    "日本武道館",
    "福岡国際センター",
    "横浜アリーナ",
    "名古屋国際会議場",
    "札幌中島体育センター",
    "仙台サンプラザホール",
    "広島サンプラザホール",
    "神戸ワールド記念ホール",
    "愛知県体育館",
    "大阪府立体育会館",
    "高松市総合体育館",
    "熊本県立総合体育館",
    "鹿児島アリーナ",
    "埼玉スーパーアリーナ",
    "千葉公園体育館",
    "蔵前国技館",
    "大阪球場",
    "福岡スポーツセンター",
    "後楽園球場",
    "横浜文化体育館"
]

ということにしました。私的にはだいたい満足です(笑)

Colcardなるコレクションに試合を追加していく

試合会場や試合時間が選択されるとAddボタン他を押せるようになります

Addボタンは以下のとおり

- ButtonCanvasAdd:
    Control: Button
    Properties:
      OnSelect: |-
        =Collect(
            colcard,
            {
                no: CountRows(colcard) + 1,
                date: DatePicker1.SelectedDate,
                arena: DropdownCanvas1.Selected.Value,
                red: Concat(
                    colred,
                    name,
                    " "
                ),
                blue: Concat(
                    colblue,
                    name,
                    " "
                ),
                time: RadioGroupCanvasTime.Selected.Value,
                type: Switch(
                    CountRows(colred),
                    1,
                    "シングルマッチ",
                    2,
                    "タッグマッチ",
                    3,
                    "6人タッグマッチ"
                ),
                detail: "",
                redresult: "",
                blueresult: ""
            }
        );
        Clear(colred);
        Clear(colblue)
      Icon: ="Add"
      Text: ="Add"
      DisplayMode: |+
        =If(IsBlank(RadioGroupCanvasTime.Selected)||CountRows(colred)<>CountRows(colblue)||CountRows(colred)=0||IsBlankOrError( DropdownCanvas1.Selected.Value),DisplayMode.Disabled,DisplayMode.Edit)
      Width: =80
      X: =977
      Y: =21

 

試合を試合順含めてコレクションに格納していきます

no:試合順

date:開催日

arena:会場名

red:赤コーナーのレスラー

blue:青コーナーのレスラー

time:試合時間

type:試合形式(これは人数から判定)

detail:試合結果を格納するために作る

redresult:勝敗結果格納用

blueresult:勝敗結果格納用

って感じです

では何試合か追加してみましょう

いや~文字見るだけでワクワクしますね(笑)

こんな興行あったら特リン(特別リングサイド席のこと)いくら出しますかね

私は10万までは出しますね

それでも見れないかもしれないですね、ダフ屋必至の興業です

皆さんのメインはどの試合ですかね?

 

で、ですね

試合順が気に入らない場合ありますよね

そんな場合には以前書いたこの記事のを実装しています

powerdaaps.hatenablog.com

ということでマッチメイク画面の概要はお伝えしましたかね

次回に続きます

あと2回で書ききれるのか心配ではありますが(笑)

まだまだありますよネタ的には

Â