tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

【ASP.NET MVC】MVC2とMVC3以降のバリデーションの挙動がちょっと違う

技術ネタ。

あまり知ってても知らなくてもどうでも良い技術ネタ。

web.configに以下のコード書くと勝手にバリデーションしてくれて便利だよ☆ってやつなんだけどMVC2MVC3の挙動が違いすぎて「は?」ってなった。

<configuration>
  <system.web>
    <httpRuntime requestValidationMode="2.0" />
  </system.web>
</configuration>

MVC2でquerystringに危険なコードが埋め込まれた場合は以下の500エラーが発生

System.Web.HttpRequestValidationException: 危険な可能性のある Request.QueryString 値がクライアント (="...T 1,NULL,'<script>alert("XSS")...") から検出されました。

MVC3だと普通に200オッケー。

バリデーションされてねーじゃん!って思っでquerystringからMVCにぶっこんでみたら500エラー発生。ちゃんと出来てる。。

ようわからんからいろいろ調べたらMVC3以降は.NETFramework4系に移行して挙動も違うんだと。
最新のHttpRequestValidat‌​ionExceptionがパラメータで検知した段階でエラーを出す仕様みたい。

まっ、普通に200でいいよね

【Angular4】[innerHTML]で埋め込んだタグのイベントを拾う方法

技術ネタ。電車でブログってるから技術ネタが書きづらい書きづらい。

angular4にて、innerHTMLで埋め込む必要があってaタグとかぶっこんでるんだけどイベントが取れない。

以下のようなコードを入れたんだけど普通に無理だった。

import {Component} from 'angular2/core';

@Component({
    selector   : 'sub-child',
    template   : '<form [innerHTML]="html"></form>'
})

export class SubChildClass
{
    private html:string;
    private buttonText:string;

    constructor()
    {
        this.buttonText = 'A new button';
        this.create();
    }

    private create()
    {
        this.html = "<button (click)='new() '>" + this.buttonText + "</button>"
    }

    private new()
    {
        this.buttonText = "Text Changed";
    }
}

余裕で(click)='new()がかき消される。

domでいろいろやれば出来るけどクソめんどいよって記事がstackoverflowにあった(英語だけどそんな感じで書いてあった、リンク忘れたから今度はる)んでクリックイベントを取ってそこから処理を書く方法に変更。

HostListenerってやつ使ってクリックイベント取ってdomる。

///宣言
import { Component, HostListener } from '@angular/core';

// clickイベントを宣言
@HostListener('click', ['$event'])

onClick(event) {
 //ここでいろいろ
}

いやー感覚でangular4いじってたけどこれは感覚じゃわからんかったー。angularくそおもしろい

参考
https://stackoverflow.com/questions/35210072/angular-2-add-events-to-elements-after-the-dom-has-been-created

駐禁放置しまくってたらヤバイことにならなかった話

駐禁3年間放置(無視してたわけじゃないよ!家に通知来なかったんだよ!)

経緯:
夜中の横浜で適当に車止める。

駐禁貼られる

キップはその場で切らない←これ絶対やらなきゃダメ!(最後説明する)

紙なくす

三カ月後、不安になり支払いに行くがめんどくさがられ家に来るのまちなと言われる

一年後、再び駐禁取られる

前回の駐禁に対して何も言われない

安心する

警察完全にミスってると俺完全大勝利を確信する

車検通らない

車検証が以前の住所(警察は探さないらしい

支払い←イマココ

延滞金が10万とか行くかなとガクブルしてググる。調べた結果、それなりで安心した。計算式は以下。
(罰金×日数×14.5%)÷365
俺の場合だと大体これ
(15000×1095×14.5%)÷365 = 6525
6525+15000=21525


結果、違反金は15000で済みました!

理由とか放置車両とかいろいろ理由があれば延滞金かからないらしい正直者が馬鹿を見るよ!!

この「正直者が馬鹿を見る」ってのがキモで駐禁のキップ切ると以下のようなことが起きる

駐禁取られてその場でキップ切る
→二点減点+15000の罰金

駐禁取られて家に来るまで待つ
→15000の罰金のみ

なんでかって理由はわからないけど、所有者以外が取られたのに所有者に減点させるのがおかしいとかそんなことだろう。

まぁ、どっちもおかしいんだけどな!

賃貸をボロボロにしたのに敷金が返ってきた

最近、技術的なブログ書いてねー。

以前住んでいた家の敷金が結構戻ってきてびっくりしたので、なんで返ってきたか分析してみるよ!

ちなみにボロボロにしたって書いたけどやらかしたのは以下。
・キッチンの戸棚を剥がした
・椅子で壁がえぐれてる(一箇所)
・壁紙が一部剥がれてる
・襖が粘着テープでちょっとベタベタ
・床が椅子を引きずったようなあと多数

1.古い家に住んでいた

築25年の木造アパート。見た目とかはそんなヤバくはないんだけど、色々古い感じがある。もう古いし借り手が多いわけではないから修復費を取らないんじゃないのかな?ちなみに新築住んでいた友達は俺より綺麗にしてたのに追加で取られたみたい

2.敷金払ってた

当たり前なんだけど、敷金払わないと返って来ない。

3.常に部屋を綺麗にしてた

引っ越し当日もそこまで掃除しなくてもある程度綺麗だった。風呂場も当然綺麗。

4.家関係のもので故障したらすぐ連絡した

一年半で6回クレームいれた。ちょっと気になったらすぐ電話。ちょっと気になったらすぐ電話とこまめに家のメンテナンス(ただのクレーム)してた。エアコンも新品に取り替えてくれた壊れてないのに。

5.退去時、お菓子と挨拶に行った

大家にあったことないけど、ちゃんと挨拶に行った。あと結婚しますとか言うとまともな人感出るのでわりと免除してくれるかも。まぁ、関係あるかわからんが。

ちなみに敷金の5割戻ってきました(完璧でも6割しか戻らない」

【C#】バッチアプリケーションのエラーハンドリング

今更バッチアプリケーションのエラーハンドリング。

従来のtry catchじゃなくてほかのやり方があったよっていう話。
業務システムはもちろんWEBアプリの裏側の運用でも結構使うハズなので書いてく。

通常のエラー処理は以下

try
{
    // 何らかの処理
}
catch (Exception ex)
{
}

おっけい。もちろんこれでおっけい。

しかしルールを決めずにこれを基準としてエラー処理をするとこんなことが起きる。

public void Main()
{
    try
    {
        testMethod();
    }
    catch (Exception ex)
    {
    }
}
public static void testMethod()
{
   try
   {
       // なんらかの処理
   }
   catch (Exception ex)
   {
   }
}

もう発狂しそうだけどもっとひどいことが起きる

static void Main(string[] args)
{
    try
    {
        testMethod();
    }
    catch (Exception ex)
    {
        // Mainプログラムでエラーが発生しました的なログ出力
    }
}
public void testMethod()
{
   try
   {
       // なんらかの処理
   }
   catch (Exception ex)
   {
       // testMethodプログラムでエラーが発生しました的なログ出力
   }
}

絶望の「予期せぬエラー。。。」
悲しいことに結構存在する。意味不明だし、どんだけメンテ必要なの!?って

でConsoleアプリケーションでもMVCのOnException的なのないかなーと思って
探したらあった。

UnhandledExceptionイベントハンドラを追加

static void Main(string[] args)
{
    // UnhandledExceptionイベントハンドラ
    System.Threading.Thread.GetDomain().UnhandledException += new UnhandledExceptionEventHandler(Program_UnhandledException);

    throw new Exception("Error");
}
public static void Program_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Exception ex = e.ExceptionObject as Exception;
    // ここでエラー処理
}

例外発生したら捕捉してなくともイベントが発火するのでいちいちtry catchする必要がない。
stack trace取れてエラーの原因がすぐにわかって便利だねってやつ。
まぁ、あんま調べてないからどこまでstack trace取れんのかわからんが基本ベースはこっちでいいと思う。

参考
https://msdn.microsoft.com/ja-jp/library/system.unhandledexceptioneventhandler(v=vs.110).aspx

20代で車を買って良かった話

去年、車を買った。
最近の若者は真面目だから車買ったことによるメリット、デメリットを考えすぎて買わない方向に行くと思うんだけど、圧倒的に買ったほうが良かったと思ったのでいろいろ書いてく。ちなみに私は買わなくても良いってずっと思ってた。

1.車を買って生活に困ることはない!
車買うと月々の支払いが高いとか税金ガーとか車検ガーとかあると思うけど、良い車買わなければそんなん気にせず乗れると思う。ちなみに僕は以下。

車:1300cc
乗り出し:65万(一括)
車検:4万ちょい(ユーザー車検
税金3万5000ぐらい
月々:保険6000ぐらい(車両保険いらないポンコツ車だから)駐車場一万
ガス代:月5000(年間1万キロペース)
普通の社会人だったらそんな辛くないでしょ。ちなみに実家じゃないからいろいろかかるけどわりと余裕。

2.周りの見方が変わる
老害みたいに車はステータスとは言わんけど、自立した第一歩として見られるパターンが多い。親とか親友達とか子供の時から見てくれてるから立派になったねと思ってくれる人が多い気がする。親を安心させるツールとして良い。

3.嫁の機嫌が良くなる
駅まで迎え行く。だいたい喜ぶ。迎えに来てもらう。だいたい乗り気。スーパーとか家具とかいろんな店行ける。マンネリ防げる。

4.友達との交流が広がる
男同士だと計画して何をやろうとはなかなかならない。だからぷらっと出かけて思い出が作れることが多い。

5.車維持出来る自信がない。。
タイヤとオイル交換を気をつけてれば何も問題ない。ディラーが車検でいろいろ言ってくるけど、ユーザー車検なんてクソ適当だから光軸さえ気をつければだいたい通るよ。

6.都内、首都高は怖くない!
何も怖くない。普通に走ってれば違反取られないし、そんなに事故ることもない。事故は運が悪いか無茶したかの二択なのでそんなに恐れず運転しよう!

7.高級車ぶつけたら。。。
保険で大丈夫。保険でなんとか出来ない車が普通に走ってることはないはず。たまにマセラティとかシボレーとか走ってたりするけど保険でなんとかなるはずだよ。ただし名前の怪しい保険会社は気をつけてね!

買って良くなかったなーって思ったとこ

1.スポーツカー買えば良かった。。
いや5人も乗らねーよ!乗るときはレンタカーで良いよ!ロードスター、rx8らへんはわりと安いの流通してる。いやかっこいい車最高だよまじで。ただし、180、シルビア、チェイサーあたりは絶対買っちゃダメ。

2.都内に行きにくい
いや電車で行けば済むんだけどね。

3.いや、悪いことねぇわ笑

結果、買って悪いことはなかった。身の丈の車を買えば余裕で維持出来て良いことずくめなので問題なし。身の丈にあった車買って維持出来なくて詰みそうだったらそもそも生活を見直す(仕事とか普段の金遣いとか)必要があるのでそっちを見直しましょう。

ps:私は27です

ちゃんと教育しないと新人エンジニアは育たないことを知った

クソ偉そうだけど、5年社会人経験してて4年間教育係りをやっている。転職して2社目だけど、1社目と比べて今の会社の新人が育たなすぎる傾向にある(今の方が圧倒的に勉強になる環境にいるのに)から分析してみる。

1社目の教育
・一カ月本を読まされる。
・一時間に一回、ブラザー来るので「〇〇学びましたー」って言っとけば良い(ちゃんと質問されても答えられるようにね)
・基本クラサバ。
・2〜3カ月はひたすらブラザー付き。csv取り込みsql追加とか一瞬で出来るようなことをやらされる。
・配属、そのまま業務。
・基本情報を取らせようと煽る

2社目の教育
・入社前にhtmlとjsやらされる。基本ネットに載ってるコピペですむやつ作らされる(中途はやらされない)
・入社してすぐ配属。mvcc#を同時に学ばせる(業務やらせるしね
・他のソースをコピペしてなんとかさせようとする
・だいたいすぐ詰む
・半年たってもフロントとサーバーサイドの違いがわからない

今の会社との違い
・クソつまらない本を長時間読ませる(基礎を教える)
・コピペが使えない
・開発環境のポンコツ(シンプル)
・クソつまらない仕事を長時間させる(基礎を固める)
・資格を意識させる
・ものづくりファースト

プログラムは参考書の一行読めば1000行のプログラムを読めることもあるし基礎を反復練習させることはすごく大事。初めからいろんなことをひたすら詰め込むとだいたいその場しのぎになって結果何も出来ない人になる(学生時代勉強した人とか入社前頑張った人を除く)。

結局エンジニアは「やった!動いた!」の成功体験を繰り返してくことで初めて次のステップアップ出来るので地道にちょっとずつ積み上げてくのが一番理想なんだろうなと思うこの頃