膨張空間

開発日記を中心に、時々雑記を投稿します。よろしく

.NetCore3.1とDapperでOracleに接続する

未だに.NetFrameWorkを使用することが多く、.NetCoreでOracleに接続をしたことがなかった。 調べてみると以外と自分の環境とバッチリあっている記事が見当たらなかったので、自分用にサンプルを作成した。

ここにサンプルを配置した。

この記事で確認できること

.NetCore3.1でDapperを使用してOracleに接続できる

環境

C# Visualstudio2019 Comunity .NetCore 3.1 Dapper(軽量ORM:SQLは自分で書く。Modelのマッピングはして欲しいくらいの人が使いやすい)

ソース

ConnectionString は各環境に合わせて変更してください。 特別なことはしてしないので見てもらえばすぐに理解できるかと思う。 引数のParamをT(ジェネリック)で宣言してるが、DynamicParameterで宣言しても問題ない。 シンプルな環境であればClassをそのまま使った方がお手軽に使うことができる。

    public class DbClient
    {
        //接続情報保持用
        private DbConnection Connection { get; } = new Oracle.ManagedDataAccess.Client.OracleConnection();

        //コンストラクタ
        public DbClient()
        {
            //ここで接続情報を設定する
            Connection.ConnectionString = @"Data Source = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=hoge))) ; User ID = foo; Password = tiger;";
            //接続開始
            Connection.Open();
        }

       //Select
        public IEnumerable<T> Select<T>(string sql, T param)
        {
            return Connection.Query<T>(sql, param);
        }

        //Update、Delete
        public void Update<T>(string sql, T param)
        {
            using (var trun = Connection.BeginTransaction())
            {
                Connection.Execute(sql, param);

                trun.Commit();
            }
        }
    }

【Alibaba】RDS for PPASでPostgresSQLの拡張機能を追加する方法

数時間単位ではまったので記録しておく。前にDB作成した時もはまったなこれ…

PostgresSQLには拡張機能が用意されている。通常はSuperUser権限を持ったアカウントで以下のコマンドを実行すると追加できる。

--SuperUserで実行する
create extension dblink
;
create extension pgcrypto
;

RDS for PPAS上のPostgresSQLにも、上記のSQLで追加したいところだが、 RDS for PPASにはSuperUser権限を持ったアカウントを作成することができない。

そのためコマンドを実行してもSuperUser権限持ってから出直してこい的なメッセージで弾かれてしまう。

詳しくは公式サイトを確認して欲しい。(このサイトもなかなか見つけにくいよ…)

RDS for PPASでは拡張機能を追加するための 共通管理関数 という関数で一般権限でも拡張機能を追加することができる 上記のコマンドは以下のように書く

-- create:追加する dblink:追加するオプション名 hoge:database名
select rds_manage_extension('create','dblink','hoge')
:
select rds_manage_extension('create','pgcrypto','hoge')
;

この関数の存在を忘れて何とかSuperUser権限を持ったユーザーが作成できないか。 それともログインパスワードを忘れただけなのかで数時間つぶしてしまった。

【EDB】関数dblink_exec()は存在しませんの解決策

普段Oracleを使用しているのだが、PostgresSqlを使用することになり、既存ソースを使用するためにEDBを選択した。 それからしばらくして新しいDatabaseを作成することになり、元々動いていたDBからテーブルやストアドやらをコピーして大体動いていたのだが、 一部のSQLで「関数dblink_exec()は存在しません」が表示されて結果が返ってこなかった。 コピー元と見比べて原因が分かったので記録しておく。

f:id:gshota:20210321141919p:plain
追加する必要があった拡張機能

拡張機能がDatabaseに追加されていないことが原因だった。 拡張機能が何をしているかは、追加で調べることにして取り急ぎ追加して正常に検索できるようになることを確認した

pgAdmin4で以下のSQLを実行する

CREATE EXTENSION dblink
;
CREATE EXTENSION pgcrypto
;

Windows10のタスクマネージャーを更新しようとするとエラーになる件

事象

Windows10でタスクスケジューラでタスク編集しようとするといかのメッセージが表示されて更新できない メッセージ内容 「タスク〇〇でエラーが発生しました。エラーメッセージ:1つ以上の指定された引数が有効ではありません。」

f:id:gshota:20210317033745j:plain
タスクを更新しようとするとエラーになる

対応方法

全般タブのセキュリティオプションを確認する。 作者を確認すると「hogehoge¥hogehoge」のようになっている タスク実行時に使うユーザーアカウントは「hoge」のようになっている

f:id:gshota:20210317033922j:plain
セキュリティオプションを確認する

ユーザーまたはグループの変更ボタンを押下して、右下に表示される詳細設定ボタンを押す。次に検索ボタンを押す。検索結果のフォルダと一致するユーザーを選択する。

f:id:gshota:20210317035224j:plain
ユーザーまたはグループを変更する手順

以上

ちなみに別タブに移動したり、ポップアップが表示されたりしたら変更したユーザーがもとに戻ることがあった。変更したらすぐにタスクを確定したほうがいいようだ。何が原因なのかOSの不具合なのかわからないがこれでタスクの更新ができることを確認した。大した内容のタスクでなければ削除して作成しなおした方が良いかも。

CsvHelperでダブルクォーテーション付きのCSV出力をする方法(Ver26)

CsvHelperのバージョンを26に上げたら仕様がだいぶ変わってはまったので備忘録として記録する

この記事で達成できること

  1. CsvHelper ver26でダブルクォーテーション付きのCSVが出力できる
  2. 日本語のヘッダーを出力できる

書き方

/// <summary>
/// ファイル書き込み
/// </summary>
/// <returns></returns>
public void Write(IEnumerable<TModel> WriteData)
{
    var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        //ダブルクォーテーション付きにする
        ShouldQuote = (context) => true,
    };
    using (var writer = new StreamWriter(FilePath))
    using (var csv = new CsvWriter(writer, config) )
    {
        csv.Context.RegisterClassMap<FooMap>();
        csv.WriteRecords(WriteData);
    }
}

Class FooMap
{
    Map(m => m.hoge1).Index(0).Name("ヘッダー1");
    Map(m => m.hoge2).Index(1).Name("ヘッダー2");
    Map(m => m.hoge3).Index(3).Name("ヘッダー3");
}

//出力
ヘッダー1,ヘッダー2,ヘッダー3
hoge1の値,hoge2の値,hoge3の値

説明

// ver15の書き方
csv.Configuration.ShouldQuote = (s, context) => true;

こういう書き方をしている記事は古いのでブラウザバックしてください。 version 15では有効でしたがversion26ではConfigurationがReadOnlyプロパティに更新されたため上記のようにCsvConfigurationのコンストラクタで設定する必要があります。 注意するべき罠はもう一つあってShouldQuote の引数が1つになっていました。 公式サイトに書き方が書いてなかった(私は見つけられなかった)のでだいぶ苦労しました。

日本語のヘッダーを出力するために.Nameプロパティを定義します。 個人的にMapperクラスを定義した方が好きなので、アノテーションではなくこちらで書いています。 Indexで列を指定しないと出力順が保証されないそうです。公式サイトをGoogle翻訳した文章で理解したことなので必要があるかは謎ですが、入れていても問題なかったのでお守りだと思って入れたままにしています。 この記事を閲覧している人には釈迦に説法になると思いますが、「FooMap」「m.hoge1」などは説明上の仮値です。使用するクラスに合わせて変更してください。

資産運用について個人的なまとめ

タイトル

  1. 住宅ローン控除
  2. ふるさと納税
  3. NISA
  4. iDeco
  5. 保険

住宅ローン控除

  1. 控除期間は購入から10年間
  2. 令和2年12月31日までに取得した住宅は合計で13年間控除される
  3. 年末のローン残高の1%を控除する
  4. ローン残高が4,000万円以上の時
  5. 所得税と住民税から控除される
  6. 初年度は確定申告をする必要がある
  7. 次年度からは年末調整すると控除される

国土交通省すまい給付金

ふるさと納税

  1. 節税は投資に比べてリスクがなく効果が大きい
  2. 寄付金額 - 2,000円 = 住民税から控除される
  3. 寄付金額の上限は住民税・所得分割の一割まで

ふるさと納税

iDeCo

「個人型確定拠出年金

  1. 老後のための年金は自分で備えてね。そこ代わりに税制を優遇しますよという制度。
  2. いくら積み立てるか。どんな金融商品で運用するかは選択自由。
  3. 掛け金は5,000円から1,000円単位で選ぶことができる。
  4. 掛け金は年に1回金額を変更することができる。詳しい金額はこちらから
  5. 元本保証タイプ(元本確保商品)と保証なしタイプ(投資信託)がある。保証なしタイプの方が種類が豊富。保証タイプは利率が低く手数料を考慮すると選ぶメリットはない。
  6. 年金制度なので原則60歳まで引き出せない
  7. 受け取りは「老年一時金」で一括で受け取るか。「老年給付金」として5から20年の期間で受け取るか選べる。
  8. 掛け金全額が所得控除対象になる
  9. 運用益も非課税**

iDeCo

NISA

個人投資家のための税制優遇制度

  1. 非課税枠は最大600万円
  2. 運用益、配当が非課税
  3. 一人一口座
NISA ジュニアNISA 積み立てNISA
非課税投資枠 120万円 80万円 40万円
非課税期間 5年 5年 20年
投資可能期間 2023年 2023年 2037年
引出可能時期 18歳

金融庁

保険

  1. 保険は甚大な被害を受けた時のセーフティネットとして考える。
  2. 元が取れないから入らないは間違い。
  3. 掛け捨てより積み立ての方が税制上有利

参照書籍

  • やってはいけないお金の貯め方 大村大次郎 宝島社
  • つみたて投資の教科書

あなたは1日24時間ということを理解しているか

タイトル

自分の時間の感想 1日24時間でどう生きるか

作者:アーノルド・ベネット

訳:渡辺昇一

私がこの本から学んだこと

  1. 怠惰な生活を改める
  2. 1日24時間であることを理解する
  3. ただ始める
  4. 内なる1日を作る
  5. 自分を見つめる
  6. 物知り顔にならない
  7. 向上の芽を大切に育てる

朝の1時間は夜の2時間以上の価値がある

人間の精力を、日常の仕事に全て吸い取られてはならないのである。 もしも、それができないほどに疲れていると言うのであれば、 それは生活のバランスが悪いのであって是正すべきだ。

そのために、日常の仕事で精力を使う前に仕事以外に使うのである。

「朝早く起きる」ことで時間を作る。 睡眠はある程度は習慣の問題であり、怠惰な生活習慣に問題がある。 いつもの1時間から2時間早起きをして、仕事以外の時間をとること。 朝の1時間は夜の2時間に匹敵する 睡眠不足になるようであれば、夜に早く寝ること。

この時、早起きをして、自分にとって大切なことをする時に、 他人の協力をえなければできないと言う考えは不甲斐ない考えであるということを理解すること。 自分の怠惰を他人のせいにしてはいけない。

時間があれば金は稼げるが、金があっても時間は稼げない

1日の始まりには誰でも平等に24時間が与えられる。 あなたはすでに持っているだけの時間を持っているのである。 この24時間は誰からも奪われることはない。 ただ、過ぎ去っていく現在があるだけだ。

人生の全ては24時間の利用の仕方次第で決まる

「もう少し時間ができれば、あれを変えてみよう」 もっと時間ができるわけなどない。我々には今あるだけの時間しかなく、それはいつだって変わらないのである。

人々は時間に対して、焦り、期待、願望、欲望が原因になって不快な思いをしている。

仕事以外に何かをしなければという固定観念があり、そこから不満や焦りが生じる。 仕事以外に何かをやりたいという欲求は、ある程度、精神的に成熟した人たちに共通する。 この欲求を満たすべく努力していたいと、「何かを始めたいのに、始めていない」という焦りの感情が生じ、いつまでも心の平安がえられない。

苦労が多く報われることが少なくても不満を感じないだけの覚悟が必要。 これがないなら「何かをしなければ」と今までの通り惰眠を貪っていればいい。 覚悟ができたならただ始めればいい 来年の時間や明日の時間は手付かずでとっておかれるのだ。 その気になれば、過去は関係なくこれからを変えることができる。 来週や明日を待つ必要はない。今日から始めればいいのだ。

初めから大きな変化を求めない

多くを求めれば、その次にはさらに多くを求めるようになり、そのうち急に疲れが出て意気込みも萎んでしまう。 失敗からは何も得ることはできない。つまらない成功でおおいに結構なのである。

内なる1日を作る

平日の勤務時間をあたかも「1日」であると考え、それ以外の時間は「1日」の単なるエピローグやプロローグであると考えていないか。 1日の3分の2の時間を、単に、3分の1を占める勤務時間に付随している時間にすぎないとしてしまうなら、充実した1日など過ごせるはずがない。

1日の中に労働時間を引いたもう一つの1日を作る。 この内なる1日は全ての物から解放されている。内なる1日を有意義に過ごすことによって充実した人生を送ることができるのである。 「内なる1日に全力を注ぎ混んでしまっては8時間の労働に影響が出るのではないか」と思うだろうが、これはない。 むしろ能率は確実に上がると言っていい。 必要な睡眠を除いて、知的な能力は耐えざる労働を耐えることができる。手足のように疲れることはない。

週3回の夜90分が、あなたの心を豊にする。

毎日仕事でくたくただから、帰ってから酒でも飲みながら動画を見ていたら、もう寝る時間か。 今日もやりたいことができなかった。でも疲れているから仕方がない。

本当にそうか? 仕事終わりに、趣味を行う時や、友人と会う約束がある時も同じように、感じるだろうか。 そう、本当は疲れてなどいないのだ。 この事実を受け止めることで、夜の時間を確保することができる。 ただ、夜の時間を全て「知的エネルギーを使い果たすようなことに使え」というはわけではない。 週3回かつ、半分の時間を有意義になるような時間に使ってはどうだろうか。 この時間は友人との約束のように最優先で確保しなければならない。

毎朝の30分が奇跡を起こす。

やることが何であれ、どれくらい些細なことであれ、やったことには変わりはない。 何かをやり続ける。つまり「習慣を変える」こと

小さな一歩からでないと習慣は変わらない

変化というのはそれが改善のためであっても、必ず不便や不快感を伴う。 今の生活を続けたまま、習慣を変えようとするのは不可能である。 習慣を変えるということは何かしらの犠牲と、強固ないしが必要である。 習慣を変える時に、あまり大きなことを公言せずにさりげなく始めること。 3ヶ月続けることができてから、盛大に公言すれば良い。

充実人生を送るための第一条件

思考をコントロールする。自身の思考はコントロールすることができる。 頭の動きをコントロールすることが充実した生活をする第一条件

どうやるのか。 1日の初めに頭の働き具合を試してみる。 「家を出たら一つのことに思考を集中する」 いろいろなことに気を取られるだろうが、何度でもやり続ける。 辛抱強く続けることで必ずできるようになる。

集中力を高める練習を規則的にやることで、自身の思考をいかなる場所でも、思いのままに支配できるようになる どのようなことを考えれば良いか。 自身の生活信条と実際の行動の関係など、本当に大切な問題について見つめ直す。 幸福とは肉体的、精神的な快楽を得ることだけではなく、自分の生活信条に叶った生き方をするということだ。 自分の生活信条と一致していない人生というのは無意味な人生ということだ。

時間の価値を知ったあなたに待ち受けている危険

ここまでのことを知ったあなたは、1つのことを注意しなければならない。 それは、物知り顔の人間になないことだ。 時間を無駄にせず活用しようとする時に、肝の命じて置くことは、 活用するのは「自分の時間」だけであって、他人の時間ではないということだ。 さらにいうなら自分のしていることなど、あまり大袈裟に他人に話すことなどしない方が良い。 大多数に人間は本当に充実した人生を送ってなどいない。しかし、その事実を大声で言い立ててもどうしようもないのだ。 所詮、人はそれぞれ自分で自分の人生について真剣に考えない限り、本来なし得ることもなし得ないのである。

計画の奴隷にならない

自分で計画したことに奴隷のように縛られてはならないのである。 計画したことは尊重しなければならないが、信仰の対象にしてはならない。 計画は計画にすぎないということを心得る必要がある。

また、欲張った計画を立ててはいけない。 欲張って計画を立てすぎて、次の計画が気になって落ち着いて何かに取り組めなくなってしまう。 自分に余裕がないと感じる時は計画の立て直しが唯一の解決策である。

向上の目を大切に育てる

計画の出だしでつまずかないことに注意する必要がある。 せっかく何かについて学ぼうとする向上の芽も一人前の若木に成長する前に枯れてしまう危険性がある。 そうならないように向上の芽にあまり負荷をかけすぎてはならない。 初めは馬鹿らしいくらいゆっくりたペースで行うこと。 しかし、できる限り規則的にそれを続けること。

終わりに

私がこの本を手に取ったきっかけは、自分について見つめ直したいと考えていたからだ。 生活が変わり、節目の歳を迎えて、漠然とこのままの生活を続けていて良いのか。 何か変化をしなければならないのではないかと焦っていた。 本書から、この焦りは誰でも持っている物であり、自身の幸福とはどういうことか。 それを達成するための方法など、ページ数が少ないながらも大変共感できる内容だった。 私の中に芽生えた向上の芽を枯らさないように大切に育てたいと思う。