tekitoumemo’s diary

技術系だったり車だったり学んだことを書いてく

お金の使い方がわからないやつなんなの?

嫁の愚痴シリーズ第2弾

嫁はほんとうにお金の使い方が下手くそ。っかあったら全部使う。こういうお金の使い方してるとなくなるよ!ってのを教える。

すぐ浮かれる

いいことがあったから贅沢!友達と遊びに行くからこのご飯食べに行く!これが不便だからこれ買う!

まず懐考えてからものを買うよね。月にどれだけのお金が使えるか把握して多少なりの計算してくれねーかな?記帳するだけで全然変わるんだけど。

ないものをチートで増やす

驚きまくったのが引っ越し。さすがに僕も貯金に手をつけるの嫌だったし二人の引っ越しだから7:3ぐらいで割ったけどそれがまぁ驚き。

俺「少し出してくれる?全部はさすがにしんどい」
嫁「いいよ!いくら必要かな?」
俺「○十万ぐらいかな?あとは出すよ」
嫁「わかった!」
俺「っかそのお金あるの?」
嫁「ない!お父さんに借りる!」

は?

っか何年働いてんじゃ馬鹿たれ。一人暮らししてて車買った俺ですら余裕であるわそんぐらいの金。そのあと怒ったらガン泣き。なんなんこいつ。 一生返さない模様。

御礼したがり

これは良いところなのかもしれない。
婚約指輪を買った時の話

嫁「ありがとう!ずっと大事にするね!」
俺「うん、余裕で大事にして」
嫁「御返ししなきゃ!なにが欲しい?」
俺「ホイール」
嫁「時計とかスーツとか買おう!」
俺「お金あんの?」
嫁「ボーナス!」

そこをあてにしてんのか。。うちの会社ほとんどボーナスないだろ。。

※結局、ボーナスほぼなかったのでお母さんが御礼するという始末。。

いいとこのお嬢さん

まぁ社長令嬢とかそんなんじゃないけど、有名大学出でそれなりの生活をしてきた人。周りが超大手とか外資とかザラなので感覚が狂ってるっか嫁がおかしい。超大手とか外資とかお金ガンガン使ってると思ってるから普通にバカすぎ。

そういつ奴らはちゃんと考えるから!

お金がないのを結婚式のせいにする

嫁「今月は結婚式が多かったから〜」
嫁「結婚ラッシュなの!」
嫁「出産祝いとか!」
嫁「誕生日も!」

俺もあるわ。月3回あったときはしんどかったが、計画できんだろ馬鹿たれ。


お金は俺が管理しよう。。

エクセルやアナリティクスぐらいどの職種でも扱えるようにして欲しい

愚痴、かなり愚痴。

小さな会社なので分析系もちょくちょくやるんだけど、エクセル使えない、アナリティクス見れないで結構ウンザリしてる。エクセルは使いたくないけど、他業種の人との共通フォーマットだからしゃーない。

sumしか使えないやつなんなの?

要求されたデータを出して、「このデータからこういう傾向あるものを見たいからデータ出して」ってよく言われる。マクロとは言わんが、関数ぐらい使えるようになれや。一個一個見てる光景に耐えられなく、僕がエクセルするハメに。

ここの離脱はどうなってんの?

俺はアナリティクスじゃねぇ。覚えてねぇわ。離脱ぐらい簡単な条件だったら一瞬で見れるわ。っかアカウント持ってんのに調べるとか考えねぇの?アナリティクスの結果をエクセルにハリハリしてるとかもぅ勘弁してくれ。。

何も出来ないのにガタガタ言う

データを出せないと割り切ってるから、人の分析結果に対してガタガタ言う。

俺「結果、直帰と離脱が○%だから○人の機会損失してます」
他「この結果本当なの?ここは気にならないって言ってたよ!」
俺「いや、実際にデータとして出てるからこういう傾向は少なくともあるよ。。」
他「そこじゃなくて他に原因がー」
俺「じゃあそこの原因調査お願いします。」
他「調べて!」

まじなんなのこいつ。

まじ、僕レベルの分析結果なら中学生でも出来るわ!

そもそもエクセルって誰でも使えるんじゃないの?

グラフ出せないとか集計出来ないとか話にならないから。就活時によく言ってるコミュニケーション能力とかも大事だけど、自ら考えて工夫する力ってかなり大事だと思うんだけど。

コミュニケーション能力とはなんなのか?

コミュニケーション能力あるから他にはいらない!とか豪語してるけど、ベラベラ喋って文句たれてるだけじゃなにも力にならんわ、邪魔なだけ。「分析してるから!」とか言ってるけど、客の言ってることを噛み砕いて適当いいやがって。

マジでなんなの?

これ





嫁に対する愚痴です。

【C#】Listになってるクラスのプロパティを一行で変える

小ネタ、めっちゃ小ネタ。みんな大好きLINQを使います。

Listのクラスのプロパティを一括で変えたいってときがあると思います(割と)そこでプログラム書きたくない主義の僕はふと思いつき調べたんで書きます。

まずは普通に一括でhoge1を1にします。

public partial class Hoge
{
    public int hoge1 { get; set; }
    public int hoge2 { get; set; }
    public int hoge3 { get; set; }
 } 

var models = new Hoge();
// モデル生成部分は割愛
foreach(var m in models)
{
     m.hoge1 = 1;
}

なんかつーか微妙だよね。このレベルだったら一行で描きたいよね。ここではLINQを使います。

public partial class Hoge
{
    public int hoge1 { get; set; }
    public int hoge2 { get; set; }
    public int hoge3 { get; set; }
 } 

var models = new Hoge();
// モデル生成部分は割愛
models.Select(m => m.hoge1 = 1).ToList();

はい、一行で終わりです。ここでのポイントはToListにしないとモデルの値が変化しないこと。LINQの評価はIEnumerableに要求があったときにされるので何かしら要求しないとただ単に内包したオブジェクトが出来上がるってだけ!

さらにif文とかでなになにだったら値を入れるみたいなことをしたいときあると思います。それが下の例

// 動確してません!スマホで記事書いてるし!!
models.Where(m => m.hoge2 == 1).Select(m => m.hoge1 = 1).ToList();

hoge2が1の場合だけhoge1を1にする(1って言い過ぎだろ。。)一行で終わり。

このようにメソッドチェーンで繋いで結果を得ることが出来ます。今回のケースでなくてもLINQではいろんなことが出来るのでどんどん使っていきましょう!

※乱用はダメ。ただのforループって認識でいると乱用してる恐怖がわかるはず

【C# + MVC】CustomAttributeでパラメータを扱う

技術ネタ。

CustomAttribute便利ですよね。プログラムは大好きなんだけど一行でも少なく書きたい主義の僕にはひじょーに素敵な機能です。

パラメータでちょっと動きを変えたい!セッションで持つほどじゃないけどちょっとだけ!!

ってことは割とある?と思うので小ネタを。Areas使うときなんかは結構嬉しいと思う。

まずは普通のCustomAttribute

// HogeController.cs
[HogeAttributes]
public ActionResult Index(string param)
{
    return View();
}
// HogeAttributes.cs
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    // いろんな処理        
    base.OnActionExecuting(filterContext);
}

この例でいくとparamの値によっては違うとこにリダイレクトさせたい!とかあると思います。

その例が以下です。

// HogeController.cs
[HogeAttributes]
public ActionResult Index(string param)
{
    return View();
}
// HogeAttributes.cs
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    // Parameters can be acquired with custom attributes.
    var param = filterContext.ActionParameters["param"];
    // いろんな処理        
    base.OnActionExecuting(filterContext);
}

ActionExecutingContextのActionParametersにメソッドの引数のパラメータ名を渡すと取得出来ます。keyvalueで入ってるので引数の名前変えると落ちます。

このやり方が良いかはわからんが、割と便利なのでオススメです。

【C#】Dapper使ってりゃ間違いないよ

だっぱー


C#のデータアクセスはいっぱいあるけどチームで使うなら結構最適なORマッパーじゃないかなと思い始めてるので、Dapeerの良さについて語ります。

ちなみにチームと言っても色んな人種(年齢やら経歴やら)がいるチームにDapeerは最適だと思ってるのでORマッパーマッパーしてる人ばかりだったらPetaPocoの方が良いです〉ぺたぽこ
そしてMS標準のEntity Frameworkは開発当初から捨て去りましょう。
型付DataSetとか記憶から消し去りましょう。


それではDapperの良いところを語って行きます。

早い、とにかく早い


この記事を見てもらうと一目瞭然。EFとか終わってるでしょ。EFとかでもやっていけるよ!って人に言いたい。パフォーマンスの調査をするときにどっちが原因かわからんでしょ。無駄に工数かかるし、パフォーマンス調査の結果、「だっぱー」だね!ってなるんだからとりあえず選んどいて損はない

実績豊富

ラニさんが使ってる。

大型サイトでの実績があり、安定感バツグン。シンプルってのはこういうとこが良いね。無駄な調査しなくて良いし無駄にStackOverFlowを漁らなくて良い。

※CEOの河合さんに会ったことあるけど、天才。恐ろしいぐらいオタク。本当に一緒にお仕事させて頂きたい。

SQLを結構書く

これは賛否両論、むしろ生SQLを書くのは良くない風潮があるんだけど、40代以上の人はちょっと抵抗ある人が多いっぽいから生SQL書けるって良いなと思った。SQLは必ず通る道で誰でも知ってると思うので、学習コストが低いってかなり良いと私は思います。ORマッパーはデータアクセスのめんどいとこを差っ引いて使えるってのが魅力だけど、チーム全体で使えなければ開発効率もクソもないかなと思ってるんで生SQLを書くのは否定しません(2017/11月現在)。でもね、クエリビルダーのとかその他諸々の良さは知ってる、来月あたりに人間変わったように否定してるかも笑

daynamicが最強

ORマッパーの三種の神器(もっとある)としてデータマッピングがあるんだけど、むしろデータマッピングすらいらないじゃんって仕様がC#にはあります。C#コンパイラ言語なんだけど、.Net4.0からdaynamicが使えます、要はインタプリタが使えるので、マッピングしなくても使えます。無駄なクラス作る必要ないし、型を変更したときとかクソ楽ってか何もしなくて良いレベル。
こんな感じで使える。

dynamic dynamicObj = connection.Query("SELECT id, name FROM table1 LIMIT 1").FirstOrDefault();
Console.WriteLine("Id: {0}", dynamicObj.id);
Console.WriteLine("Name: {0}", dynamicObj.name);

ヤバくね?
インテリセンス使えんとかコンパイラでエラー検知出来ないとかタイポでバグるとかいろいろあると思いますが、テストは必ずやってるのが当たり前だと思うので、悪い点が見つかりません。C#はこんな感じで小賢しい天才機能があるので大好きです。

Dapperはあくまで経験が多い人も少ない人もいるチームで円滑に開発を進めるためのライブラリなので、技術好きで上級者は他のライブラリが良いかもしれません(僕も自分で作るならDapper使いません)初心者向けではありますが、いろんなこともできるので奥が深くて使いがいがあるライブラリなので、迷ったら是非使ってみてください。

後日談
Entity Frameworkを見てみると全然悪くない。っか良い要素が多過ぎて知らないくせにいきがってた感があります。批判するときはちゃんと調べましょう

DIYをする上で知っとくべきこと(知識編)

私はDIYが趣味で家の家具のほとんどが自分で作ったものになります。ここ五年近くやってきていろんなことを知ったのでここに書きます。

私の作った作品の一部を貼ります

結構イケてね?

DIYって道具必要で大変だしやる場所がないよ!って言ってる人のために出来るだけ敷居が低くやれるよ!ってのを伝えたいと思います。

まずはこれを買ってください

GREATTOOL 6pcs. ショートタイプ下穴錐 GTTS?6

GREATTOOL 6pcs. ショートタイプ下穴錐 GTTS?6

ドリル
これないと基本何も出来ない。手動は基本無理。これはもっとショボくていいかもしれない!高いに越したことはないけど、私はこれを使ってます。
下穴ドリル
ドリルにつけるドライバは付属で付いてるのでこれだけでまずは事足ります。下穴入れないと木が割れるので必ず必要。しかも下穴あけるとかなり楽。
巻尺
DIYの魅力の一つとして、ピッタリ合う家具が作れること。必ず必要。

次に木材に色を付けましょう

ちっちゃくていいよ!オイルステインは全然減らない!
素人でも簡単に綺麗に塗装出来る!すぐ乾く!初心者はナチュラル買いましょう、これはどんなものでも綺麗な色が出る。

【知っとくべき】木材の種類を理解しよう!

まずは集成材。こんな木。

木の節目がなくていろんな木材を結合して一枚の板になってる。DIY感出なくて本物の家具みたいな完成度になりやすい。加工されてるから下処理もしなくて良い(私はしますが)し、木目の色味が綺麗に出てかなりオススメ。さらに様々な木が結合されてるからしなりにくいのは本当に最高。でもそれなりの値段するのでニトリとかで買ったほうが安くなるケースも。

次はSPF

2x4(ツーバイフォー)とか1x4(ワンバイフォー)とか呼ばれる。木の節目があって味のあるものが出来上がる。サイズも豊富で木材の強度もある。加工もしやすいし割れにくいから初心者でも完成度は見込めるよ!とりあえずめっちゃ安い、2x4の1.5メートルで300円台とかざら。

覚えておいて損はないベニア板
壁板とかの下地に使われることが多い。私の場合はDIY感出したくないのでベニア板を使って隠すことが多いです。
こんな感じ。

天板とか集成材だと高いのでちょっと厚いベニアで対応したりする。ベニアもいろいろあるのでその説明は割愛。

最後に、DIYのコツは

頑張らないこと

素人はどうしても歪んだり失敗したりするので難しいことはやらないほうがいいです。机の脚とかIKEAで買って天板だけ付けたりとかニトリのカラーボックスに板乗っけてカウンターキッチン作ったりとか既存の家具を加工したほうが失敗しません。

気楽にやりましょう。

【.NET】jenkinsでnugetパッケージを復元してMSBuildする

技術ネタ。久しぶりすぎる。調べたことを書きためようと思い掘り出してたら一年前の技術ネタが出てきたから書いていく!

jenkinsでMSBuildするとnugetが復元出来ない。VisualStudioでは出来てたのにーウキーってなったけど、まぁ普通にMSBuildとnuget関係ないし当たり前だよねって話。

その前にMSBuildとdevenvの説明を簡単にする。

MSBuild

Microsoftのビルドツール。標準で入ってる。え?説明簡単すぎ?

devenv

IDEを操作するツール。要はVisualStudioを操作出来るよ!ってやつ。VisualStudioのビルドはこれを使って実行される(厳密にはMSBuildだけど)

話を戻して、jenkinsではMSBuildビルドのプラグインしかないので、コマンドラインからdevenv使ったらいけんじゃね?と思って試した。
devenvの実行方法は以下。

cd {devenv.exeのパス}※PATH通してもOK
Devenv "対象のsln" /Rebuild debug /out {ログのパス}

結果、nuget取れない。
VisualStudioいろいろやってんのかよ!なんだよ!優秀だなーと思いながら他の方法を試す。

nugetCLIってのがあった。

まずはプロジェクトにnugetCLIを設定する。

下のリンクわかりやすいね。
http://dany1468.hatenablog.com/entry/2013/04/21/114228

次にnugetCLIでパッケージを復元する

cd {package.configが入っているディレクトリ}
{nuget.exeのパス} restore -SolutionDirectory {対象のslnが入っているディレクトリ}

復元するパッケージはpackage.cofigに書かないと取ってこれない。書き方は以下(自動生成されるけど手動でもおっけぃ)ちなみに複数バージョンは入れられません。

 <?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="AjaxControlToolkit" version="4.1.60623" targetFramework="net452" />
</packages>

MSBuildでビルド

MSBuild {ビルドするソリューション}

オプションは調べてね。

jenkinsに設定

http://cointoss.hatenablog.com/entry/20111213/1323702126
http://mk3008net.hatenablog.com/entry/2015/03/29/124511
実際、上記の記事見たわけじゃないから参考になるかわからない。