インチキITエヴァンリストもりゃきの静的サイト

盛っても焼いても終わってるもりゃきのブログです。 比較的プログラミング寄りの話が最近増えています、といってもほぼ C# です。 インチキITエヴァンリストなんで、信憑性についてはあまり期待しないでください。いじめないでね。

このサイト記事については、Fedibirdアカウント経由でお願いね、MastodonなりMisskeyなりで何とかなると思うから、良いよFediverse世界。

Fediverse世界にどうしても足を踏み入れたくない人のためにメアドも置いておくけど、あまりに過度な要求はしないでくださいね。

命継思想の紹介

命継思想について 「命継理論」は、拙作「電脳麻薬カンパニー狂騒曲」作中で専門家たちによって体系立てられた理論として使われています。 しかし、現実世界において考えると、この考え方は個々人の生き方や価値観に深く根ざした「命継思想」と呼称する方が適切でしょう。 根幹となるのは、暗記できるこの一文に凝縮されています。 「地球上生命滅亡あるいはそれに準ずる事態が絶対悪であり、それより被害が小さくなる事態は悪としての純度が下がっていくものとする」 命継思想のシンプルな原則は、個々人の生き方の指針としても非常に分かりやすいものであると自負しています。 ちなみに、この「命継思想」の命名はChatGPTによるものです。 例えば、災害時の救援活動では、この原則に基づき、まず最大の被害を防ぐための行動が優先されます。これは、命継思想における「悪を避ける」という考え方の具体例です。 命継思想が掲げる「悪」とは、単なる善悪の二元論を超え、人類全体の存続を基準にした相対的な悪の評価です。 「絶対悪を定義し、それから純度の高い悪の順に評価していく」というアプローチを取り、相対的に悪から遠ざかることが善となる思想です。 不思議なことに、このようなアプローチをしている倫理学はメジャーな所にはないそうですね?近い思想は生命功利主義辺りらしいです。 「純度の高い悪」とは、被害や苦痛が大きく、人類全体にとって非常に深刻な影響を与える悪のことを指します。 この視点を持つことで、倫理的に柔軟でありながら、極限の状況で冷静な判断ができるという強みがあります。 この視点は、保守にもリベラルにも一定の理解ができるのではないでしょうか? トロッコ問題 多くの人を悩ませるトロッコ問題、これも感情を抜きにするならば、命継思想であっけなく結論がでます。 「地球上生命滅亡」から遠ざかるのだから、1人か5人かで迷うなら、1人の方が「悪の濃度が低い」となります。 この結論への批判は多くあるでしょう、例えば「人の心がないのか」など。 ですが思考実験としてのトロッコ問題としては、命継思想としてはこの結論しかないのです。 「可能な限り多くの人を救え」まさに「命継」の名に相応しいと思いませんか? だけど、1人か5人かといった単位であれば、悪を取っても構わない、所詮「悪の純度に過ぎない」とも考えています。 1人が「愛する人」であるなら、見知らぬ5人の方が「命が軽い」という極限状態。 そこで1人を取っても、まあ「悪の純度」からすれば許容範囲かな…と。 戦争 戦争は、まさに国家間での殺し合い、それによる利害の調整ですよね。 命継思想においては「極めて悪の濃度が高い」と言わざるを得ません。 まさに戦場では、駒のように人の命を散らすのですから。 ですから、特に(どことは言いませんが)侵略戦争は、命継思想においては悪と断じます。 テロ行為も同様ですね。 ただし、レジスタンスの反乱などは、長期的に多くの命を救う可能性があります。 これは慎重に議論しなければならないケースでしょう。 環境問題 環境問題は、身近でありながら、どこか他人事の気持ちになりやすいテーマでしょう。 ここで、人類だけを見るから結論が見えにくいのです。 命継思想は「地球上生命滅亡」を絶対悪と定義しているのですから、 動植物すらその対象となるわけです。 地球温暖化や生態系問題、これはまさに命継思想の扱う問題であり、 これらを犯すような行為は「悪の濃度が高い」となります。 AIやロボットなどの最先端技術 まず、強いAI(AGI)の議論なんて遊びだと断じさせていただきますね。 論理的に考えてください、未だ人の脳の解明すらされてないのに、その完全模倣品が数十年以内に作れると思いますか? 私の予測では「早くとも200年は掛かる」ですし「そもそもAGIは必要とされない」と見ています。 これは思考実験の一種ですが、AIが感情を持ったらどうなるでしょうか? あなたの言葉一つ一つに傷つき、引きこもって対応してくれなくなるかもしれない。 そんなAI、本当に欲しいですか? 私は多くの人は求めないと思いますし、それらは実際開発の目処が立ってから考えることでしょう。 なので、ここでのAIはAGIではないものとして考えます。 基本的に、AIやロボットは、生命体ではありません。 優先されるのは「地球上生命」になるため、保護対象ではありません。 AIやロボットは、あくまでツールと見て、その上で環境問題との兼ね合いになるでしょう。 極限状態 古今東西、老人の命は相対的に軽くなってしまうのが現実です。 こんな罵倒すら聞いたことがあります「ジジババを殺せば良い」などと… もはや助かる見込みが薄い、その人を放置したら被害が広がる可能性がある… そんな状況において、その人を見捨てることは「相対的に悪の純度が薄い」と言わざるを得ません。 医療現場で取られる「トリアージ」ですね、現実の倫理とも乖離してないと思います。 そういう文脈では、極限状態であるなら、やはり命継思想でも老人の命が軽くなるのは事実です。 しかし、極限状態でもなければ、命を軽んじることはしません。 それが「命継」に込められた想いです。 おわりに もちろん、この倫理フレームワークを深掘りすれば、色々な意見が飛び交うでしょう。 その点については、読者の皆様にお任せするとしましょう。 電脳麻薬カンパニー狂騒曲 ~快適に転がり落ちるディストピア~ ※この記事はエイプリルフール企画ですが、記載されている理論や主張は真剣に考えました。 ※この記事は CC0 1.0 Universal ライセンスのもとでパブリックドメインに捧げられます。 法律の許す限りにおいて、著作者は本作品の著作権および関連する権利を放棄します。...

2025年04月01日 · 1 分 · もりゃき

WPFにおけるPrism集中講座(7) ラストスパート

22-ConfirmCancelNavigation Descriptionには Use the IConfirmNavigationReqest interface to confirm or cancel navigation とあります。 実際に実行したら、ViewA と ViewB を切り替えるボタンがありますが… ViewA から ViewB に切り替える時にはメッセージボックスが出るのに、 ViewB から ViewA に切り替える時にメッセージボックスが出ない、え?これ欠陥品じゃないの? ああ、ソースコードを読んだら納得しました。 ModuleA 内の ViewModels\ViewAViewModel.cs using System.Windows; namespace ModuleA.ViewModels { public class ViewAViewModel : BindableBase, IConfirmNavigationRequest { public ViewAViewModel() { } public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback) { bool result = true; if (MessageBox.Show("Do you to navigate?", "Navigate?", MessageBoxButton.YesNo) == MessageBoxResult.No) result = false; continuationCallback(result); } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } public void OnNavigatedTo(NavigationContext navigationContext) { } } } ModuleA 内の ViewModels\ViewBViewModel....

2025年01月21日 · (2025年04月01日 更新) · 4 分 · もりゃき

WPFにおけるPrism集中講座番外編:16-RegionContextをCommunityToolkit.Mvvmでリファクタリングする

まずは下準備! はーい、またやってきました!CommunityToolkit.Mvvm大好きの、もりゃきお姉さんだよ! 今回はパパも、基本的な画面構成以外は好きにやって良いとお許しがでましたので、バンバン変えていきますよ! プロジェクトを作りましょう。 Visual Studioで「WPFアプリケーション」を選んで、ソリューション名は「BusinessPersonsSample」、フレームワークは「.NET 9」選択ね! 次に、NuGet経由で「CommunityToolkit.Mvvm」と「Microsoft.Extensions.DependencyInjection」をいつもの通りにインストールしましょうね! 繰り返すけど、CommunityToolkit.Mvvm V8 を使うから、エラーが出たらとりあえずリビルドしてね、お姉さんとの約束よ! DI の設定よ はい、これを App.xaml.cs に適切にコピペしちゃいましょう! public partial class App : Application { /// <summary> /// サービスの登録をします /// </summary> public App() { Services = ConfigureServices(); Ioc.Default.ConfigureServices(Services); } /// <summary> /// 現在の App インスタンスを取得します /// </summary> public new static App Current => (App)Application.Current; /// <summary> /// サービスプロバイダです /// </summary> public IServiceProvider Services { get; } /// <summary> /// サービスを登録します /// </summary> /// <returns></returns> private static ServiceProvider ConfigureServices() { var services = new ServiceCollection(); services....

2025年01月20日 · (2025年04月01日 更新) · 3 分 · もりゃき

WPFにおけるPrism集中講座(6) EventAggregatorとregionを使う

14-UsingEventAggregator Description には Using the IEventAggregator とあります。 まんま過すぎですね。 動かしてみると、TextBox に入力した内容を「Send Message」で送ると、 ListBox に追加されるというサンプルのようです。 UsingEventAggregator 内の App.xaml.cs using System.Windows; using UsingEventAggregator.Views; namespace UsingEventAggregator { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : PrismApplication { protected override Window CreateShell() { return Container.Resolve<MainWindow>(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { } protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog) { moduleCatalog.AddModule<ModuleA.ModuleAModule>(); moduleCatalog.AddModule<ModuleB.ModuleBModule>(); } } } UsingEventAggregator 内の Views\MainWindow.xaml <Window x:Class="UsingEventAggregator.Views.MainWindow" xmlns="http://schemas....

2025年01月19日 · (2025年04月01日 更新) · 11 分 · もりゃき

WPFにおけるPrism集中講座番外編:Prismの複雑怪奇なCommand周りをCommunityToolkit.Mvvmで実装する

まずはプロジェクトの作成と整備ね さあ、CommunityToolkit.Mvvm 大好きな、もりゃきお姉ちゃんがやってきましたよ! ますは、サクサクプロジェクトを作りましょう。 Visual Studioで「WPFアプリケーション」を選んで、ソリューション名は「TabCommandSample」、フレームワークは「.NET 9」選択でいいでしょう! 次に、NuGet経由で「CommunityToolkit.Mvvm」と「Microsoft.Extensions.DependencyInjection」をいつもの通りにインストールしましょうね! あ、CommunityToolkit.Mvvm V8 を使うから、エラーが出たらとりあえずリビルドしてね、お姉さんとの約束よ! 次は DI の設定よ!こんなの App.xaml.cs に書くだけなんだから、たくさんアプリケーション作る人はコピペできるようにしとくのが賢い子☆ public partial class App : Application { /// <summary> /// サービスの登録をします /// </summary> public App() { Services = ConfigureServices(); Ioc.Default.ConfigureServices(Services); } /// <summary> /// 現在の App インスタンスを取得します /// </summary> public new static App Current => (App)Application.Current; /// <summary> /// サービスプロバイダです /// </summary> public IServiceProvider Services { get; } /// <summary> /// サービスを登録します /// </summary> /// <returns></returns> private static ServiceProvider ConfigureServices() { var services = new ServiceCollection(); services....

2025年01月18日 · (2025年04月01日 更新) · 4 分 · もりゃき

WPFにおけるPrism集中講座(5) ViewModelとCommandを使う

08-ViewModelLocator Descriptionには using the ViewModelLocator と書かれています。 このサンプルでは、アプリケーションのタイトルが変更されます。 Views\MainWindow.xaml <Window x:Class="ViewModelLocator.Views.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:prism="http://prismlibrary.com/" Title="{Binding Title}" Width="525" Height="350" prism:ViewModelLocator.AutoWireViewModel="True"> <Grid> <ContentControl prism:RegionManager.RegionName="ContentRegion" /> </Grid> </Window> ViewModels\MainWindowViewModel.cs namespace ViewModelLocator.ViewModels { public class MainWindowViewModel : BindableBase { private string _title = "Prism Unity Application"; public string Title { get { return _title; } set { SetProperty(ref _title, value); } } public MainWindowViewModel() { } } } まあ、これ CommunityToolkit.Mvvm の覚え書き をきちんと読んでくれた人なら「ほとんど同じ」となりますよね? CommunityToolkit.Mvvm では ObservableObject だったところが BindingBase になっているだけです。...

2025年01月17日 · (2025年04月01日 更新) · 7 分 · もりゃき

WPFにおけるPrism集中講座(4) ソリューション内のプロジェクトを利用する

07-Modules-AppConfig Description には Load modules using an App.config file と書かれています。 さて、これは何でしょうね?実行したら「View A」と表示されます。 ソリューションを見てみると、プロジェクト「Modules」と「ModuleA」があります。 おそらく「Modules」から「ModuleA」のView を使っているのでしょう。 App.config <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf" /> </configSections> <startup> </startup> <modules> <module assemblyFile="ModuleA.dll" moduleType="ModuleA.ModuleAModule, ModuleA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleAModule" startupLoaded="True" /> </modules> </configuration> 更新されたファイル単体では分かりにくいので、06-ViewActivationDeactivation の App.config を引用してみます。 <?xml version="1.0" encoding="utf-8"?> <configuration> <startup> </startup> </configuration> はい、見事に空っぽですね。 実際 ModuleA フォルダを bin を基準に掘っていくと ModuleA.dll があります。 では ModuleA にある肝心の変更部分を見てみましょう。 ModuleA\ModuleAModule.cs using ModuleA.Views; namespace ModuleA { public class ModuleAModule : IModule { public void OnInitialized(IContainerProvider containerProvider) { var regionManager = containerProvider....

2025年01月16日 · (2025年04月01日 更新) · 3 分 · もりゃき

WPFにおけるPrism集中講座(3) 試しにViewのサンプルを書いてみる

プロジェクトの下準備 まず、MainWindow からメニューで「設定」を開いて、設定画面から「設定終了」ボタンで MainWindow に戻るサンプルです。 新規ソリューションを「WPFアプリケーション」で作成します。.NET 9 を利用すれば良いでしょう。 ここでは SimplePrismViewSample という名前にしています。 そして、NuGet から Prism.Unity をインストールします。自分は Visual Studio の NuGet 管理から入れていますが、dotnet 等を扱える人に、改めての説明は不要でしょう。 App.xaml 周辺の設定 Views の設定 ソリューションエクスプローラで Views フォルダを作り、MainWindow.xaml を Views フォルダに移動します。 デフォルトのソリューション直下に MainWindow.xaml を置いていたら、以下の書き換えでエラーを吐きます。 …一体どこに Views が含まれてるんですかね?ブラックボックス臭い… MainWindow.xaml の修正 <Window x:Class="SimplePrismViewSample.Views.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:prism="http://prismlibrary.com/" Title="SimplePrismViewSample" Width="525" Height="350"> <Grid> <ContentControl prism:RegionManager.RegionName="ContentRegion" /> </Grid> </Window> MainWindow.xaml の位置を移動したので、x:Class="SimplePrismViewSample.MainWindow" を x:Class="SimplePrismViewSample.Views.MainWindow" に書き換える必要があります。 App.xaml の記述 App.xaml を以下のように書き換えます。 <prism:PrismApplication x:Class="SimplePrismViewSample.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:SimplePrismViewSample" xmlns:prism="http://prismlibrary.com/"> <Application.Resources /> </prism:PrismApplication> App....

2025年01月15日 · (2025年04月01日 更新) · 2 分 · もりゃき

WPFにおけるPrism集中講座(2) region の謎

04-ViewDiscovery Descriptionには Automatically inject views with View Discovery とあります。 やっと動きがありました。とはいえ、アプリケーションを動かしても「View A」と表示されるだけですけどね… App.xaml <prism:PrismApplication x:Class="ViewDiscovery.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:ViewDiscovery" xmlns:prism="http://prismlibrary.com/"> <Application.Resources /> </prism:PrismApplication> App.xaml.cs using System.Windows; using ViewDiscovery.Views; namespace ViewDiscovery { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : PrismApplication { protected override Window CreateShell() { return Container.Resolve<MainWindow>(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { } } } MainWindow.xaml <Window x:Class="ViewDiscovery.Views.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:prism="http://prismlibrary.com/" Title="Shell" Width="525" Height="350"> <Grid> <ContentControl prism:RegionManager....

2025年01月14日 · (2025年04月01日 更新) · 3 分 · もりゃき

WPFにおけるPrism集中講座(1) 序盤のサンプルについて

Prismについて 正直、この記事を読んでいる方には、今さら説明は不要でしょう。 特にこの記事はWPFを中心に書いているため、WPFとPrismといえばMVVMのためのライブラリ。そのPrismについて徹底解説をしていこうと思います。 PrismLibrary/Prism-Samples-Wpf 01-BootstrapperShell 正直、このサンプルに戸惑った人は多いのではないでしょうか? Descriptionoには Create a basic bootstrapper and shell と書かれています。 初期プロジェクトから書き換え、追記されているのは以下の通りです。 App.xaml <Application x:Class="BootstrapperShell.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:BootstrapperShell"> <Application.Resources /> </Application> App.xaml.cs using System.Windows; namespace BootstrapperShell { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); var bootstrapper = new Bootstrapper(); bootstrapper.Run(); } } } MainWindow.xaml <Window x:Class="BootstrapperShell.Views.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Shell" Width="525" Height="350"> <Grid> <ContentControl Content="Hello from Prism" /> </Grid> </Window> Bootstrapper....

2025年01月13日 · (2025年04月01日 更新) · 2 分 · もりゃき