daimac64's blog

50代からのWEBアプリ開発とその他もろもろの備忘録

お気に入りのBluetoothイヤホン

iPhone7 からイヤホンジャックがなくなると噂されていた2016夏に タイムセールで防汗機能付のBluetooth イヤホンを衝動買いしました。 ジムでPodcastを聞くのがメインだったので十分でした。 でも、しばらくしてこのイヤホンで音楽を聴いてみると全然ダメでした。

ある日、TT-BH10をなくした思い、TT-BH16を購入。 小型化、軽量化が進み、音質は格段に良くなり、 運動しながらmp3を聞くには十分でした。 マグネットが非常に便利で失くしにくいです。 TT-BH16が到着してすぐにTT-BH10は見つかりました。

有線のイヤホンは、CKM55を愛用しています。 BaseBoostが苦手で、ClubJazzやEDMを好んで聞いています。 CKM55は空間の広がり方が好きです。

株式会社オーディオテクニカ|一般製品|ATH-CKM55

写真で年齢判定

この冬に

BuriKaigi2017 in Toyama - connpass

Microsoft寺田@yoshioteradaさんがFace APIを紹介されていて遊んでみたいなぁと思っていたが、まだWEBアプリというものがピンと来ていなかった。日経ソフトウェア6月号に特集があったのでとりあえず写経。 今までWEBアプリには、サーバーが必要と勝手に追い込んでいた事が判明。 やはり、欧米人のデータで学習している為か日本人特に女性は若く判定される。

ちょまどの結果にも驚きでしたが、

40代半ばの義姉は、20代をたたき出していました。 FaceAPIを直接たたくのと、How-old.netで結果が異なるのが不思議でした。

Web Application その1

サンプルを作ってみる

  • 空のプロジェクトを作成
  • ControllersフォルダにMVC 5コントローラを追加(Home)

    最初に表示されるHTMLを返すHomeコントローラを追加

どうしてHomeなの?

ASP.NET ルーティングルール

ASP.NET ルーティングでは、URLに指定されたコントローラ名に「Controller」を続けた名前のコントローラクラスを見つけて、URLにしてされたアクションメソッド名のメソッドが実行される仕組みになっている。 ルーティングルールは、App_Start\RouteConfig.csに定義されている。

定義されているルートは、{controller}/{action}/{id}。

URLで未指定(デフォルト)時の規定値は以下の通り。

  • controller → Home
  • action → Index

だから、サーバー名のみでアクセスした時に呼び出されるのが、HomeControllerのIndexメソッドということになる。

自動定義されたIndexアクションメソッドに対応するIndexビューを追加

追加したHomeControllerには、自動的にIndexメソッドが定義されている。Indexメソッドの戻り値は、Viewメソッドになっている。 ファイル名からビューを見つけてHTMLに変換して返してくれるので、Views\HomeフォルダにIndexビューを追加する。

  • HTMLのbody の div に適当な文言を記述し、実行

適当な文言がブラウザに表示されてめでたしめでたしとなると思ったら…

‘/’ アプリケーションでサーバー エラーが発生しました。

<customErrors> タグで “mode” 属性を “off” に設定する」ともっと具体的なエラーメッセージが表示されるそうな。 web.config に以下を追加する

<configuration>
 <system.web>
  <customErrors mode="Off"/>
 </system.web>
</configuration>`

ビュー ‘Index’ またはそのマスターが見つからなかったか…

追加したビューの名前が間違っていました。

TypeScript(JavaScript)を追加する

  • jQueryをインストー
    jQueryってなんだ? JavaScriptのライブラリです。
  • jquery.TypeScript.DifinitelyTypedをインストー
    標準のTypeScriptではjQuery型に対応していないので、 TypeScriptで使用するためのjQueryの型定義ファイルをインストー

インストールしたjQueryを使用することをビューで宣言

インストールされたjQueryは、[Scripts]フォルダにあるので、ビュー(index.cshtml)のhead要素にdropして参照スクリプトを挿入

jquery-x.x.x.min.js

[Scripts]フォルダにTypeScriptファイルを追加(app.ts)

追加したTypeScriptを使用することをビューで宣言

app.tsを同様にビュー(index.cshtml)のhead要素にdropして参照スクリプトを挿入

.ts→.jsに変更されて挿入されます。TypeScriptが変換されたJavaScriptを参照するため。

TypeScriptの中身

<div>要素に文字列を追加するスクリプト

$().ready(() => {

var text = "SAMPLE";

$("div").append(text);

});

TypeScriptが実行されます。

Web APIコントローラも追加してみる

  • ControllersフォルダにWeb API 2コントローラを追加(Hello)
  • HelloControllerにGetHelloメソッドを追加
    ⇒WebAPIのルーティングルールによりURLは、
    /api/Hello/Hello
    ということになる。
    メソッド内でC#のオブジェクトを返すとJSONで返却される。

前出のTypeScriptを、WebAPIを呼び出した結果(JSON)を<div>要素に文字列を追加するスクリプトに変更する。 この呼び出しをAjax通信と呼ぶそうな。方法の名前ね。

ブラウザの開発者向けツール(F12)

DOMを見ることができたり、ブラウザからのリクエストとその応答などを確認できる。 これは、デバッグの強い見方になりそうだ。

デプロイ

とりあえず、インターネット上で動いている。最低限の骨組みが動いた。HTML+CSS+TypeScript(JavaScript)でUIを装飾して、Web API経由で取得したデータを表示するということになりそうだ。なんか作れそうな気がしてきた。
参考にした以下の書籍では、無料のAzure App Serviceに公開している。 WebサーバーでWebDeployを用いている。本当はもっと一般的な公開方法を知りたいが、それはもう少し先の話かな。

はじめてのASP.NET SPA開発入門 (マイクロソフト関連書)

はじめてのASP.NET SPA開発入門 (マイクロソフト関連書)

C# でスクレイピング

VBAでは、ゲキ重だったのでデスクトップアプリにしてみる。

前回の「VBAスクレイピング」でのXPathはそのまま使用できる。

Webページ解析は、「Html Agility Pack」を使って楽する。

これもある程度できたので、作りこみはWebアプリで行うとしよう。

www.atmarkit.co.jp

 

 

 

Single Page Application

Webアプリを作るといっても、20年近く前にHTML+CSSでほんのすこしレイアウトのお手伝いをした程度で、サーバーにアップしたこともない。

20年の時の流れはわからないので、すっ飛ばしてVisualStudioが慣れているのでASP.NET SPAで開発してみようと思う。仕事でWPFアプリを作るときは、MVVMなので、MVCとかデータバインドとかしっくりきそうな感じがある、この本を参考に始めます。本当は、IIS(WinodwsServer)にロックインされたくないので、.NET Coreで作りたいのですが、まずは参考書に従って、.NET Frameworkで。

はじめてのASP.NET SPA開発入門 (マイクロソフト関連書)

はじめてのASP.NET SPA開発入門 (マイクロソフト関連書)

 

.NET Coreについては、平行してこちらを参考にしていこう。

ASP.NET MVCプログラミング入門 (マイクロソフト関連書)

ASP.NET MVCプログラミング入門 (マイクロソフト関連書)

 

 

パッケージ管理システム

まずは、開発環境を整えるところから。

手元にあるPC・MacbookAir・Raspberry Pi2を使っていろいろ試したいと思う。

とりあえず、パッケージ管理システムを用意すると後々便利なようだ。

Raspberry PI2のOSは、Raspian。APTがあるのでよし。

PCは、WIndows7/VisualStudio2015なので、NuGetでよし。

MBA(macOS Sierra)には、Homebrew。なんとなくです。

Homebrewをインストール。

Homebrew — macOS 用パッケージマネージャー

いきなりXcodeのバージョンが古いと怒られたので、Xcodeをアップデート。

次は、proxyでインストールできない。

いつ設定されたかは不明だが、proxy関連の環境変数がサンプルで設定されていた。

http://example.com:8080/

proxy未使用なので、消去する。

$ export http_proxy=""
$ export https_proxy=""

 

Macで開発したいけど...

手持ちのMacは、数年前に中古で購入したMacBookAir Late2010 11inch Core2Duo1.6GHz DDR3 4GB 128GB。当時、地元の家電量販店にソフマップと提携した中古パソコンコーナーがあり、液晶に傷があるとのことで価格は3万円。店員も私も傷は確認できなかった程度だったので即購入。現在でもこの条件ではなかなか入手しにくいと思います。暫くは、仕事で打ち合わせやセミナーでのテキスト打ちに使用していました。

少し時間が取れるようになったので、iOSでアプリも作りたいし、Web開発もしたい。Unityなんかも触ってみたい。でも、Xcodeをはじめ様々な開発環境を試してみるには、容量が心もとない。そんな時、以下の記事を発見。SSDを240GBに換装して、macOS Sierraにアップデート。BOOTCAMPでWindows7もインストール。

3年前のMacBook Airをたった5分で爆速に変身させる大容量SSD|Mac - 週刊アスキー