Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

ASP.NET MVC5でFileアップロード機能をつくる

ASP.NET MVC5でFileアップロード機能をつくる場合、

実際のところ

Viewのところは、一般的なtype="file"で大丈夫です。

@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new 
                                       { enctype = "multipart/form-data" }))
{
  <!-- ... --!>
    <label for="ImageUpload">Filename:</label>
    <input type="file" name="ImageUpload" id="ImageUpload" />
  <!-- ... --!>
}

該当ViewModelの方で

public class ViewModel
{
    public string ImagePath{ get; set; }
}

で、controllerの方で

// ...
using System.Web; // Server.MapPath()のために必要

// ....


public class UploadController : BaseController
    {
        public ActionResult UploadDocument()
        {
            return View();
        }


[HttpPost]
public ActionResult Action(ViewModel model)
{
    if (ModelState.IsValid)
    {

        var file = Request.Files["ImageUpload"];
        if (file != null && file.ContentLength > 0){
            var uploadDir = "~/uploads"
            var imagePath = Path.Combine(Server.MapPath(uploadDir), file.FileName);
            var imageUrl = Path.Combine(uploadDir, file.FileName);
            file.SaveAs(imagePath);
            model.ImagePath= imageUrl;
        }

    }
}

    }

Fusion360で他ファイルのモデルをリンクさせる

Fusion360で他ファイルのモデルをリンクさせる方法です

こんな画面に一個ついかしてみます
f:id:shuzo_kino:20171106234605p:plain

「現在のデザインに挿入」
f:id:shuzo_kino:20171106234622p:plain

モデルがインポートされるので、角度やら位置を調整します
f:id:shuzo_kino:20171106234629p:plain

元ファイルを更新すると、その旨警告してくれます。
同期すれば、形状が変化。
複数読んでいるなら、まとめて更新されます。

Fusion360で既製部品をインポートしてみる

なんだか導入モデル3DCADツールっぽい感があるFusion360ですが……
なんと既製品のCADデータをインポートする超絶機能がついてます。

実際のところ

「挿入」=>「製造元部品を挿入」
f:id:shuzo_kino:20171105000853p:plain
こんなページがでます
パーツを選ぶ項目
f:id:shuzo_kino:20171105000926p:plain
検索結果が絞り込まれます
f:id:shuzo_kino:20171105001015p:plain
クリックするとメールアドレスの入力
f:id:shuzo_kino:20171105000948p:plain
会社情報の入力
f:id:shuzo_kino:20171105001404p:plain
"To Model Autodesk360"を押すと、ちゃんとポートできます
f:id:shuzo_kino:20171105001839p:plain

一応、一日50種類までって制限はあるようです

Visual Studio 2017 for mac上のNuGetでパッケージを導入

導入してないパッケージをリンク
f:id:shuzo_kino:20171104002149p:plain

/Users/shuzo_kino/Projects/closedXMLsampple/closedXMLsampple/Program.cs(7,7): Error CS0246: The type or namespace name 'ClosedXML' could not be found (are you missing a using directive or an assembly reference?) (CS0246) (closedXMLsampple)

「プロジェクト」=>「NuGetパッケージの追加」
f:id:shuzo_kino:20171104002156p:plain

バージョンがある場合は選ぶことができます
f:id:shuzo_kino:20171104002158p:plain

関連パッケージの認証
f:id:shuzo_kino:20171104002202p:plain

終われば、端っこのメッセージ欄に完了報告
f:id:shuzo_kino:20171104002205p:plain

参考もと

docs.microsoft.com

ボールナット機構について

ボールナット機構は回転運動を直進運動に変える機構の一つです。
トラクターのようなデカイ車のステアリング機構に使われていたりします。
Wikipediaから画像を引用すると、こんな感じ。
f:id:shuzo_kino:20171103234841p:plain

この玉の部分はボールチェーンでなく、一個一個独立した玉です。
ベアリングのデカイのみたいなイメージですかね。
以下の動画では、トラクターのボールナット機構をバラして説明してくれてる動画です。
youtu.be
ある程度ゆるく作って、密着はボールにやらせる感じですね。
玉は軸受の中で循環し続けるようにデザインされています。

とあるオープンソース人型ロボットでは長ネジと軸受をモロに使ってましたが、
多分こういう機構を入れないとグリースまみれで酷いことになりそうです。

Git diffでブランチ間の差分をとる その2: {{branchname}}:{{filename}}記法

shuzo-kino.hateblo.jp
の別版。
" {{branchname}}:{{filename}}"な感じでも差分をチェックできます。
公式のドキュメントを漁ってみましたが、どういうわけか見つかりません。

実際のところ

gobotのリポジトリを例にしてみます。
.travis.ymlの差分を見たい場合
remotes/origin/feature/scan-joystickとremotes/origin/devでは

$ git diff remotes/origin/feature/scan-joystick:.travis.yml remotes/origin/dev:.travis.yml 
diff --git a/.travis.yml b/.travis.yml
index 746fa91..9c7fede 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,11 +1,11 @@
 language: go
-sudo: false
+sudo: required
 dist: trusty
 go_import_path: gobot.io/x/gobot
 go:
    - 1.7.6
-   - 1.8.3
-   - 1.9.0
...

一方、remotes/origin/feature/scan-joystick少し古めなremotes/origin/feature/dronesmithの比較では

$ git diff remotes/origin/feature/scan-joystick:.travis.yml   remotes/origin/feature/dronesmith:.travis.yml 
diff --git a/.travis.yml b/.travis.yml
index 746fa91..efbc719 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,44 +1,33 @@
 language: go
-sudo: false
-dist: trusty
-go_import_path: gobot.io/x/gobot
+sudo: true
 go:
-   - 1.7.6
-   - 1.8.3
-   - 1.9.0
-   - tip
+ - 1.4
+ - 1.5

範囲外の値でdatetime2型から変換できない……とか言われたらnullが入ってるからかも

sql serverAsp.net mvcを使ったアプリでdatetime型をPOSTしようとして

"The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

みたいな事を言われたら、null値が入ってるのが原因です。
何らかの初期値を与えたり、nullを許容する型に設定し直したりすれば良いです