OmniAICreator/Qiita-1.07M huggingface dataset:
Vue.js URLからハッシュを除去してURL直接指定で表示（History モード）

# はじめに
vue.jsのプロジェクトはデフォルトだと、URLにハッシュが付く（例： http://localhost/#/abc ）が、それをやめて、直接指定URL（例： http://localhost/abc ）にしたものをサーバーで公開する方法についてです。
catch-allフォールバックしていない状態で、サーバーに公開すると404になると思うので、それの回避策でもあります。

# 背景
vue routerの公式ページの[Native Node.js](https://router.vuejs.org/ja/guide/essentials/history-mode.html#native-node-js)にやり方が書いてあったが、それだと動かず、[Node.js (Express)](https://router.vuejs.org/ja/guide/essentials/history-mode.html#node-js-express)　でやったが、やり方の説明が簡潔すぎてすぐ出来なったので、この記事に残しておこうと思いました。。
→ vue.js のgithubに[プルリクエスト中](https://github.com/vuejs/vue-router/pull/2405)

# やり方

## vue.jsの自分のプロジェクトをプロダクションビルド
npmだったら

```terminal:terminal
$ npm run build
```
とかだとおもいます。これで `dist`フォルダにビルドしたvue.jsプロジェクトが展開されると思います。

## node.jsのプロジェクト作成
適当なフォルダを作って、そこにnpmプロジェクトを作ります。

```terminal:terminal
$ mkdir express_project
$ npm init
```
色々聞かれますが、適当にenterしていきます。
その後、
さきほどビルドしたvue.jsの `dist`フォルダを このexpress_project内にコピーします。

## Expressなどインストール
Webサーバー用にExpress、catch-allフォールバック（404をindex.htmlで処理する）用にconnect-history-api-fallbackをインストール

```terminal:terminal
$ npm i express connect-history-api-fallback -s
```

##　node.jsのコードを書く
　catch-allフォールバックしながら、distフォルダを3000ポートでListenするためのコードを最小限で書く。

```terminal:terminal
$ vim express_project/app.js
```

```js:app.js
const express = require('express')
const history = require('connect-history-api-fallback')
const app = express()
const server = app
    .use(history())
    .use(express.static('dist'))
    .listen(3000, () => {
        console.log('Node.js is listening to PORT:' + server.address().port)
    })
```

この時点でexpress_projectフォルダ内は下記の様な感じになっていると思います。

```
express_project
├── dist
│   ├── index.html
│   └── static
├── app.js
├── node_modules
├── package-lock.json
└── package.json
```

##　実行
```terminal:terminal
$ node app.js
```

これで、
http://localhost:3000/abc
でも意図したものが表示されると思います。

###参考
* https://router.vuejs.org/ja/guide/essentials/history-mode.html
* https://github.com/bripkens/connect-history-api-fallback
* http://expressjs.com/ja/starter/static-files.html
* https://qiita.com/uwettie/items/3766c7b3fb106e36f5df
 * 近いことを書かれているので、書き方を参考にさせていただきました:bow:
WEEKDAY関数で簡潔に土日を判定する（WEEKDAY関数の第2引数）

# はじめに

> [WEEKDAY 関数 - Office サポート](https://support.office.com/ja-jp/article/weekday-%E9%96%A2%E6%95%B0-60e44483-2ed1-439f-8bd0-e404c190949a "WEEKDAY 関数 - Office サポート")]

Excelなどで日付から曜日を判定したいときは、WEEKDAY関数を使用する。

```
WEEKDAY(シリアル値,[週の基準])
```

第1引数に日付、省略可能な第2引数には週の基準となる予め決められた整数を指定する。

第2引数を省略した場合は、日付に応じて以下の値が返される。

| 曜日 | 値 |
|--------|---|
| 日曜日 | 1 |
| 月曜日 | 2 |
| 火曜日 | 3 |
| 水曜日 | 4 |
| 木曜日 | 5 |
| 金曜日 | 6 |
| 土曜日 | 7 |


私は第2引数の用途を長らく理解していなかったが、最近ある処理を考えたときに、第2引数を上手く使うと簡潔に書けることがわかった。

# 土日を判定する処理

例として、`A1`セルに日付が入っているものとする。

## 愚直にやる場合

```
=OR( WEEKDAY(A1) = 7, WEEKDAY(A1) =1 )
```

上記の表によると、土曜日は`7`・日曜日は`1`となる。
そのため上記のように、2回WEEKDAY関数を使用してOR関数で判定する。

## 第2引数を上手く使った場合

```
=( WEEKDAY(A1, 2) >= 6 )
```

第2引数に`2`を指定すると、返される値が以下の表のように変化する。

| 曜日   | 値 |
|--------|----|
| 月曜日 | 1  |
| 火曜日 | 2  |
| 水曜日 | 3  |
| 木曜日 | 4  |
| 金曜日 | 5  |
| 土曜日 | 6  |
| 日曜日 | 7  |

この時、土曜日は`6`・日曜日は`7`となり、**連続する値**になる。

結果として、○○以上という1回の判定で複数の曜日（今回は土日）に合致するかどうかを判定できる。
おまけ：stair captionsを試してみた


## おまけ
stair captionsでいくつか試して見ました
キャプションの付け方の例として以下のページから検索できるようになっています。
なんとなく３番目の画像のキャプションは日本語としてなんとなく違和感を感じます。いや、間違ってはいないんですが・・・
http://captions.stair.center/explore/
<img width="972" alt="スクリーンショット 2018-07-02 12.52.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/205490/220048d2-6783-7505-a0ef-82abf2362535.png">


早速、試して見ましょう
http://captions.stair.center/demo
___
### ループ系
![スクリーンショット 2018-06-28 19.39.47.png](https://qiita-image-store.s3.amazonaws.com/0/205490/786a4d42-c8e4-c398-08d5-551c585cba29.png)
再帰的赤ちゃん
背景に反応したのでしょうか

![door.png](https://qiita-image-store.s3.amazonaws.com/0/205490/5a875be6-bf50-6000-7cd6-3e43cef54769.png)
マトリョーシカ状態
___
### 大量検出系
![tai.png](https://qiita-image-store.s3.amazonaws.com/0/205490/f655c581-54a9-0790-6f62-0c69d4f81e68.png)
![pen.png](https://qiita-image-store.s3.amazonaws.com/0/205490/d7ead550-4226-0328-53dd-ec02816f649d.png)
複数の物体を見つけると全てにキャプションをつけようとするのか、文章がすごいことになります。
「AがBで、CがDである」というキャプションのルールなのか、三つ以上の物体を判定した時に文章が崩れやすい印象を受けます。

原因として

- このデータセットでは画像に対し計5個のキャプションをつけている
- このとき、一つの画像に複数キャプションをつける場合に人間は、画像の一部を切り出して説明しようする。
- 結果、画像全体を見たキャプションではなく、画像一部を見たときのキャプションで学習することになる。

人間は画像の一部分にもキャプションをつけることができます。
しかし、このモデルでは画像全体を見てしまうようでLSTM側で全ての物体に対して無理やりキャプションしようとした結果、日本語としておかしくなってしまった印象を受けます
___
### 二次元系
![kasau.png](https://qiita-image-store.s3.amazonaws.com/0/205490/9d4dbd6a-0889-33c3-12ec-080486691239.png)
![tubo.png](https://qiita-image-store.s3.amazonaws.com/0/205490/9a66f42f-d92a-1224-7470-d8733726a3d0.png)
シワが傘の裏に、光沢が花瓶に見えたのでしょうか？
それにしても、「傘の裏」というキャプションがついた元の画像とは一体。。。

___
### 哲学系
![スクリーンショット 2018-07-05 20.59.10.png](https://qiita-image-store.s3.amazonaws.com/0/205490/d2cd1246-af5a-857d-f793-a94e9360d317.png)
もはや哲学めいたものを感じます。
「雪だるまの水平線」なんてこの画像からちょっと出てきそうにありません。
___
### 見えないものを見ようとして

![スクリーンショット 2018-07-03 19.58.50.png](https://qiita-image-store.s3.amazonaws.com/0/205490/2d46863b-77db-ce8d-ed01-e1c540f82e9a.png)
時計らしいことはわかったようです。
他にも時計が写った画像を試してみましたが、正確に当てたものは皆無でした。。。
まぁ、ものによっては傾いたりしますし。。。

![スクリーンショット 2018-07-03 20.41.54.png](https://qiita-image-store.s3.amazonaws.com/0/205490/5a394787-1088-fb25-a7eb-74e18ee102c0.png)
これに至ってはもはや何が見えたのでしょうか

___
### 固有名詞系
![wii.png](https://qiita-image-store.s3.amazonaws.com/0/205490/ced44a0c-3a94-e553-be7b-0555c80b82cc.png)
![____________________________2018-06-28_20.45.58.png](https://qiita-image-store.s3.amazonaws.com/0/205490/cb43fe2d-bdf8-0805-7846-00e13208277e.png)

本来なら除かれているはずの固有名詞が含まれてしまっているパターンです。
キリストのことをwiiとみなしたり、どこに反応したか分かり兼ねますがオバマという単語が出てきてしまっています。
二枚目のこう判断した気持ちはわかる気がしますが、一切合切を外してくるキャプションにはもはや感動すら覚えます。

___
### 正解系
まれにドンピシャだったりするのですが、確率としてかなり低い印象です。
データセットの中に似た構図を持ってくると正解率が上がる印象を受けます。

![スクリーンショット 2018-06-28 19.46.47.png](https://qiita-image-store.s3.amazonaws.com/0/205490/967e0ffc-405c-169e-25df-7983c9c637d0.png)
![スクリーンショット 2018-07-03 19.20.28.png](https://qiita-image-store.s3.amazonaws.com/0/205490/20abfa88-ad5c-d14d-b06b-83e8db8f400a.png)
裏を返せばここまでの画像は、データセットからかけ離れたものだったということになります。
___
### まとめ
データセットには少ないだろう宇宙の背景や小物だけが写っているデザイン重視の画像、アニメや漫画などの絵に対する精度は低くなったとしても仕方ないと言えます。
とはいえ傘の裏と認識する以上はデータセットに組み込まれいるはずで、なぜそれをデータセットに入れたのかが少し不思議に思いますが・・・
こういうところも含めて、検品作業は大事だなぁと思いましたまる
Excelで同名のファイルを開く（Excel2016編）

リモートとローカルなどでファイル名が同一の場合に同時に開けないExcelの仕様を回避する方法です。

# レジストリを使わない方法

権限がなかったりレジストリ触るのが怖い場合は以下の手順で比較的簡単にできます。

## 1.ショートカット作成

まずはデスクトップにExcel(ファイルではなくアプリケーションの)ショートカットを作成しましょう。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/145504/49a98c8d-da70-8081-66fd-d0ff7732e61a.png)

スタートメニューにあるExcelをデスクトップにドラッグで簡単にできます。

## 2.起動オプション追加

1で作成したショートカットを右クリックからプロパティを選択します。
プロパティの「リンク先」の末尾に` /x`を追加します。
これで準備完了！！

![2.png](https://qiita-image-store.s3.amazonaws.com/0/145504/8b7df578-8687-4e72-10dc-7c2f805b6f67.png)

## 3.ファイルを開く

同名ファイルの２つ目を開くときは、1のショートカットの上まで開きたいファイルをドラッグして起動します。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/145504/3ddc6f19-769d-8536-5ad1-d7287c9b273b.png)

こうする事で、Excelを別プロセスで起動することができます。
プロセスが分かれるのでブック間でのシート移動やマクロの共有など一部機能が使えなくなります。

# レジストリを使える場合

レジストリを使えばもっと便利に活用することができます。
具体的にはコンテキストメニュー（右クリックのメニュー）に機能を追加できます。

## 1.メニュー項目追加

まずは、レジストリエディタを起動します。
起動方法は、スタートメニューにある検索窓に「regedit」と入力します。

レジストエディタが起動したら、
`HKEY_CLASSES_ROOT > * > shell`を右クリックして`新規 > キー`を選択します。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/145504/8fb76784-37a6-f378-227d-eda11a295c40.png)

新規キー（見た目がフォルダ）ができたら、キー名称を`excel`に変更し、
そのキーに入っている`(既定)`をダブルクリックして、データ項目を`Excelで開く`にします。

![5.png](https://qiita-image-store.s3.amazonaws.com/0/145504/2f03be65-e1da-a5ce-21fa-4b9d4fec7418.png)

これで、コンテキストメニューに項目を追加できました。（まだ何も機能しません）

## 2.コマンド追加

1で作成したメニューにコマンドを割り当てます。
`HKEY_CLASSES_ROOT > * > shell > excel`を右クリックして`新規 > キー`を選択します。
キー名称は`command`に変更します。

追加したキーに入っている`(既定)`のデータ項目にExcelのインストールパスを指定します。
（インストールパスはレジストリを使用しない場合で作成したショートカットのリンク先でも確認できます）
パスの末尾に` /x "%1"`を追記します。
これで準備完了!!

![6.png](https://qiita-image-store.s3.amazonaws.com/0/145504/5e538395-0686-4ce6-232e-b7bba821e2c1.png)

## 3.ファイルを開く

同名ファイルの２つ目を開くときは、ファイルを右クリックして先ほど追加したメニューから開きます。

![7.png](https://qiita-image-store.s3.amazonaws.com/0/145504/83c7302e-5abb-7f07-6533-6fdf16271160.png)

制約はレジストリを使用しない場合と同じです。

# 余談

Excel2016の2018/7アップデート以降、コントロールパネルでアニメーションを全てoffにしても一部アニメーションがキャンセルできなくなってしまいました・・・
シンプルな動作に慣れていたのですごく野暮ったい感じがして仕事に集中できません（言い訳）
ng-japan 2018 セッション資料まとめ

2018年6月16日(土)に、Angularのカンファレンスである [ng-japan 2018](https://ngjapan.org/) が開催されました。

公開されているスライドをまとめます。

##keynote
[Angular6.0&Beyond](https://medium.com/angular-japan-user-group/ng-japan-2018%E3%82%92%E9%96%8B%E5%82%AC%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F-7b15c399ee2d)


##大規模開発に打ち勝つためのマルチパラダイム
[大規模開発に打ち勝つためのマルチパラダイム / Beat with multi paradigms](
https://speakerdeck.com/okunokentaro/beat-with-multi-paradigms)

##Angularで新サービス作って学んだこととか
[Angularで新サービス作って学んだこととか](https://www.slideshare.net/kponda/angular-102525963)

##Protractor under the hood
[Protractor under the hood](https://www.slideshare.net/akirakoyasu/protractor-under-the-hood-102534026)

##Screenshot testing with Angular
[Screenshot testing with Angular](https://speakerdeck.com/quramy/screenshot-testing-with-angular)

##AngularアプリケーションにおけるCSS設計手法
[AngularアプリケーションにおけるCSS設計手法](https://speakerdeck.com/koumatsumot0/angularapurikesiyonniokerucssshe-ji-shou-fa)

##AngularでPWAを進める
[AngularでPWAを進める](https://docs.google.com/presentation/d/e/2PACX-1vS5Bqu6DQuoS16KfvEp6UigvSwV80KySLmtupk7mHSZ24Zt5kZ8ZU83NtNvWx6ZSx6y4yQvC27yyIvr/pub?start=false&loop=false&delayms=3000&slide=id.p)

##RxJSの話
[RxJSの話](https://speakerdeck.com/okunokentaro/rxjs-real-world?slide=51)


##公式ブログ
[ng-japan公式ブログ](https://medium.com/angular-japan-user-group/ng-japan-2018%E3%82%92%E9%96%8B%E5%82%AC%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F-7b15c399ee2d)


##公式YouTube（RoomA)
[ng-japan 2018 RoomA](https://youtu.be/_eMrDsLjIOM)


##公式YouTube(RoomB)
[ng-japan 2018 RoomB](https://youtu.be/WYb0Jw-PRrE)
Resourcesフォルダーの衝撃的な話

# Resourcesフォルダーの衝撃的な話

皆さん、知っていましたでしょうか・・・
Unityで手軽にソースコードからプレハブなどを読み込む関数、`Resources.Load`
このResourcesシステムの公式ベストプラクティス第一文にはこうあります。

**Don't use it.**

つまり使うな、と。

## 使っちゃいけない理由

なんでなん・・・なんで使っちゃいかんのん・・・

* 細かなメモリの管理がとても難しくなります。
* アプリの起動時に必ずResourcesフォルダ全部を読み込むため、起動が遅くなります。ビルド時間も長くなります。
   * しかも何を入れ何を外すかは重要なのに、Resourceフォルダの数が増えるほど管理が複雑になります。
* アセットの内容をすべてのデバイス向けとして用意する必要があり、プラットフォームごとやバージョンごとでのアップグレードができません。
   * AssetBundleを使えばデバイス向けに用意するアセットを切り替えることができます。

つまりResourcesフォルダの中身が増えるほど起動もビルドも重くなるし、
アプリの動作が重くなってく可能性高いし、
対応バージョンとかOSが複数あったら一部に対応できない機能とか気軽に入れられないし、

*総合的に見てResourcesフォルダはボトルネックになりやすい*、とのこと。


## じゃあどうすればいいの？

Unity的には、アセット周りはだいたいAssetBundle使えばいいよって推奨してるんじゃないかな。
AssetBundleのアセットシリアライズ方式も、Resourcesと大体一緒みたいだけど、
Resourcesは一括で1個のファイルにシリアライズするのに比べてAssetBundleは分割できるとかあるので、読み込み時間問題は分割して解決してねって感じで。


## 使ってもいい場合

さて、そんな**Don't use it.**な Resourcesシステムですが、こんな場合は使っても良いんだよ、とUnityも言っています。

* モックなど、実装速度が必要なプロジェクトの実装（製品版では使わないこと）
* プロジェクトの全体を通して必要なリソースの場合
* メモリを消費しないリソースの場合
* 初期起動のロードなどを最小限にすませるために使う場合


## 感想

このベストプラクティスを見たときは衝撃でした・・・
Unityでずっと使ってたよく使う機能だったのに・・・
ずっと使ってた機能が非推奨になったり、こんなふうに機能としては使えるままに推奨されなくなったりするので、要注意ですね。


参考：The Resources folder
https://unity3d.com/jp/learn/tutorials/topics/best-practices/resources-folder
文字列を連結させるプログラム　C#

#初めに
このブログでは、授業で習ったことや自分で勉強したことなどをまとめて記事にしています。

今回は文字列を連結させるプログラムを作成しました。

#ソースコード

```Program.cs

    class Program
    {
        static void Main(string[] args)
        {
            string str_1 = "今日の晩は";
            string str_2 = "夜勤なのでサボりたい";

            StringBuilder sb = new StringBuilder();
            sb.Append(str_1);
            sb.Append(str_2);

            string result = sb.ToString();

            Console.WriteLine(result);

            Console.ReadKey();
        }
    }
```
▼実行結果
![f15.png](https://qiita-image-store.s3.amazonaws.com/0/249281/0dec2488-e648-d417-3f9c-a15010188638.png)
StringBuilderの中に、sb.appendでstr_1とstr_2を入れて連結させています。
ちなみに、sb.clear()にすれば現在sbに入っている値をすべて削除出来ます。

---
最後まで読んでくれてありがとうございました！
staticなメソッドを宣言したプロトコルに準拠した型をインジェクションする

staticなメソッドを宣言したプロトコルに準拠した型をインジェクションして、そのメソッドをインジェクション先のインスタンスで使おうとしたときに少しだけハマったのでメモしときます。

Firebase Analyticsにカスタムイベントを送るためにAnalyticsクラスのエクステンションを書いて、そのメソッドをどこかのクラスで使いたいとします。
ここで、メソッドはstaticで宣言しています。

```swift:Analytics+Extension.swift
import FirebaseAnalytics

extension Analytics {
    static func ordered(amount: Int) {
        Analytics.logEvent("ordered", parameters: ["amount": amount])
    }
}
```

```swift:OrderProcessor.swift
class OrderProcessor {
    func order(amount: Int) {
        // オーダーを処理する
        // ...

        // Analyticsにカスタムイベントを送信する
        Analytics.ordered(amount: amount)
    }
}
```

ここで一つ問題があります。
OrderProcessorクラスはインスタンスメソッド内部でAnalyticsクラスのメソッドを直接呼んでおり、このためテストを書くときにはネットワーク通信をインターセプトする等の工夫が必要になってしまいます。
要はこの構成だとAnalyticsクラスをモック化できないということです。

## プロトコルを定義する
OrderProcessorクラスがAnalyticsクラスの具体的な実装に依存していることが問題なので、Analyticsにプロトコルをかぶせて抽象化します。

```swift:Analytics+Extension.swift
protocol AnalyticsProtocol {
    static func ordered(amount: Int)
}

extension Analytics: AnalyticsProtocol {
    static func ordered(amount: Int) {
        Analytics.logEvent("ordered", parameters: ["amount": amount])
    }
}
```

## インスタンスではなく型をインジェクションする
ようやく本題です。

Analyticsクラスの具体的な実装から分離するため、OrderProcessorにはさきほど定義したプロトコルをインジェクションするようにします。
こうすることで、OrderProcessorクラスのテストコードを実装するときはAnalyticsProtocolに準拠したモックを作ってあげれば良くなります。

ここでハマったのが、インジェクションするのはAnalyticsProtocolプロトコルに準拠した**型**であり、**インスタンスではない**ということです。


```swift:OrderProcessor.swift
class OrderProcessor {
    private let analytics: AnalyticsProtocol.Type  // AnalyticsProtocolではない

    init(analytics: AnalyticsProtocol.Type) {  // AnalyticsProtocolではない
        self.analytics = analytics
    }

    func order(amount: Int) {
        // オーダーを処理する
        // ...

        // Analyticsにカスタムイベントを送信する
        analytics.ordered(amount: amount)
    }
}
```

このようにしないとどうなるかというと、`Analytics.ordered(amount:)`メソッドが参照できません。
なぜなら、`ordered(amount:)`はstaticなメソッドであり、インスタンスメソッドではないからです。

```
Static member 'ordered' cannot be used on instance of type 'AnalyticsProtocol'
```

OrderProcessorクラスのインスタンスは以下のように生成します。

```swift
let orderProcessor = OrderProcessor(analytics: Analytics.self)
orderProcessor.order(amount: 10)
```

## まとめ
staticなメソッドを持つプロトコルをインジェクションするときの注意点について説明しました。
なお、ライブラリが提供するシングルトンやstaticメソッドを持つクラスをモック化するためにプロトコルを定義するというのは非常に便利なのでオススメです。
フォーム正規表現メモ

ひらがな

```
[ぁ-ゞ]
```

漢字

```
[一-龠]
```

半角カタカナ

```
[｡-ﾟ]
```

全角カタカナ（ーと全角スペースを含む）

```
[ァ-ヶー　]
```

半角記号（半角スペースを含む）

```
[ -\/:-@\[-`\{-\~]
```

半角

```
[a-zA-Z0-9｡-ﾟ -\/:-@\[-`\{-\~]
```

半角英数記号を含む（肯定先読み）

```
^(?=.*?[A-Za-z])(?=.*?[0-9])(?=.*?[ -\/:-@\[-`\{-\~])
```

stringで始まらない（否定先読み）

```
^(?!string).*$
```

stringを含まない（否定先読み）

```
^(?!.*string).*$
```

.stringで終わらない（否定戻り読み）

```
^.*(?<!\.string)$
```

メールアドレス

```
^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$
```
C#で今日の日付と時刻の取得をする

#初めに
このブログでは、授業で習ったことや自分で勉強したことなどをまとめて記事にしています。

今回は今日の日付と現在の時刻を取得するプログラムを作成しました。

#ソースコード

```Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
                    // 今日の日付、現在の時刻を取得する

             DateTime dt = DateTime.Now;

             Console.WriteLine("今日の日付と時刻は;"+dt);


             Console.ReadKey();
        }
    }
}

```
DateTimeの部分で現在のコンピューターの時刻を取ってきています。
あとは、それをWriteLineを使用して表示するだけです

ちなみに
DateTime.Nowではなく、DateTime.Dateなどにすると日付の部分のみを取得します。

#まとめ
個人的にJavaで時間を取得するよりC#の取得の方が楽に感じました。

最後まで読んでくれてありがとうございました。
デバイスに合わせてブラウザに表示する内容を変える



スマートフォン、タブレット、パソコンなどデバイスごとに、画面サイズに合わせて表示するコンテンツを変えたい事があります。

例えば、画面の小さなスマートフォンでは、アイコンで表示し、表示に余裕のあるパソコンではテキストで表示する場合です。

このページでは [Bootstrap4] (http://getbootstrap.com) を用いて、画面サイズごとに表示するコンテンツを変えます。

# 結論
#### タブレット以上で表示
```html
<div class="d-none d-block-md">
```
#### タブレット以上で非表示
```html
<div class="d-block d-none-md">
```
画面のサイズの指定は、上記の`md`（タブレット）の他に`sm`（横向きスマートフォン）、`lg`（デスクトップ）、`xl`（ワイド・デスクトップ）が指定できます。

# 解説
Bootstrap4 の CSS を HTML ファイルに読み込みます。classに`d-none`と書くとその要素は非表示になります。classに`d-block`、`d-inline`と書くと、それぞれブロック要素、インライン要素として表示します。

画面サイズに合わせて表示非表示を切り替えるには、まず小さな画面に対する表示を書き`d-none`、大きい画面サイズに対して`d-block-{size}`で上書きします。
`d-block-md`とすると`md`以上の画面に対して、`d-block`が有効になります。

なお、{size}は`sm, md, lg, xl`がそれぞれ、横向きスマートフォン、タブレット、デスクトップ、ワイド・デスクトップに対応しています。

# Bootstrap4 とは

閲覧者の画面サイズに合った最適な表示を設計することをレスポンシブ・デザインと呼びます。[Bootstrap4] (http://getbootstrap.com) を利用するとレスポンシブ・デザインに対応したウェブページを簡単に作る事ができます。

# (付録) Bootstrap4 の CSS を HTML ファイルに組み込む
Bootstrap4 の CSS を利用するには、HTML ファイルの`<head>`内に、[Bootstrap CDN](https://www.bootstrapcdn.com) の配信している CSS ファイルへのリンクを挿入します。

```html
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
```

# 参考文献
[Bootstrap4移行ガイド : Display property] (http://cccabinet.jpn.org/bootstrap4/utilities/display)
[Bootstrap4.1 documentation: Display property] (https://getbootstrap.com/docs/4.1/utilities/display/)
windowsの実行中プロセスの開始時刻をコマンドプロンプトで確認する。

備忘録として残します。

windowsの実行中プロセスの開始時刻をコマンドプロンプトで確認する方法。
・・・と、その前に背景を少しだけ語ります。
#【背景】
.ldbファイル（ACCESSのmdbのロックファイル）を削除したい。
バッチ内の処理によって作成されたため、普通に削除できない。
プロセスのACCESS.EXEを削除して消すかー。
・・・ACCESS.EXEが6つくらいプロセスとしてある。
自分のパソコンであれば、全消しだが、人のサーバだからそんなことできない。
そうだ、ldbファイルの作成時間とプロセスの開始時間がイコールであれば、特定して削除できる！
タスクマネージャにプロセスの開始時間のってないかなー。
ない。
うーんこの。

以上です。続きは後述の【確認方法】参照。

#【確認方法】
コマンドプロンプト起動して「wmic」と入力エンターするとwmicモードになる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/213462/dfb45bc6-5d38-5ba7-2e1c-a52b6a320a40.png)

下記の下記のコマンドで取得可能
`process where 'name = "chrome.exe"' get name,creationdate,ProcessId`

上記コマンド実行結果↓
![image.png](https://qiita-image-store.s3.amazonaws.com/0/213462/6499e92d-9722-5cf5-2f45-e367b0a20105.png)

今回はプロセス開始日、プロセス名、プロセスID（PID）を取得しました。


以上です。


#さいごに
余談ですが、ACCESSって本当にあれですよね。
ほんと勘弁。
ブロックチェーンの現場でのよくある質問集

# 前置き

ブロックチェーンに携わっていると、ブロックチェーンの仕組みについて質問されることがある。
それに対し実際に答えたことや、こう答えればよいのではないかということを書き記しておく。
なお「ブロックチェーン」と言っているが、ほぼEthereumに関する質問である。

# 質問集

## ERC20トークンを取引所ウォレットで受け取れないのはなぜ？

かなりよくある質問。
WEBの記事などで、「取引所のウォレットではトークンを**受け取れない**」と表現されていることがあるが、正確には「受け取れているが、それを人に送付する方法がない」である。同じことのようだが、「受け取れない」⇒「取引所ウォレットにトークン送付しようとしても失敗する」⇒「トークンは送る側に残る」と思ってしまう可能性があるので、区別しておきたい。

「受け取れてはいるが、それを人に送付するインターフェースを取引所が用意していないため。」

「その取引所が、当該トークンの取扱いをはじめれば（インターフェースを用意してくれれば）、トークンの取り出しは可能になる。」

「実際、取引所でやり取りできるERC20トークンもある。」

## ERC20トークンに対応していないウォレットで受け取ってしまった場合、もう取り出せない？

取引所以外のウォレットでも、ERCトークンに準拠していないウォレットで受け取ってしまっては駄目なのではないか、という質問。
例えば、紙ウォレットで受取ると、この紙はERC20準拠じゃないからもう駄目だ、と考えてしまいがちである。
ウォレットをそのままお財布的なものだと思っている方には、ウォレットの正体について軽くご説明するとわかっていただきやすい。

「ウォレットの本体は秘密鍵なので、秘密鍵さえ自分で管理できる状態であれば、ERC20トークンの送付機能を持たないウォレットでトークンを受け取ってしまっても、秘密鍵を別の（トークン送付可能な）ウォレットに移すことで、トークンを取り出すことは可能である。」


## トークンの全削除が行われた場合、自分のウォレットに入っているトークンはどうなる？

「トークンの全削除」とは、solidityで用意されているselfdestructメソッドのこと。つまり、トークンのコントラクト自体を削除した場合、各々がウォレットで持っているトークンはどうなってしまうのか、という質問。
これも、「自分の持っているお財布にトークン（コイン）がチャリンチャリンと入っている」という認識が元になっていると思われる（「コントラクトが削除されても、手元のコインは残るのでは？」）。

「自分の持っているトークンも全て削除されます。」

「ブロックチェーン上にデプロイされたコントラクトにアクセスすることで『誰々がいくらもっている』という情報を得ることができる。各ウォレットアプリで『私は◯◯トークンをいくら持っている』という情報が見られるのも、ウォレットアプリからコントラクトに情報を取りに行っているから。コントラクト自体がselfdestructされると、その情報に誰もアクセスできなくなるため、もはやそのトークンを持っているとは言えなくなる。」


## Walletアドレスってたまたま他の人とかぶったりしないの？

ちゃんと納得してもらおうとすると、けっこう難しい。
下のやり取りは架空のもの。

### 発端

[Q] Walletアドレスってたまたま他の人とかぶったりしないの？

[A] しません。

[Q] ほんとに？可能性ゼロ？

[A] ゼロではないですが、確率は非常に、ゼロと言っていいくらい低いです。

[Q] （ゼロではない……？それってセキュリティ的にどうなの……？）

[A] （しまった、単にゼロですと言ってしまえばよかった）


### 確率

[Q] 確率が非常に低いって、どのくらい低確率なのか？たとえば、悪意を持ったハイテクノロジーな人が大量に秘密鍵を生成したとしてもかぶらないのか？

[A] 秘密鍵は256ビット（0か1が256個並ぶ）の情報を持っているので、2の256乗通りある。
つまり、115,792,089,237,316,195,423,570,985,008,687,907,853,
269,984,665,640,564,039,457,584,007,913,129,639,936通りある（不正確な言い方だが、あとで言い直す）。
1秒に3億手読む将棋ソフトがあるらしいので、もう少しがんばって毎秒10億個の秘密鍵を生成するとして、50年がんばると
100,000,000 * 60 * 60 * 24 * 365 * 50 = 150,768,000,000,000,000（通り）
の秘密鍵を生成できますが、先程の115,792,089,237,316,195,423,570,985,008,687,907,853,
269,984,665,640,564,039,457,584,007,913,129,639,936通りと比べると、全体の0.000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,001％しか調べられていない。この確率のガチャに課金する人がいるかというと疑問です。


### 重複チェックしない問題

[Q] walletアドレスを作成するとき、重複チェックしないじゃないですか。WEBサービスにアカウント登録するとき、アカウント名を入れると「そのアカウント名はすでに使われています」とか表示されて登録できないことがあるけど。
walletアドレスを作成するときに、既存データに問い合わせて既存のアドレスと突き合わせている様子はないし、そもそもオフラインでも生成できる。
これでは、かぶりを防止できないし、もしかぶったとしても気づくことはできないし、だめなのではないか？

[A] 重複チェックせずとも、心配する必要がないくらい低確率なので、重複チェックが必要ないです。


### ランダム性

[Q] 秘密鍵が本当にランダムに生成されるのであればよいが、偏りがあった場合はもっと早くに衝突してしまうのではないか？乱数生成アルゴリズムに問題はないのか？

[A] 秘密鍵は、正確には「2の256乗個あるものから1つを選んだもの」ではなく「2の256乗の情報量を持つもの」ですので、定義上、偏りを持ちません。

[Q] どういうこと？

[A] 「2の256乗通りの中から真に偏りなく、ランダムに1つを選び出している」ときと同じランダム性を確保しているということです。それが、「2の256乗の情報量を持つ」ということです。「情報量」は英語でentropy（エントロピー）といいます。

[Q] ……その「2の256乗通りの中から真に偏りなく、ランダムに1つを選び出している」の「真に偏りなく、ランダムに」の部分は信用できるのか？本当に？

[A] そこを解説するには、楕円曲線暗号の知識が必要です。ここでは（何を隠そう私もよくわかっていないので）説明しませんが、多くの、賢く、嘘をつくことにメリットもない人たちが「信用できる」と言っているので、どうかひとつ。

最後は情けに訴える形になってしまったが、システムに絶対はないので、この辺で手打ちとさせていただく。

# 終わりに

質問内容がだいぶ偏ってしまった（全部ウォレット関連）。
Azure SQLDBにlinux踏み台サーバ経由で接続するには

Macな環境でも[SQL Operations Studio](https://docs.microsoft.com/en-us/sql/sql-operations-studio/download?view=sql-server-2017)が出てきたおかげで
ずいぶんAzureSQLDBを扱うことが楽になってきました。
（WindowsのVM環境を作ってSQLServer Management Studio(SSMS)使ったりしてました）

AzureSQLDBにはFirewall設定があるので職場などの作業環境のリモートIPアドレスを登録しておけばいいのですが、
リモートワークなどする際にわざわざFWに穴を開けるのも気が引けるもの・・
とかいってVPN張るにもいろいろオーバーヘッド大きすぎて辛いですしね

ということでLinuxサーバを踏み台(Bastion)サーバにしてSSHトンネル経由でAzureSQLDBに接続すれば、
毎度毎度FWに穴を開けなくてもセキュアにアクセスできるのではないかと考えた次第
（もちろんAzureSQLDBのSQLServerのFWには踏み台サーバのIPが登録されていることが前提です。）


図にするとこんな感じ

![azuresqldb_portfoward.png](https://qiita-image-store.s3.amazonaws.com/0/19107/713f4815-3ec0-1010-afeb-90491ca5a5c5.png)


端的には

```
ssh -f -g -N -C -L 11433:AzureSQLDBのSQLServerのホスト名:1433 踏み台サーバのユーザ名@踏み台サーバIP/ホスト名 -p 22
```

と実行することで
・「localhost/127.0.0.1 port 11443」のアクセスは
・「AzureSQLDBのSQLServerの1433」に「SSHトンネル経由でアクセス」
されることになります。

で、SQL Operations Studio等からは以下のように設定し接続をします
![スクリーンショット 2018-07-27 18.00.06.png](https://qiita-image-store.s3.amazonaws.com/0/19107/8176acd9-2daf-6f66-9990-ac7d23121a82.png)

変わったところと言ったらServerの指定の部分で
User NameやDBのところはいつもどおりですね。


作業が終わったらpsで実行したsshをkillすることをお忘れなく・・

```
$ ps auxww|grep "ssh -f"
abc      12345   0.0  0.0  4287224    940 s009  S+    6:29PM   0:00.00 grep ssh -f
abc      12346   0.0  0.0  4344356    668   ??  Ss    5:44PM   0:00.05 ssh -f -g -N -C -L 11433:xxxxxxxxxx.database.windows.net:1433 yyyyyyyy@xxx.xxx.xxx.xxx -p 22

$ kill -9 12346

$ ps auxww|grep "ssh -f"
abc      12345   0.0  0.0  4267768    896 s009  S+    6:30PM   0:00.00 grep ssh -f
```

今回はAzureSQLDBで試しましたが、MySQLでもRedshiftでもHTTP通信でもなんでも応用出来ますし
いろいろ使いがいがありますのでPortfoward+Bastionってのを覚えておくといざというときに重宝します。

※追記
踏み台サーバがAzureVMの場合、クライアントはAzure内で動いているようにみえるため、
SQLserverにはダイレクトアクセスという接続になってしまうようで、
ポートは1433ではなく動的に接続ポートが変わってしまい、
サーバアドレスもjapanwest1-a.control.database.windows.netというようなところに変わるようです。
そのため、SSHトンネルを作っても結局は

```
SQLSTATE[42000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]
Cannot open server 'サーバ名' requested by the login. 
Client with IP address 'リモートアドレス' is not allowed to access the server. 
To enable access, use the Windows Azure Management Portal 
or run sp_set_firewall_rule on the master database 
to create a firewall rule for this IP address or address range. 
It may take up to five minutes for this change to take effect.

```
となってしまうようです。
踏み台サーバ経由でAzureSQLserverにアクセスする場合は
AzureVMではない別な場所のサーバでやるしなないような気がします
なんだかなー

・ADO.NET 4.5 用の 1433 以外のポート
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-develop-direct-route-ports-adonet-v12
webサイトなどを作るときに注意すべきこと

#初めに
このブログには、学校で習ったことや自分で勉強したものをまとめて記事にしています
今回はWEBサイトを作るときに注意すべきことについて２つほど簡単にまとめます

#項目
・SQLインジェクション
・クロスサイトスクリプティング

#SQLインジェクション

SQLインジェクションとは
SQLインジェクションは
アプリケーションのセキュリティ上の不備につけこみ、アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のことです。
SQLだと、データを消したり更新したり、動かせればやりたい放題になるのでとても危険です。

対策法としては、SQLなどで特殊な意味になるような記号を発揮できないようにするエスケープ処理などがあります

#クロスサイトスクリプティング
クロスサイトスクリプティングとは、
ウェブアプリケーションにスクリプトを埋め込むことが可能な脆弱性がある場合、
これを悪用して利用者のブラウザ上で不正なスクリプトを埋め込み実行される攻撃方法です。
例えば

```js

<script>
window.alwrt("このページはウイルスに感染しています")
<\script>
```

などを埋め込んだりできる例です。

対策方法としては、SQLインジェクションと同じエスケープ処理が一つの対策法になります、ですが、こちらの場合は
HTMLで特別な意味を持つ記号にたいして処理します。
---
最後まで読んでくれてありがとうございました。
Swift SILを出力して読んでみる

#はじめに

ざっくり各用語の解説
####抽象構文木(AST)とは
>構文木から不要な情報を取り除いて、関係ある情報のみを残したものです。

####構文木とは
>ソースコードに解析処理を行いできたもので、解析処理は文法をチェックしながら、演算子や数値等の文法要素を評価の順番に並べたリストで、このリストが自然にツリー構造になることから構文木と言われています。

####LLVM IRとは
>LLVM用の中間表現です。
SILからLLVM IRという中間表現に変換し、LLVMを使ってオブジェクトコードを生成します。

####LLVMとは
>コンパイル基盤というコンパイルのためのツールなどが中に入っています。
※Low Level Virtual Machineという略称ではないです。

# SILとは
Swiftの中間言語で、SIL(swift intermediate language)と呼ばれています。

ざっくり言うとこんな感じにコンパイルされていき、
![swift_compiller.png](https://qiita-image-store.s3.amazonaws.com/0/83449/688d6a01-c87a-bc9b-81b0-782858641d21.png)
SwiftからASTに変換され次にSILに変換されています。

このSILを使わずとも、swiftのASTをLLVMに渡して最適化を行うことは出来るらしいです。
ただ、swiftの高レベルの意味情報の表現を、低レベルな表現しかできないLLVMにそのまま渡しても、うまく最適化を行うことができないのでSILに変換する必要があります。
今回はこのSILについて触れます。


コンパイルの段階にはFrontendとBackendという名称で分かれており、Frontendがソースコードからsilまで、backendがsilからオブジェクトコードまでを示しています。

#SILの工程

SILは段階的に変換されており、先ずASTからraw SILを作成し、診断パス（リターン分析や算術オーバーフローが起きないか等）が施されてcanonical SILに変換されます。

| SILの種類       |       説明 |    生成コマンド             |
|:-----------------|:------------------|:---------------------------------|
| raw SIL            |  ASTから変換された未加工のSILです。 |   swiftc -emit-silgen hoge.swift  |
| canonical SIL           | raw silが診断パス（おかしな箇所がないか）を通ると、このsilが生成されます。最適化が施されており、raw SILよりもコードが少なくなっていたりします。 |    swiftc -emit-sil hoge.swift     |


canonical SILは以下の最適化が施されます。
 - インライン展開による最適化
 - 参照カウントの最適化
 - メモリプロモーションの最適化
 - 配列や文字列などの最適化
 - 冗長的なコードの除去


# canonical SILを出力して読んで見る

今回はこんな感じの単純なコードを作ってみました。

```swift:hello.swift
func getOne() -> Int {
  let number: Int
  number = 1

  return number
}
```

では、以下のコマンドを打って `canonical SIL`を見てみましょう。

```
swiftc -emit-sil hello.swift
```

すると `getOne` 関数がこんな感じに変換されています。

```
// getOne()
sil hidden @_T05hello6getOneSiyF : $@convention(thin) () -> Int {
bb0:
  %0 = alloc_stack $Int, let, name "number" 
  %1 = integer_literal $Builtin.Int64, 1        
  %2 = struct $Int (%1 : $Builtin.Int64)     
  store %2 to %0 : $*Int                          
  dealloc_stack %0 : $*Int                       
  return %2 : $Int                               
} // end sil function '_T05hello6getOneSiyF'

```

１つずつ読んで見ましょう。

```swift:
sil hidden @_T05hello6getOneSiyF : $@convention(thin) () -> Int {
```
>ソースコードの定義した `getOne`関数です。
>関数名もマングル化されています

>マングル化・・・同じ名前の関数を複数定義出来るようにシンボル名にクラス名などを付与しています。

```swift
%0 = alloc_stack $Int, let, name "number" 
```
>ここは、型の値を格納するためメモリをスタックに割り当ててます。
>割り当てられたメモリのアドレスが `%0`に格納されています。

>スタック・・・データを一時的に貯めるためのデータ構造

```swift
%1 = integer_literal $Builtin.Int64, 1  
```
> 整数リテラル値を作成します。

>リテラル・・・ソースコードにベタ書きした（この場合1）した数値とか文字のこと

```swift
%2 = struct $Int (%1 : $Builtin.Int64)
```
>読み込み可能な構造体を作成しています。

```swift
store %2 to %0 : $*Int          
```
>`%0`にあるメモリアドレスを元に、`%2`の値をメモリに格納します。
>格納する値は読み込み可能な型でないといけません。

```swift
dealloc_stack %0 : $*Int 
```
>`%0`にあるメモリアドレスを元に、割り当てられたメモリを解放します。

```swift
return %2 : $Int
```
>現在の関数を終了し、呼び出し元の関数に返り値と共に制御を返します。

以上です。
githubにSILの各コードについて説明が載っているので、是非読んで見てください。

##参考図書
[SIL.rst](https://github.com/apple/swift/blob/master/docs/SIL.rst#alloc-stack)
[Swift Internal Introduces](https://nothingcosmos.booth.pm/items/292964)
[LLVM](https://llvm.org/)
スタバで逆ナンされる方法(＊´・∀・＊)

# スタバで逆ナンされる方法(＊´・∀・＊)

　いやー最近はあれの基本操作も知らない人が増えてるのだとか。
それなのにスタ◯バ○◯◯なコーヒー屋で偉そうにMac開いてる大学生とかがいますよね。

### 「お前らそんなんスマホでやったほうが早いやろ。」
　どうしてもそう思ってしまう醜い心の持ち主です僕は。はい。

        ※タイトルで釣りましたすみません。

　さて表題の件ですが、Excelの基本操作、お手軽便利術を知らない人が多いなぁと感じております。（社内の話ではなく世の中を客観的に見て感じた）
　もちろん、ちゃんと使いこなせている人も稀に見かけますが。

　ということで、タイトル変更。

# 「スタバでカッコよくキメる！！Excelの便利技！！」

---

　デザイナーさんはともかく、エンジニア、プランナーの方は特にExcelに触れる機会が多いのではなかろうか。
　テーブルデータの管理であったりスケジュールの管理であったりマクロ組んでみたりと様々な使い方ができます。

## 余談はここら辺にして本題へ。
　エンジニアなら知っているかと思いますが、ミジンコレベルでも参考になれば良いなと思っております。
　また、初心者用の記事なので、「できて普通やろ」って思った方はそっと「いいね」をしてブラウザバックされても構いません。

*ここではMac版Excelの説明をします。Win版、スプレッドシートでは操作方法や仕様が異なる場合があるのでご了承ください。
*実践したからと言って逆ナンされるのを保証するわけではございません。ご理解のほどよろしくお願いいたします。

---
# command(cmd) + カーソルキー
　これめっちゃ便利っす。例えば以下のような表があったとしましょう。
![image-20180208092858400.png](https://qiita-image-store.s3.amazonaws.com/0/275273/ca338006-6534-6a90-3eab-3706cd9a61a2.png)

　***B2***のセルから***B10***のセルにカーソルを合わせたい場合、`cmd + ↓キー`で瞬間移動できます。
これは表の先頭、末尾のセルに移動するショートカットです。横への移動も同様に行えます。
　さらに！こちら`Shiftキー`と組み合わせると、選択もできる。なので先頭から末尾を選択してコピーなども楽です。
*表内の移動というより、入力、未入力セルの端を移動する感じです

**B2**を洗濯した後、`Shift + cmd からの↓と→`で表内を選択
![image-20180208093019305.png](https://qiita-image-store.s3.amazonaws.com/0/275273/6bc262b3-89c4-39f1-99e4-c9266a3dea05.png)

　たまにクリックしたままマウスホイールをめっちゃ回している人とかいるよね。あれ超ウケる。

---

# カンマ区切りなデータの貼り付け
　こいつも便利。以下の様なテキストがあったとしよう。
```
1,2,3,4,5,6,7,8,9,10
```
　単純にExcelへ貼り付けるとこうなる。
![image-20180208085358232.png](https://qiita-image-store.s3.amazonaws.com/0/275273/f64a9bd3-7fc1-cb26-58b9-be8ab359b3cb.png)

がしかし、貼り付け方法を指定するだけでだらしないExcelがやる気を出します。

　テキスト貼り付け時にキモいアイコンが出るかと思います。
![image-20180208085526124.png](https://qiita-image-store.s3.amazonaws.com/0/275273/61399fa2-8459-1984-3041-59f19c0a188e.png)

　「テキストウィザードを使用」→「次へ」→「区切り文字：コンマ」→「完了」
![image-20180208085914935.png](https://qiita-image-store.s3.amazonaws.com/0/275273/b99692f1-abaf-52c7-0ffe-37614cc6b603.png)

　いいっすね。
　CSVから抽出したデータを貼る時とかに使うかな。知ってて損はないかなと思います。
　大学生がCSV使うかはわからないですが。

---

# VLOOKUP(検索値, 範囲, 列番号, [検索方法の指定])
　関数です。データ検索などに使ったりします。
　Excelでマスタデータの管理を行ったり、集計データに詳細情報を付加する際に利用します。僕は集計とかで特定のデータを別シートから参照する際によく利用しますね。

- 検索値 - 検索する値
- 範囲 - 検索対象の範囲
- 列番号 - 範囲の(n)列目の値を結果として返す
- 検索方法 - falseは完全一致。trueは近似値を取得

　例えば以下の様にE6に式を指定すると、、、
![image-20180208083903334.png](https://qiita-image-store.s3.amazonaws.com/0/275273/85a9dba5-43a6-e26e-7951-1de55d44b482.png)

　↓↓この様に結果が取得できます↓↓
![image-20180208084741923.png](https://qiita-image-store.s3.amazonaws.com/0/275273/a4220358-c43d-f0e2-fb1d-ef24afbcb7ec.png)

---

　とまぁこんな感じです。どーでしょうか。
　ぶっちゃけた話、スタバ行くならExcelじゃなくてプログラミングしてたほうが声かけられやすいと思うけどどうなんでしょう？？

女性店員「お客様。もう少し静かにキーボード叩けませんか？他のお客様のご迷惑になりますので」

もしよければ皆さんのスタバ・エピソードお聞かせください。
試験 Azure 70-533 を1週間で取得 Day5

#Day5 Azure ADとSSOと時々Automation
今日でとりあえずブートキャンプは終えて、週末は試験対策に時間使います。
※この記事は7月27日に書きました


#Azure ADへのWin10(1703)の参加(Join)
- Azureの管理者権限の委任
    - Azureサブスクリプションの管理者とAzure ADディレクトリの管理者に大別される
    - Azureサブスクリプションの管理者はPaaSやIaaSを全般的に管理できる
    - Azure ADディレクトリの管理者は特定のディレクトリ内に限定されたアカウント管理ができる
    - Azure ADのユーザプロパティから[ディレクトリロール]で設定する
- Microsoft Azureのサブスクリプションの管理者
    - Azureを導入した場合、サブスクリプションをactivateしたユーザが「サブスクリプションの管理者（プライマリ)」となる
    - サブスクリプション管理者はサブスクリプションの解除などを初めて全ての管理権限をもつ
- Azureサブスクリプションの管理権限を委任する場合、Azure Portalの「サブスクリプション」から権限付与する
- 権限はロールと呼ばれて、詳細に設定することもできる


1. Windowsスタートボタンを選択
2. 設定をクリック
3. Accountsをクリック
4. 左側のメニューから[Access work or school]を選択
5. [Connect]をクリック
6. 管理者権限をもつメールアドレス（アカウント）を入力
7. アカウントのパスワードを入力
8. You're all setが出たら完了
9. Win10からEdgeなんかのブラウザを立ち上げてAzure Portalへアクセス
10. SSOがうまく言っていたらPW無しでポータルにアクセスが確認できる

##ディレクトリ同期やフェデレーションサービス
オンプレのサービスアカウントに必要な権限はなにか？

## Azure AD Connect用のサービスアカウントを作成する
1. サービスアカウント　syncadminを作成
2. サーバ側(ADDS)で[ツール]を選択
3. [Active Directoryユーザとこんピュータ]をクリック
4. [Users]というコンテナを右クリック
5. [新規作成]からユーザをクリック
6. フルネームとログオン名にadcaadmin(任意)を入力
7. サービスアカウントなのでパスワード変更は無し、無期限にする
8. このユーザに管理者権限を付与するためadcadminをダブルクリック
9. [所属するグループ]を選択
10. Domain Admins(ドメインの管理者の権限）を追加
11. Enterprise Admins(フォレストの管理者の権限）を追加

## Azure ADと同期をするためのユーザ/グループ OUを作成する
1. [Active Directoryユーザとコンピュータ]をクリック
2. 右クリックでOU（組織単位)を新規作成する　例：AdconnectOU
3. OUの中にテストuser1,user2を作成
4. AdconnectOUの中にテストグループ group1を作成し、その中にuser1,2を追加


#Automationアカウント
1. Automationアカウントを作成する
2. 資格情報から追加を選択
3. 名前（変数名だと思えば良い）
4. admin（共同管理者としてのサービスアカウントを入力)
5. パスワードを入力して、作成

##変数の追加
1. 名前
2. タイプは文字列、値に[Azure Pass]を作成
何度もパラメータを作って、Microsoft Azureからスクリプトテンプレート入れて
runbookに登録して実行検証する

※この記事は7月27日に書きました
eclipseで独自の拡張子を任意のエディタで編集する方法

#概要
eclipse上で独自の拡張子のファイルを編集する際に、使用するエディタを変更する手順についてまとめました。
eclipseを使っていて下記のような問題があったので、同じような事象が発生している場合には参考になるかもしれません。

 - ファイル名をダブルクリックすると別のエディタで開かれてしまう。
 - エディタの色設定が特定のファイルだけ反映されない。

※本記事はeclipse 4.4 Lunaで検証を行いました。

#方法
1. Window>Prefernces>General>Content Typeを選択
2. 「Content types:」からTextのプルダウンを開き、編集したいエディタを選択
3. 「File associations:」で「Add...」を選択し、編集したいファイルの拡張子を「*.etc」みたいな感じで入力してOKを選択

#参考
eclipse上でのエディタ関連づけ
https://fiahfy.blogspot.com/2013/02/eclipse.html
Dynamics365の業務プロセスフローのカテゴリを修正

業務プロセスフローのステージカテゴリ（パイプラインのフェーズ）を変更したい時に
設定箇所がどこか分からなかったので備忘録的として。

##　今回やりたいこと

ちなみにこういったやつが業務プロセスフローです
![業務プロセスフロー.PNG](https://qiita-image-store.s3.amazonaws.com/0/258847/78ed3f16-6f39-770c-47be-08c460a99827.png)

プロセスを標準化する業務プロセス フローの作成（Microsoft）
https://docs.microsoft.com/ja-jp/dynamics365/customer-engagement/customize/create-business-process-flow

で、今回やりたいことは、ステージのカテゴリを変更したいわけです。

具体的に的に言うと、
案件の「パイプラインのフェーズ」を変更（追加・削除）したい。

設定画面的に言うと、ここのカテゴリのデータを変更したい↓
![業務プロセスフロー２.PNG](https://qiita-image-store.s3.amazonaws.com/0/258847/609b9d3e-fd25-fe31-dd49-95a5ed5d2430.png)

<font color="DeepPink">
※注意※
既にそのプロセスフローを利用していた場合、ステージのカテゴリを変更しても
過去のレコードのパイプラインのフェーズは変更されません。過去のままです。
</font>

## 設定
設定のカスタマイズからシステムのカスタマイズを開きます

「オプションセット」の「ステージカテゴリ」をクリックします
![業務プロセスフロー.４PNG.PNG](https://qiita-image-store.s3.amazonaws.com/0/258847/62010f01-e7e1-24d4-a7c1-19084664c94a.png)


オプションから変更したいカテゴリを選択し、ラベルを変更する
新規作成したい時はオプションの下にある「＋」ボタンです
![業務プロセスフロー５.PNG](https://qiita-image-store.s3.amazonaws.com/0/258847/916104af-f99a-80c1-c2fc-7cbcaa83f64c.png)

保存して公開で終了です
cronの書式で曜日指定に数字を使うのやめたい

些細な啓蒙

こじんまりなシステム構成ではcron使う方が早いし楽なので何だかんだ使ってると思います。
crontabで曜日指定するときに、数字の指定だと直感的に分かりづらい。
~~週のはじまりが日曜日か月曜日か、どっちが0なのか毎回ググってるし~~

※"ちゃんとした"商用システムでは"ちゃんとした"ジョブスケジューラを使いましょう。rundeck使ってみたい

# さっそく結論
crontabの書式では、曜日の指定に数字だけでなく英単語も使える

ちゃんとドキュメントにも記載がある
参考 - [Red Hat Enterprise Linux 導入ガイド - 21.1.4. Cron ジョブの設定](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/ch-automating_system_tasks#s2-configuring-cron-jobs)

> day of week — 0 から 7 までの任意の整数。0 および 7 は日曜日を示す (あるいは sun や mon など曜日の省略形)

＿人人人人人人人人人人人人人人人人人人人人＿
＞　あるいは sun や mon など曜日の省略形　＜
￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^￣

| 曜日   | 数字指定 | 英語指定 |
|:------:|--------:|:--------:|
| 日曜日 | 0        | sun      |
| 月曜日 | 1        | mon      |
| 火曜日 | 2        | tue      |
| 水曜日 | 3        | wed      |
| 木曜日 | 4        | thu      |
| 金曜日 | 5        | fri      |
| 土曜日 | 6        | sat      |

このようにすれば月曜日から金曜日にかけて実行。

```shell:crontab書式
00 13 * * mon-fri skokado ~/nemui.sh
```

分かりやすい! 素敵!!
バッチファイルとシェルスクリプトの違い

#初めに
このブログでは、授業で習ったことや自分で勉強したことなどをまとめて記事にしています。

今回はバッチファイルとシェルスクリプトの違いについて簡単にまとめます。

#バッチファイル
まずバッチファイルはWindowsで使用する処理を記載したファイルで、拡張子は.batや.cmdなどが多く使われます。
batファイルを作って作業の効率化などを図ったりもできます、基本的にコマンドプロンプト上で動くものです。
例えば、奥深くに眠ってる作業ファイルを複数一気に開けるようにしたりなどできます。
~~現在はPowershellもありますけど。~~

#シェルスクリプト
シェルスクリプトはシェルでの動作を記載したファイル
です。拡張子は.shや.bashなどが多いです。
シェルスクリプトは主にシェル上での処理をファイルに記載して一気に実行するのが目的で、UNIX系で使います

#二つの違い
なので、batはまず基本的にWindowsで使うもので、シェルスクリプトはUNIX系で使われるものです。
そして、目的がシェル上で動かすものとコマンドプロンプト上で動かすものでも違いがあります。

---
最後まで読んでくれてありがとうございました。
AWS　イメージ作成するときの注意点 (Linux2編)

`ミスった内容`
Amazon Linux2　の方でイメージを作成し、デフォルトの状態でEC2にphpやmysqlのインストールをすることができなかった。

`時系列`

①誤って最近リリースされたAmazon Linux2の方をイメージを落としてしまう。(一番上にあるのでミスしがち)

参考画像
<img width="1433" alt="EC2_Management_Console.png" src="https://qiita-image-store.s3.amazonaws.com/0/116497/4623ada8-7672-92de-9639-a885e07dfd8d.png">

↓
②Amazon Linux2は、epelリポジトリがない。Amazon公式リポジトリに色々入っていないので、phpやmysqlのインストールをすることができなかった。

```
例
sudo yum -y install php71 php71-mbstring php71-bcmath php71-common php71-devel php71-json php71-mysqlnd php71-fpm php71-gd とやると

パッケージ php71 は利用できません。
パッケージ php71-mbstring は利用できません。
パッケージ php71-bcmath は利用できません。
パッケージ php71-common は利用できません。
パッケージ php71-devel は利用できません。
パッケージ php71-json は利用できません。
パッケージ php71-mysqlnd は利用できません。
パッケージ php71-fpm は利用できません。
パッケージ php71-gd は利用できません。
```
↓
③幸いまだ開発環境を整えているだけなので、やり直すことにした。

`参考文献`
Amazon Linux2とAmazon Linuxの違いについて（メモ）
https://qiita.com/akira345/items/2a09c4d06d2e3415bc8d

`Amazon Linux 2　について`
2017年の年末にプレリリースされ
2018年の6月27日にAmazon Linux 2がLong Term Supportとして5年間の長期サポートとして正式リリース。

`参考文献`
公式サイト　Amazon Linux 2
https://aws.amazon.com/jp/amazon-linux-2/

[速報]5年長期サポートのAmazon Linux 2が一般公開されました
https://dev.classmethod.jp/cloud/aws/amazon-linux-2-lts-ga/
GitLabのBadges機能について

GitLabにはBadgesという機能があります。
一体何に使うのか？も含めて使い方をまとめました。

#Badgesとは
プロジェクトのトップページにボタンを追加する機能です。
下記の赤枠で囲まれている部分がBadgesです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/267148/78a5ac0a-f770-bed4-9f91-4c7e11d17009.png)

例えば、リポジトリのルールを記載したWikiページへのリンクを貼ったり、ファームが格納されている場所へのリンクを貼ったりと、使い方はいろいろあるかと思います。
このプロジェクトを使うメンバーにとって便利だと思うものを追加しておくと良いです。

#作り方
1．GitLabのメニューツリーからBadgesを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/267148/647d7fb4-a2e6-c61f-5bce-20f31c2b0f97.png)
2. 必要な情報を入力します。画像はURLで指定するので、あらかじめどこかにUploadしておく必要があります。また、画像はそのままのサイズで表示されます。オリジナルの画像サイズも調整しておきましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/267148/a7bbd87d-0ab7-0375-dff5-72f172379759.png)
3. Add badgeを押すと完了。
4. プロジェクトのトップスクリーンに戻ると、ボタンが追加されているかと思います。

#修正・削除
Badgesの設定ページに移動すると、下記のように表示されているので、右側のゴミ箱を押すと消せます。
鉛筆マークを押せば修正も可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/267148/fe1490f4-3ebd-fe02-22d8-6302602bd315.png)

#ボタンを作る
下記のようなフリーのジェネレータを使うと綺麗に作れます。私とは違ってセンスの良いボタンを作りましょう。
http://box.aflat.com/buttonmaker/
CPU設計実習(授業用) - 3章 CDECvのマイクロアーキテクチャ(概要)

# 3章 CDECvのマイクロアーキテクチャ(概要)

CPUのハードウェア的な構造は、大きく分けてデータパス部(Data Path Unit)と制御部(Control Unit)の2つの要素で構成されます。
CDECvも図3.1に示すように、データパス部と制御部から構成されます。
制御部からデータパス部には制御信号(xdst, xsrc, FLGwe, Rwe, MEMwe, aluop)が送られています。
また、データパス部からは機械語命令のコード(I)やフラグ信号(SZCy)が送られています。
クロック信号clockとリセット信号resetは、データパス部と制御部の両方に共通して供給されます。

![CDECv_microarchitecture_sketch.png](https://qiita-image-store.s3.amazonaws.com/0/25656/9a213d64-3efd-79d7-24a6-bdbec934dec2.png)

<図3.1 CDECvの全体的な構成(データパス部と制御部)>


データパス部はその名の通り、データをやり取りするための経路を実現した回路です。
データパス部には、汎用レジスタやフラグレジスタ、プログラムカウンタなどのレジスタセットとメモリが含まれ、
さらには算術論理演算を行うALUや、命令を実現するために必要な補助的なレジスタなども含まれます。
この経路に沿ってレジスタ同士やメモリとレジスタ間のデータ転送が行われたり、様々な算術論理演算が行われたりすることで、命令が実現されます。

データパス部の動作は制御部からの制御信号によって制御されます。
表3.1に制御部から送られる制御信号について簡単な説明を示しました。
制御信号の働きの詳細は次章で説明します。


<表3.1 制御部からの制御信号>

| 制御信号   | 説明 |
|-----------|------|
| xdst[2:0] | データ転送元を指定 |
| xsrc[2:0] | データ転送先を指定 |
| FLGwe     | FLGレジスタへの書き込み許可   |
| Rwe       | 補助レジスタRへの書き込み許可 |
| MEMwe     | メモリへの書き込み許可        |
| aluop[3:0] | ALUの演算選択信号 |


制御部は制御信号を生成するための回路です。
命令を実現するためには適切なタイミングで適切な制御信号を生成し、データパス部へ送る必要があります。
このような制御信号を生成する機構は状態機械(ステートマシン)で実現することができます。

どのような制御信号を生成するのかは、実行する命令によって変わってきます。
そのため、データパス部から機械語の命令コードやフラグ信号を受け取る必要があります(表3.2)。


<表3.2 データパス部からの信号>

| 信号 | 説明 |
|----------|----------------------------|
| I[7:0]   | 機械語命令のコード(1バイト目) |
| SZCy[2:0]| フラグ信号 |
zeropaddingを丁寧に解説

#zeropaddingとは

数字の桁数をそろえるためにゼロを付けるやつ

いろんなところで見かけるコード

```js

//ES2015

const zeroPadding = (number, length) => {
    return (Array(length).join('0') + number).slice(-length);
};

zeroPadding(51,3); //051

```

numberに桁をそろえたい任意の数字、lengthに任意の桁数を入れる

#初心者(私)向け解説

##空の配列を作成して文字列'000…'を作り、任意の数字と連結する

```js
//number = 51, length=3 の場合

Array(3)//empty×3　空の要素3個の配列を作成

Array(3).join('0') //00 配列の空の要素をすべて文字列'0'で連結

Array(3).join('0') + number //0051 '00'と51が連結して文字列'000051'となる

```
###Array()とは

配列を作るには　new Array() する方法と　[] する方法がある。
普段は[]のほうが簡潔でオススメらしい。
let t = [];//空の配列

今回のように空の要素を複数個格納したい時は[]が使えない。
let t = [3];//1つの要素3が格納された配列になる

new Array()だと
let t = new Array(3);// empty×3の配列になる！

今回のコードでは初期化をすっ飛ばしていきなり
let t = Array(3); // empty×3の配列になる
ってしてる。ということでしょうか。
（ここよくわかってない。）


###.join()とは
.join()は配列の要素を()内の文字で連結する

empty + '0' + empty + '0' + empty

となるので桁数-1個の0が連結され'00'となる

文字列と数値を連結するとすべて文字列になるので
Array(3).join('0') + 51　は文字列'0051'となる

##桁数をそろえる
```js
'0051' //Array(3).join('0') + number


('0051').slice(-3) //051 文字列'0051'を末尾から3文字抽出

```
###.slice()とは
.slice(start,end) で文字列のstart文字目からend文字目を抽出する
'あいうえお'.slice(0,4)//'あいうえ' startのカウントは0から、endは4文字目'お'は含まない

.slice(start) endを省略するとstart文字目から最後まで抽出する
'あいうえお'.slice(3));//'えお'

.slice(-start) startにマイナスの数字を設定すると末尾からstart文字分抽出→これを使う！
'あいうえお'.slice(-3));//うえお

##つまり…

Array(length).join('0') + number
で桁数-1個の0とnumberを連結し

.slice(-length)
で末尾から桁数分抽出している

##わーい

```js
zeroPadding(4,5)//00004
zeroPadding(11,5)//00011
zeroPadding(207,5)//00207

```
おわり
nxtOSEK の開発環境を homebrew cask で作成する

# この記事でできること
Mac にて [nxtOSEK](http://lejos-osek.sourceforge.net/jp/whatislejososek.htm) の開発環境を作成できます。

# 環境構築
前提：[homebrew](https://brew.sh/index_ja) をインストールしていること。

```
brew tap kijuky/lego
brew cask install nxtosek
```

# サンプルを動かしてみる

## ビルド

```
cd /usr/local/Caskroom/nxtosek/v218/samples_c++/cpp/Helloworld
make all
```

## 実機に転送

```
./rxeflash
```

# 参考文献
- [nxtOSEK Installation in Mac OS X Lion](http://lejos-osek.sourceforge.net/installation_Mac_OS_X_Lion.htm)
- [ETロボコン開発環境構築 for Mac](https://qiita.com/tac0x2a/items/b1d82050c660935765ef)
C#で三角形作成　Windowsフォームアプリケーション編

#初めに
このブログでは、学校で習った事や、自分で勉強したことを記事にまとめています
今回は、前回コンソールアプリケーションを使って三角形を作ったので、次はWindowフォームアプリケーションで三角形を作ろうとおもいます。


#開発環境
VisualStudio2012
Win10　x64

#ソースコード

```Form.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AST_CS
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Btn_Exe_Click(object sender, EventArgs e)
        {
            int Cnt = 0;

            Txt_Out.Text = "";

            Cnt = int.Parse(Txt_In.Text);

            for (int i = 0; i < Cnt; i++)
            {
                for (int j = 0; j <= i; j++)
                {
                    Txt_Out.Text = Txt_Out.Text + "*";
                }
                Txt_Out.Text = Txt_Out.Text + "\r\n";
            }

        }
    }
}

```
▼実行例
![f14.png](https://qiita-image-store.s3.amazonaws.com/0/249281/cf9c389d-c123-33d7-2a61-f4f55b9f2132.png)

やはりコンソールで作るのとWindowフォームで作ると書き方が結構変わりました('ω')
Txt_outというのが画像で＊が出ているところを表しています。
Txt_Inは入力値の部分です。
他は書き方が変わっているだけなので前回のVBのものと同じ部分が多いです。

---
最後まで読んでくれてありがとうございましたありがとうございました!
クロスドメインで'X-Requested-With'の設定

## クロスドメインでAjax通信をする

クロスドメインでapi通信を行う際、
`Access-Control-Allow-Origin`などの許可が必要になり、これはapi側に実装します。

さらに、Cookieを扱いたい場合は、`withCredentials`の設定も必要になり、api側で許可し、さらにクライアント側でも設定を送信しないとCookieを扱うことができません。

また、クロスドメインの場合、headerに`'X-Requested-With' : 'XMLHttpRequest'`を入れて送信しなければ、api側でAjaxであることが伝わらないとのことだったので

```js
headers: {'X-Requested-With': 'XMLHttpRequest'}
```

をajaxで送信しましたが、

Failed to load https://test.com/api/sendData: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://test.com' is therefore not allowed access. The response had HTTP status code 400.

というエラーが出るしAjax判定もされず…。
たぶん、`withCredentials`の設定もしているからかなと思って同じところに設定を書いたらうまくいきました。


```js
$(document).ready(function() {
    var post_data = {};
    $.ajax({
	type : 'POST',
	url : 'https://test.com/api/sendData',
	data : {
		'post_data' : post_data
		},
	xhrFields: {
        withCredentials: true,
		X-Requested-With : 'XMLHttpRequest'
                },
	// 通信成功時処理
	success : function(result) {
		},
	// 通信失敗時処理
	error : function(result) {
		}
    });
});
```


これで、送信の形式がOPTIONからPOSTになり、Ajaxで送信している判定もされた。
CPU設計実習(授業用) - 0章 ガイダンス

# 0章 ガイダンス

## 授業の概要と目的

この「組込みシステム」の授業では、非常にシンプルなアーキテクチャを持つコンピュータCDECvの動作実験や設計実習を通して、コンピュータ内部の動作の仕組みと構造を体験的に学んでいきます。
みなさんはこれまで「ディジタル回路基礎」や「ディジタル回路」などの授業で、様々な論理回路の動作や構造、そしてその設計手法を学んできました。
この授業では、これまで学んできた各種の論理回路を組み合わせていくことで、実際にコンピュータ(CPU, MPU)を構築していきます。
実習で用いるコンピュータCDECvは様々なカスタマイズか可能で、例えばみなさん自身で考えた独自の命令を追加したりすることができます。
世界で一つだけの皆さんオリジナルのコンピュータを作ることができる、とてもエキサイティングで楽しい授業になるかと思います。

## CDECvとは

CDECv (Yet another CDEC, CDEC Voyager) はコンピュータアーキテクチャを学ぶために開発された、非常にシンプルなアーキテクチャを持つ8ビットコンピュータボードです。
CDECvのオリジナルは、木村真也氏(群馬工業高等専門学校教授)と鹿股昭雄氏(元 仙台高等専門学校教授)により開発されたコンピュータボードCDEC(Computer Design Education Computer)です。
CDECvはCDECをFPGAの評価ボード(DE0-CV)上で実装できるように修正したものですが、そのアーキテクチャや構造はオリジナルのCDECのものを引き継いでいます。

![cdec.jpg](https://qiita-image-store.s3.amazonaws.com/0/25656/11131fad-8bf9-c56f-2fc5-acb2c2ef7fe9.jpeg)

<図0.1 CDEC(左)とCDECv(右)>

CDECvは以下に示す特徴を持った、コンピュータアーキテクチャ教育用のコンピュータボードです。

- 非常にシンプルなアーキテクチャである(5個のレジスタセットと256バイトのメモリ)
- データとアドレスともに8ビット幅の8ビットアーキテクチャである
- シンプルかつプログラミングを行うのに十分な命令セットをもつ
- 1クロック単位でコンピュータ内部のデータのやり取りを観察できる
- コンピュータ内部は大きく分けて、データパス部と制御部からなる
- データパス部は1本のデータバスで構成される非常にシンプルなハードウェア構造である
- 制御部の論理回路を改造することで新たな命令を追加することができる

CDECvはterasic社のFPGA評価ボードDE0 CVに搭載されたFPGA(Cyclone V)上に実装することができます。
DE0 CVボードのスイッチやボタン、LEDなどの入出力デバイスによって、0.5クロック単位でのプログラムのステップ実行を行い、CPU内部の状態の変化を観察できるようになっています。

また、CDECvはVerilog HDL(System Verilog)によって設計されています。
したがって、HDLの記述を変更することによってCDECvの動作を変更することができます。
変更した回路情報をDE0 CVボードに書き込むことで、変更した新たな動作を確認できます。

## 参考資料

- 木村 真也 (著), 鹿股 昭雄 (著), 樋口 龍雄 (監修), ["コンピュータの原理と設計 (原理がわかる工学選書―コンピュータ回路工学編) (絶版)"](https://www.amazon.co.jp/dp/4526039187), 日刊工業新聞社, 1996
- Sarah L. Harris (著), David Money Harris (著), 天野 英晴 他(翻訳), ["ディジタル回路設計とコンピュータアーキテクチャ 第2版"](https://www.amazon.co.jp/dp/4798147524/), 翔泳社, 2017
- デイビッド・M・ハリス (著), サラ・L・ハリス (著), 天野 英晴 他(翻訳), ["ディジタル回路設計とコンピュータアーキテクチャ[ARM版]"](https://www.amazon.co.jp/dp/4434218484/), 星雲社, 2016
- ジョン・L. ヘネシー (著), デイビッド・A. パターソン (著), 成田 光彰 (翻訳), ["コンピュータの構成と設計 第5版 上/下"](https://www.amazon.co.jp/dp/4822298426), 日経BP社, 2014
- "DE0-CV Board", Terasic inc. , URL: [http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&No=921](http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&No=921) (2018/06/04 時点)
- 実習用CDECv設計ファイルリポジトリ CDEVsv_with_monitor, [https://github.com/rikitoro/CDECsv_with_monitor](https://github.com/rikitoro/CDECsv_with_monitor) (2018/06/04 時点)

---

## CDECv on DE0-CV の使い方
可逆暗号メモ

可逆暗号を使う際はDBとアプリケーションは別のサーバーに分ける。

アプリケーション側に暗号鍵が存在することになるので、DBにアクセスできるような状態になった際に鍵も取得できてしまったら暗号化が無意味。

対象例

漏らしたくない情報で複合化する必要のある情報（メールアドレスや個人住所等）

実装してみるとログ調査や検索等（完全一致なら問題ない）で利便性が落ちる

**利便性と信頼性のトレードオフ**
eclipseでソースコードの変更が反映されない場合

## 起こったこと
eclipseを触り始めたばかりで、初歩的なミスかもしれません。
ソースコード自体にはエラーがないのですが、Antでビルドしても、ビルドは成功しているが、実行結果が変わらず困っていた。

### 目次

1. 原因
2. 対策

## 1. 原因(僕の場合)

### 1-1.プログラムのエラーはないが、ビックリマークはついていた。
プログラムのエラーは消えたしビルドもできてるのに、なんで反映されないんだ、、、
ググったら、クリーンとかしたらいいって書いてあるけど変わらず。

## 修正したこと
プロジェクトにビックリマークが付いていた原因は、Antのランライムに設定していたJarファイルを消してしまっていて、Jarファイルの部分にバツマークが付いていた。パスを設定し直したらビックリマークがなくなった。
**プログラムのエラー以外にも、ビックリマークが出ていたらそれも修正しなきゃ正常にビルドできないことがわかった**

## 感想
eclipse初めてがっつり触り初めて、他の開発環境と少しめんどくさい点がいっぱいあった。
逆に他の開発環境が便利すぎただけなのかも(Unityとか便利だよね。。。)
Ｃ＃のコンソールで三角形を作る

#初めに
このブログでは学校で習ったことや自分で勉強したことを記事にまとめてます

今回は、前の投稿でＶＢで三角形を作ったので、次はＣ＃で三角形を作ろうと思います

#開発環境
Visual Studio2012
Win10 x64

#ソースコード

```AST.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AST_CSCN
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("数値を入力してください：");
            int Cnt = int.Parse(Console.ReadLine());
                int x, y;
                for (y = 0; y < Cnt; y++)
                {
                    for (x = 0; x <= y; x++)
                    {
                        Console.Write("*");
                    }
                    Console.Write("\r\n");
                }
            Console.Write("キーを押すと終了します");
            Console.ReadKey();
            return;
        }
    }
}

```

VisualStudioでコンソールアプリケーションの方から作ったものです。数値を入力するとその入力値で三角形を作ります。
▼実行例
![f13.png](https://qiita-image-store.s3.amazonaws.com/0/249281/b09c82c2-db30-40eb-6e76-772add752172.png)
入力した数値が８
なので、８まで繰り返しで表示しています。
VBのものと違う部分を簡単に挙げるとするとforの宣言部分と改行は\r\nを使うところですかね('ω')

---
最後まで読んでくれてありがとうございました( ﾟДﾟ)