救急安心センターと警察相談専用窓口

救急車や警察を呼ぶことを躊躇したことはありませんか? 「急病だけど、救急車を呼んでもいいの?」「怖いけど110番が適切かどうかわからない」 日本に住んでいる方なら、一度はこの状況に直面したことはありませんか? 特に、救急車は台数不足というパンフレットまである始末です。 私事ですが、私の母も適切に救急車を呼ばれず、命を落としたという経験をしております。 そんな貴方に取って必要なのは「相談窓口」ではありませんか? それが #7119 「救急安心センター」 #9110 「警察相談専用電話」 となっております。 パンフレットを作りました こんなブログで情報発信をするだけでは意味がないと思うので、パンフレットを作成しました。 白黒に減色したので、インクジェットプリンターでの印刷にも向いているかと思います。 地域によっては #7119 や #9110 が整備されてない所もあるかもしれません。 ですが、その場合は内容を変更してくださいね、それを許すための CC0 ライセンスなのですから。 License この作品はCC0 1.0 Universal (CC0 1.0) 公共ドメイン提供 により、もりゃきによって提供されています。 著作権者は、この作品における著作権および関連するすべての権利を、法律の許す限り放棄します。 あなたはこの作品を自由にコピー、変更、配布、実行、商用利用することができます。出典表示も必要ありません。 This work has been dedicated to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication by moriyaki. The copyright holder has waived all copyright and related rights to the extent permitted by law. ...

2025年06月23日 · 1 分 · ☨もりゃき.xyz☨

x:Static不使用:CommunityToolkit.MvvmでDIを利用した、実務的なWPFでの国際化対応(多言語対応)

DIを使いながら、国際化対応(多言語対応)をしよう 今やグローバル時代!世界を相手にしなければ勝てない! そう、東京弁だけでなく大阪弁、名古屋弁、博多弁など…ごめんなさい調子に乗りました、単純に「日本語」「英語」「ロシア語」対応について語ります。(天丼) 今回は総集編として カップ麺シリーズ:一から学べる、WPFでの多言語対応方法 を、DI込みの記事として公開します。 本記事では、WPFでCommunityToolkit.Mvvm+DI構成を取りつつ、アプリを実務的に多言語対応させる方法を解説します。 「x:Staticを使わずに切り替えたい」「コードビハインドを汚したくない」 そんな悩みに答えるべく、依存性注入によるResourceManager活用+ViewModel連携まで、丁寧に紹介していきます。 最初にプロジェクトを作ろう 今回は「WPFアプリケーション」で DIMultiLanguageTest というプロジェクトを作りましょう。フレームワークは「.NET 9.0」を利用します。 プロジェクトに Views と ViewModel フォルダを作ります。 そして開かれた MainWindow.xaml を Views フォルダに移動して、以下のようにします。 <Window x:Class="DIMultiLanguageTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:DIMultiLanguageTest" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Title="DIMultiLanguageTest" Width="800" Height="450" mc:Ignorable="d"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Menu> <MenuItem Header="Language"> <MenuItem Command="{Binding ToJapaneseCommand}" Header="Japanese" /> <MenuItem Command="{Binding ToEnglishCommand}" Header="English" /> <MenuItem Command="{Binding ToRussianCommand}" Header="Russian" /> </MenuItem> </Menu> <Button Grid.Row="1" Margin="5" Command="{Binding ExecuteGreetingsCommand}" Content="{Binding Greetings}" /> </Grid> </Window> MainWindow.xaml のフォルダを移動したので、このままでは例外で落ちるため、App.xaml を以下のように書き換えます。 <Application x:Class="DIMultiLanguageTest.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:DIMultiLanguageTest" StartupUri="Views/MainWindow.xaml"> <Application.Resources /> </Application> わかると思いますが、MainWindow.xaml を移動した Views\ を StartupUri に書き加えたわけですね。 ...

2025年04月11日 · (2025年06月19日 更新) · 3 分 · ☨もりゃき.xyz☨

命継思想の紹介

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

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

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.cs namespace ModuleA.ViewModels { public class ViewBViewModel : BindableBase { public ViewBViewModel() { } } } っていうか、訳がわからないですね? ...

2025年01月21日 · 4 分 · ☨もりゃき.xyz☨

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

前提条件 まずは以下の記事内容を踏まえてください。 カップ麺シリーズ:一から学べるWPF における CommunityToolkit.Mvvm(MVVM ToolKit) 覚え書き(1) 簡単な依存性注入とデータバインディング カップ麺シリーズ:一から学べる、WPF における CommunityToolkit.Mvvm(MVVM ToolKit) 覚え書き(2) 依存性注入を利用した簡単なサンプル カップ麺シリーズ:一から学べるWPF における CommunityToolkit.Mvvm(MVVM ToolKit) 覚え書き(3) メッセージングの簡単なサンプル カップ麺シリーズ:CommunityToolkit.Mvvm V8の覚え書き まずは下準備! はーい、またやってきました!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.AddSingleton<IMessenger, WeakReferenceMessenger>(); services.AddSingleton<IMainWindowViewModel, MainWindowViewModel>(); return services.BuildServiceProvider(); } } フォルダの作成と準備 まずはプロジェクトに Views と ViewModels、Models フォルダを作るわよ。 ...

2025年01月20日 · 3 分 · ☨もりゃき.xyz☨

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.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> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <ContentControl prism:RegionManager.RegionName="LeftRegion" /> <ContentControl Grid.Column="1" prism:RegionManagerRegionName="RightRegion" /> </Grid> </Window> UsingEventAggregator 内の ViewsModels\MainWindowViewModel.cs namespace UsingEventAggregator.ViewModels { public class MainWindowViewModel : BindableBase { private string _title = "Prism Unity Application"; public string Title { get { return _title; } set { SetProperty(ref _title, value); } } public MainWindowViewModel() { } } } ModuleA プロジェクトと ModuleB プロジェクトを ContentControl で読み込んでいるようです。 ...

2025年01月19日 · 11 分 · ☨もりゃき.xyz☨

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

前提条件 まずは以下の記事内容を踏まえてください。 カップ麺シリーズ:一から学べるWPF における CommunityToolkit.Mvvm(MVVM ToolKit) 覚え書き(1) 簡単な依存性注入とデータバインディング カップ麺シリーズ:一から学べる、WPF における CommunityToolkit.Mvvm(MVVM ToolKit) 覚え書き(2) 依存性注入を利用した簡単なサンプル カップ麺シリーズ:一から学べるWPF における CommunityToolkit.Mvvm(MVVM ToolKit) 覚え書き(3) メッセージングの簡単なサンプル カップ麺シリーズ:CommunityToolkit.Mvvm V8の覚え書き まずはプロジェクトの作成と整備ね さあ、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.AddSingleton<IMessenger, WeakReferenceMessenger>(); services.AddSingleton<IMainWindowViewModel, MainWindowViewModel>(); return services.BuildServiceProvider(); } } 次はエラーが出た MainWindowViewModel の設定だけど、まとめてやっちゃうわよ! プロジェクトにとりあえず Views と ViewModels フォルダを作って MainWindow.xaml を Views に移動、名前空間も手動作業含めて調整。 ...

2025年01月18日 · 4 分 · ☨もりゃき.xyz☨

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 になっているだけです。 違いは、View…ここでは MainWindow.xaml.cs に当たりますが、 ここで DataContext に設定しなくても動くことでしょうか? ...

2025年01月17日 · 7 分 · ☨もりゃき.xyz☨

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.Resolve<IRegionManager>(); regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA)); } public void RegisterTypes(IContainerRegistry containerRegistry) { } } } 他の変更は些細なものなので省略します。 ...

2025年01月16日 · 3 分 · ☨もりゃき.xyz☨

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.xaml.cs の記述 App.xaml.cs を以下のように書き換えます。 ...

2025年01月15日 · 2 分 · ☨もりゃき.xyz☨