OmniAICreator/Qiita-1.07M huggingface dataset:
変化値と合計値をもつテーブルの最新分から、各行逆算する SQL

環境
----

- Oracle 11g

サンプルデータ
----

### テーブル作成

各IDごとに、 1 日分の移動距離と総移動距離をもつテーブル。

```sql:create_table
CREATE TABLE TRAVEL_LOG (
  ID              VARCHAR2(1)
 ,DAY             DATE        NOT NULL   -- 日付
 ,DISTANCE        INTEGER     NOT NULL   -- その日の移動距離
 ,DISTANCE_TOTAL  INTEGER     NOT NULL   -- その日の移動距離を含めた合計値
 ,PRIMARY KEY(ID, DAY)
);
```

### データ流し込み

* 最新分の総移動距離は 1000 だが、それ以前の総移動距離はわからない。総移動距離の列が後から足されたという想定。
    * あくまで想定。このテーブル構成がちゃんとしてるとは思えない。
* 各 ID の移動距離には少しだけ差をもたせている。

```sql:insert_and_update_samples
INSERT INTO TRAVEL_LOG
    SELECT
      CHR(ASCII('A') + MOD(ROWNUM - 1, 3))   -- [A-C]
     ,TO_DATE('20180101', 'YYYYMMDD') + FLOOR((ROWNUM - 1) / 3)
     ,ROWNUM
     ,0
    FROM
      (SELECT 0 FROM ALL_CATALOG WHERE ROWNUM <= (3 * 5))   -- 5 日分
;

-- 日付の最新分にだけ値を設定する
UPDATE TRAVEL_LOG
SET
  DISTANCE_TOTAL = 1000
WHERE
  (ID, DAY) IN (
      SELECT ID, MAX(DAY) FROM TRAVEL_LOG
      GROUP BY ID
  )
;
```

### 内容

```sql:select
SELECT * FROM TRAVEL_LOG
ORDER BY ID, DAY;
```

| ID | DAY        | DISTANCE | DISTANCE_TOTAL |
|----|------------|---------:|---------------:|
| A  | 2018-01-01 |        1 |              0 |
| A  | 2018-01-02 |        4 |              0 |
| A  | 2018-01-03 |        7 |              0 |
| A  | 2018-01-04 |       10 |              0 |
| A  | 2018-01-05 |       13 |           1000 |
| B  | 2018-01-01 |        2 |              0 |
| B  | 2018-01-02 |        5 |              0 |
| B  | 2018-01-03 |        8 |              0 |
| B  | 2018-01-04 |       11 |              0 |
| B  | 2018-01-05 |       14 |           1000 |
| C  | 2018-01-01 |        3 |              0 |
| C  | 2018-01-02 |        6 |              0 |
| C  | 2018-01-03 |        9 |              0 |
| C  | 2018-01-04 |       12 |              0 |
| C  | 2018-01-05 |       15 |           1000 |



実施
---

### SQL (SELECT)

```sql:fill_distance_history
SELECT
  ID
 ,DAY      
 ,DISTANCE
 ,FIRST_VALUE(DISTANCE_TOTAL)
      OVER (
        PARTITION BY ID
        ORDER BY DAY DESC
      )
      + DISTANCE
      - SUM(DISTANCE)
            OVER (
              PARTITION BY ID
              ORDER BY DAY DESC
            )
FROM
  TRAVEL_LOG
ORDER BY ID, DAY
;
```

### 結果

| ID | DAY        | DISTANCE | DISTANCE_TOTAL |
|----|------------|---------:|---------------:|
| A  | 2018-01-01 |        1 |            966 |
| A  | 2018-01-02 |        4 |            970 |
| A  | 2018-01-03 |        7 |            977 |
| A  | 2018-01-04 |       10 |            987 |
| A  | 2018-01-05 |       13 |           1000 |
| B  | 2018-01-01 |        2 |            962 |
| B  | 2018-01-02 |        5 |            967 |
| B  | 2018-01-03 |        8 |            975 |
| B  | 2018-01-04 |       11 |            986 |
| B  | 2018-01-05 |       14 |           1000 |
| C  | 2018-01-01 |        3 |            958 |
| C  | 2018-01-02 |        6 |            964 |
| C  | 2018-01-03 |        9 |            973 |
| C  | 2018-01-04 |       12 |            985 |
| C  | 2018-01-05 |       15 |           1000 |

### SQL (UPDATE)

(未作成)
GCP(Google Cloud Platform)での無料GCE(Google Compute Engine)インスタンス作成

はじめてGCP(Google Cloud Platform)を使ってみました。GCE(Google Compute Engine)を使っています。これは、AWSのEC2にあたるものです。
「パブリッククラウドならAWSだろ」程度の認識しかなかったですが、無料枠がすごく「f1-micro」というタイプのインスタンスであれば**永続無料**です(2018/2/11時点[「Google Cloud Platform の無料階層」](https://cloud.google.com/free/?hl=ja)参照)。

#手順
##1. GCP使用開始
[GCPトップページ](https://cloud.google.com/?hl=ja)にアクセス。この時点では、Googleサービスにユーザ認証済みです。

「無料トライアル」を選択。
![10.GCE.01.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/74b23a3e-f5e2-b2d6-ab38-037002790f68.jpeg)

「同意して続行」を選択。
![10.GCE.02.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/e3a68b8c-f627-ff7a-b37d-ae1d7d846278.jpeg)

画面は省略しますが、個人情報入力しています。

##2. インスタンス登録

「Compute Engineを試す」を選択。
![20.StartGCE.01.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/938ac4af-9cd5-e490-99bd-95a5c2dd9dd5.jpeg)

右側の画面で「続行」を選択。
![20.StartGCE.02.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/1f982262-5f01-7092-ae5e-9c75cc09b933.jpeg)

デフォルトのプロジェクトが選択された状態で続行。プロジェクトを新規作成してもいいです。
![20.StartGCE.03.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/44c30346-0a5b-b2c2-91b6-a731662115e4.jpeg)

メニューから「Compute Engine」を選択。
![20.StartGCE.04.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/29162ff5-17d9-d29d-9ab2-7150b737510c.jpeg)

「作成」を選択。
![20.StartGCE.05.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/8666856e-ebdd-6057-0eab-db57b58c7fce.jpeg)

インスタンス作成画面です。
適当に名前をつけて、ゾーンにusを選択します。**us以外は無料でなくなってしまう**ので注意してください。そして、マシンタイプをmicroにします。
![20.StartGCE.06.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/13bf7b43-62d6-0699-fceb-17137bd8a2e2.jpeg)

OSイメージに今回は「Ubuntu17.10」を選択して、ディスクサイズを無料枠の30GBに設定。
![20.StartGCE.07.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/27ef3724-ef84-2bec-fa75-c3a7f0924a08.jpeg)

あとはデフォルト設定のままで作成。
![20.StartGCE.08.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/84fa0d5c-e148-4311-f86f-fbb832a5c8ea.jpeg)

この後、IP固定も無料と知って、IPアドレスを静的に設定(メニューの「VPCネットワーク -> 外部IPアドレス」から作成したインスタンスを見つけてタイプを「静的」に設定)。
※**固定IPアドレスがどこにも割り当てられなくなると課金が発生**なので要注意
![20.StartGCE.09.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/86b425d9-2b53-6129-44b0-b2b40aa74669.jpeg)

#SSHでアクセス
SSHでアクセスして確認します。「SSHクライアントをインストールしなきゃ」と思っていましたが、ブラウザでSSHアクセスできました。こんなことできるんだ・・・

#リモートデスクトップでアクセス
リモートデスクトップでアクセスできるようにxrdpとgnome3をインストールしておきました。[「GCEにUbuntuを入れ、xrdpとgnome3(gnome shell)でリモートデスクトップ環境を構築する」](https://qiita.com/saizz/items/df3d32266bc9b6f37e2a)をさんこうにしました。
実際にWindowsからリモートデスクトップで使ってみたのですが、遅いです。インスタンスタイプをg1-smallにしても遅くて辛いです。パフォーマンスチューニングまではできていません。
Spring Data JPA において、 外部制約違反でエンティティをパーシストできない現象について

# 概要

Spring Data JPA において、Cascase.ALL のリレーションがあるエンティティのインサート時に、Many 側からの INSERT が発生したため、外部制約違反が発生してしまう現象が発生しました。
下記の例ですと、order から insert が実行されるので、親である user に insert される order の userNo が存在していません。
そのため、外部キー制約にて例外が発生しました。

``` User.java
@Entity
@Getter
@NoArgsConstructor
public class User {

    @Id
    private String userNo;

    @OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Order> orders;
}
```

``` Order.java
@Entity
@NoArgsConstructor
public class Order {

    @Getter
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Getter
    private String userNo;

    @ManyToOne
    @JoinColumn(name = "user_no", updatable = false, insertable = false)
    private User user;
}
```

例外が発生する SQL

```.sql
insert into order (id, user_no ...) values (1, '001' ...);
```

# 原因

JpaRepository にて該当の User オブジェクトを取得しているため、EntityManager の管理下にあるためでした。
EntityManager#detach を実行することで、user から insert が実行され、正常に order を登録できました。

``` UserRepository.java


@Repository
public interface UserRepository extends JpaRepository<User, Integer> {

    @EntityGraph(value = "user", attributePaths = "orders", type = EntityGraph.EntityGraphType.LOAD)
    Optional<User> findOne(String userNo);
}
```

``` UserService.java
@Service
@RequiredArgsConstructor
@Slf4j
@Transactional
public class UserServiceImpl implements UserService {

    private final UserRepository userRepository;
    private final EntityManager em;

    @Override
    public User getUser(String userNo) {
        Optional<User> optional = userRepository.findOne(userNo);
        User result = optional.get();
        em.detach(result); 
        return result;
    }
}
```

## 補足

今回の要件では、登録されている User オブジェクトの洗い替えを実行したいために、登録対象の User オブジェクトを削除するため、
上記のメソッドを実行しています。
Chromeでスマホにlocalhostのページを表示させてコンソールデバッグ

# この記事を読んでできること / なにがうれしいの
- PC上で立ち上げたlocalhostのページがスマホで表示できる
    - 開発中のWebページがスマホでもチェックできてうれしい
- スマホで見た目を確認しながらPC上でコンソールを確認できる
    - スマホ用ページでもprintデバッグやCSSをグリグリいじるアレが利用できてうれしい
    - PCのキーボード操作も受け付けてくれるからスーパーリロード(Shift+⌘+R)や「特定のキーを押すとデバッグモードになる」ような場合もさくっと押せてうれしい

# 環境
- Chromeの入ったMac
- Chromeの入ったAndroid
- 上記をつなぐUSBケーブル

# やり方
**1** : 開きたいhtmlページがあるところに移動

```console
cd public_html
ls
index.html ...
```
**2** : PHPのビルトインウェブサーバーを立ち上げる
[PHP: ビルトインウェブサーバー \- Manual](http://php.net/manual/ja/features.commandline.webserver.php)

```console
php -S localhost:8080
```

**3** : PC版Chromeからinspectページ `chrome://inspect/#devices` にアクセス

**4** : スマホとPCをUSBケーブルでつなぐ

- 充電用ケーブルじゃないか確認。適当に買うとicos充電用ケーブルとかだったりする。データがやりとりできるものか確認して買おう！
- スマホの開発者向けオプションでUSBデバッグを有効にしておく

**5** : inspectページのRemote Targetにスマホ名が表示されているか確認

**6** :「Port forwarding」ボタンを押して各種設定を確認

-  「8080 - localhost:8080」がリストにある
- 「Enable port forwarding」にチェックをつける
- Doneボタンを押す

**7** : スマホでChromeを開く

**8** : inspectページの「Open tab with url」欄に `localhost:8080` と入力

**9** : inspectページの「inspect」リンクを開く

**10** : コンソールが出るのであとはもくもくとデバッグ
Linuxでレジスタ操作

# 概要

RaspberryPiやらNanoPiやらSBC使っていると、直接レジスタ操作したくなってくる。
ので、ちょっとレジスタ操作用アプリ作ってみた。

# コード

```C:reg.c
#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <stdint.h>

int main( int argc, char * argv[] )
{
	int				fd;
	int				num			= 4;
	int				block_size	= 16;
	void*			base_addr	= 0;
	void*			base_addr2map;
	void*			map_addr;
	void*			map_addr_target;
	unsigned int	value;
	int				mode;
	
	if( argc < 3 )
	{
		printf( "reg r32 <StartAddress> <num=16>\n");
		printf( "reg w32 <Address> <data>\n");
		return  -1;
	}

	sscanf( argv[2], "%p", &base_addr );
	
	if( 0 == strcmp( argv[1], "r32" ) )
	{
		mode		= 'R';
		num			= 16;

		if( 3 < argc )
		{
			sscanf( argv[3], "%d", &num );
		}
		block_size	= num * 4;
	}
	else if( 0 == strcmp( argv[1], "w32") )
	{
		mode		= 'W';
		block_size	= 4;
		
		if( argc < 4 )
		{
			printf( "reg w32 <Address> <data>\n");
			return  -1;
		}
		
		sscanf( argv[3], "0x%x", &value );
	}

	fd	= open( "/dev/mem", O_RDWR | O_SYNC );
	if( fd == -1 )
	{
		printf( "ERROR! Cannot open /dev/mem\n" );
		return	-1;
	}


	base_addr2map	= (void*)(((size_t)base_addr) >> 12 << 12);
	block_size		+= (size_t)base_addr - (size_t)base_addr2map;

	map_addr	= mmap( NULL, block_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, (off_t)base_addr2map );
	if( map_addr == MAP_FAILED )
	{
		printf("ERROR! Cannot map physical addr to virtual addr. %p\n", base_addr );
		return	-1;
	}

	map_addr_target	= (void*)((size_t)map_addr + (size_t)base_addr - (size_t)base_addr2map);

	close( fd );
	
	switch( mode )
	{
	case 'R':
		{
			uint32_t*	addr	= (uint32_t*)map_addr_target;
			int			i;
			
			for( i = 0; i < num;i++ )
			{
				printf( "%p : 0x%08x\r\n", &((uint32_t*)base_addr)[i], addr[i] );
			}
		}
		break;
		
	case 'W':
		{
			uint32_t*	addr	= (uint32_t*)map_addr_target;
			uint32_t	org		= addr[0];

			addr[0]	= value;
			
			msync( map_addr_target, 4, MS_SYNC );
			printf( "%p : 0x%08x --> w 0x%08x --> r 0x%08x\r\n", base_addr, org, value, addr[0] );
		}
		break;
	}

	munmap( map_addr, block_size );

	return	0;
}
```

# 使い方

ソースゲット＆コンパイル

git clone https://github.com/blue777/NanoPi-NEO/
cd NanoPi-NEO
gcc reg.c -o reg

## レジスタ読み込み

reg r32 [PhysicalAddress] [Num=16]

r32 は、Read で 32bit単位読み出し。
r8とかは、まだない。

PhysicalAddressにレジスタのアドレスを入れる。
Numには、表示する個数

```console:例
root@NanoPi-NEO-Plus2:~/NanoPi-NEO# ./reg r32 0x1c22000

0x1c22000 : 0x00060115
0x1c22004 : 0x00001f77
0x1c22008 : 0x00000000
0x1c2200c : 0x00000044
0x1c22010 : 0x00000000
0x1c22014 : 0x000400f4
0x1c22018 : 0x003e0000
0x1c2201c : 0x00000080
0x1c22020 : 0x00000000
0x1c22024 : 0x00000111
0x1c22028 : 0x00d73c06
0x1c2202c : 0x00000000
0x1c22030 : 0x00000001
0x1c22034 : 0x00001031
0x1c22038 : 0x00000000
0x1c2203c : 0x00000000
```

## レジスタ書き込み

reg w32 [PhysicalAddress][Value]

w32 は、32bit単位書き込み。
w8とかは、まだない。

PhysicalAddressにレジスタのアドレスを入れる。
Valueに書き込む値を設定

```console:例
root@NanoPi-NEO-Plus2:~/NanoPi-NEO# ./reg w32 0x01c22004 0x00001775

0x1c22004 : 0x00001f77 --> w 0x00001775 --> r 0x00001775
```
書く前に一回読みだして表示し、書き込んだ後、再度読み出して表示しています。

# 最後に

レジスタ操作等は、危険ですので理解したうえでご利用くださいませ。
最悪、壊れます。

あと、root権限必要となります。
20代の若手SEが概要設計のコツを書いてみる

## はじめに

[こちらの記事](https://qiita.com/y-some/items/90651c1e27f7798f87c6)に触発されたので、私も設計時に心がけていることを書いてみます。
2年ほど設計をメインで仕事しており、そのときに学んだことです。
今は設計から実装まで幅広く担当しています。

エンジニア歴どころか生まれてから20数年の私ですが、全ての設計家(今思いついた言葉)の参考になれば幸いです。

## 「概要設計」とは？

私が所属している部署には「概要設計」という工程があります。
おそらく「基本設計」と同義だと思います。

あえてその詳細には触れません。
既存のシステムに機能を追加する「基本設計」として以下のコツを読んでみてください。

## 概要設計書を作成するコツ

### ①まず概要を簡潔に書く

まず追加する機能の概要を書きます。
ここで長々と書くと設計書を開いただけでオエッとなるので、できるだけ簡潔にまとめます。
2〜3行でまとめられたらGoodです。

### ②次に機能の目的と理由を書く

概要のほか、その機能を使って何がしたいのかと、なぜそれをしたいのかを書きます。
目的と理由があると内容がスッと入ってきやすいし、レビュアーがその目的を達成するためのさらにいい案を思いついてくれるかもしれません。

目的が複数ある場合は全て書き、それぞれに理由を書きます。

「ユーザーに言われた」「表向きではない別の理由がある」など特別な事情がある場合、理由とは別に「背景」として書くといいです。

### ③全体を俯瞰できる絵が欲しい

画面追加だったら画面フローのように、パッと見で全体がわかる絵があると詳細を読もうという気になります。

他には業務内容を追加する機能だったら業務フロー、モジュールの追加だったらアーキテクチャ図などが適切かもしれません。
難しいですが、全体の俯瞰図は臨機応変に書くのがいいです。

### ④絵を多めに

できる限り絵が多い方が読んでもらえるし、正しく理解してもらえます。
まずざっくり絵で表現し、「ここはどうなるの？」と質問されたら追記すればいいと思います。
細かい指摘だったら詳細設計に追記することも考えます。

### ⑤テンプレなんてくそくらえ

型にはめるとかえって表現しづらくなります。
試行錯誤して自分だけのテンプレを作るのがいいかもしれません。
そして他の人の設計のいいところを見つけて盗み合う。

あとは対応内容によって書く項目が変わるので、そういった意味でもテンプレにこだわらない方がいいです。
例えば機能追加だったら概要から目的、理由まで欲しいですが、単純なバグフィックスだったらバグの詳細と対応方法のみでいいと思います。

### ⑥時間との戦い

限られた時間内で設計することが多いと思います。
そのためまずテキストベースで全体を作成し、そのあと時間の許す限りで絵を追加するなどリファクタリングしていくのがいいです。

### ⑦口で伝えた方が早い

最も早い伝達方法は口だと思います。
設計書に残さなくてもいいところは、あえて書かずに口頭で伝えるのもありです。
設計書もシンプルになるので一石二鳥です。

実装者が近くにいない場合はTELしてください。

### ⑧実装者に考える余地を与える

「iniファイルに○○という設定を追加する」「△△クラスに××というメソッドを追加する」など、ここまで書く必要はありません。
まず概要設計の範囲を超えていますし、何より自分で考えることが少ないと実装者がつまらないです。
概要設計時に「正解」が見つかることも多々あると思います。それでも書いてはいけません。実装者に自分で気づいてもらうことで成長を促します。どうしても書きたければ欄外や詳細設計にでも書いてください。

※私は経験がないのですが、オフショアでPGを外注する場合は詳細までびっちり書かないといけないようです。

### ⑨リリース後はメンテしない

リリース後までいちいち設計書をメンテしていたらキリがないです。
機能を修正する場合は「機能修正」として新しく概要設計しましょう。
そのときに過去のリンクを貼ると親切です。

### ⑩そもそも概要設計はなぜ作成する？

概要設計を誰のために、なぜ作成するのか、それを把握して作る意味を知ることは大事です。
これは概要設計に限らず、どんな作業でも同じです。

5W1Hで考えてみます。以下は私の例です。
　　　いつ：業務時間内
　　どこで：社内
　　　誰が：レビュアー(同僚にOKをもらったら上司)、実装者
　　　何を：対応内容の概要を把握する
　　　なぜ：レビュアー 実装の許可を出すため(これ微妙。もっとピンとくる答えがありそう)
　　　　　　実装者 実装するため
どのように：設計書を読んでもらう、口頭で説明する、など

主に上司が確認する資料、とわかればPGの詳細なんていらないことがわかります。
ほかにも過去の設計を読んでこのように対応した理由を知る、などもあると思いますが、
とりあえず一番大きな理由のみ載せておきます。

## 概要設計の例

仕事以外で設計したことがないので手元に設計書がありません。
反響があればGoogleスプレッドシートなどで作成して載せたいです。

ちなみに仕事ではExcel方眼紙で設計しています。
いろいろ批判があるようですが、仕事のメインPCがWindowsだし使い慣れてるし。
何より他のフォーマットで書いたら上司が「え？」ってなると思います。

え？エクセルはバージョン管理できないって？
コピーして「○○_old_20180223.xlsx」とか付ければいいじゃないですか！
設計書まで細かくバージョン管理する意味ってありますかね？

## おわりに

20代の駆け出しSEが書いてみました。
共感・批判大歓迎です。感想でもいいのでここまで読んで思ったことをご気軽にコメントください！

あと以下の観点は敢えて触れていません。

- 表記揺れ
ユーザーに出すマニュアルではないので気にしなくていいと思います。
ただし、表記揺れで信用をなくす相手だったら気にしましょう。

- デザイン
これは「非デザイナー向けの○○」など、偉大なる先人たちの記事を読むのがいいです。
最低限いえるのは、最初に概要や俯瞰図に目が行くようにしましょう。
「どこを読んだらいいかわからない」状態になったらオシマイです。

触れちゃいましたね。笑

- 詳細設計  
これはマジで触れません。いつか別記事でがっつり触れたいです。

## 参考リンク

- [詳細設計書という名のゴミ | Gm7add9](https://gm7add9.wordpress.com/2012/11/30/詳細設計書/)  
2019/12/27 追記  
好きな記事だったのですが、リンク切れになってしまいました
ビット幅が異なる信号間のアサイン

Verilogではビット幅が異なる信号を代入することが良くあります。以下のような例です。

```verilog
logic [31:0] a;
logic [15:0] b, b2, b2;
logic c;

assign a = b; //アサインによる代入

always_comb begin
  a = b; //alwaysで組み合わせ回路を記述する場合
end

assign a = c ? b1 : b2; //これも同様。aとb1,b2のビット幅は合わせたい
```

言語仕様上は左辺より右辺のビット幅が短い場合は適切にビット拡張、長い場合は切り捨てとなっています。上記の場合では、いずれもa[31:16]には0が自動的に割り当てられます。
しかし、この機能に頼ると、意図しない信号のアサインの時にミスが検出できないため、一般には左右のビット幅は合わせるのがよいコーディングスタイルとされています。

```verilog
wire [31:0] a;
wire [15:0] b;

assign a = {16'b0, b};
```

悩むのが、ビット幅がパラメータで指定されている場合です。せっかくパラメータで、後のビット幅変更に対応できるようにしているのに、この書き方では、パラメータの値を変更する度にその部分の修正が必要になります。

```verilog
localparam A_W = 32;
localparam B_W = 16;

wire [A_W - 1:0] a;
wire [B_W - 1:0] b;

assign a = {16'b0, b}; //B_Wを17にしたら右辺を{15'b0, b}に変更する必要がある
```

対処方法を以下にいくつか挙げます。

#ダミーのall 0/ all 1信号を定義する
泥臭いですが、どのツールでも確実に動作します。他の方法と比べて、簡単に符号拡張する方法がない点、サイズ間の矛盾チェック、下の例だとA_WよりB_Wが大きくなった場合のシミュレータによるチェックが働かないのが欠点です。何らかの理由で他の方法が適用できない場合にどうぞ。


```verilog
localparam A_W = 32;
localparam B_W = 16;

wire [A_W - 1:0] a;
wire [B_W - 1:0] b;

localparam [A_W - 1 : 0] ZERO_VECTOR = {A_W{1'b0}};

assign a = {ZERO_VECTOR[A-W - 1 : B_W], b};
```

#parameterの値を使用して足りないビット部分を埋める
Verilogの場合のお勧めです。右辺が符号付信号の場合も簡単に符号拡張できます。パラメータの変更により右辺のほうが左辺よりも長くなってしまった場合は(A-W < B-Wの場合は)シミュレータがエラーを吐いてくれます[^1]。

```verilog
localparam A_W = 32;
localparam B_W = 16;
localparam C_W = 33;

wire [A_W - 1:0] a;
wire [B_W - 1:0] b;
wire [C_W - 1:0] c;

assign a = {{A_W - B_W{1'b0}}, b};// 0で埋める場合
assign a = {{A_W - B_W{b[B_W - 1]}}, b}; // 符号拡張
assign a = {{A_W - C_W{1'b0}}, c}; // エラー
```

#System Taskを使用する
System Verilogの場合のお勧めです。上記の方法では、ビット幅がparameterで定義されていない場合に対応できないのが欠点です。これに対応するにはSystem Verilogのみですが、$bits等のSystem Taskを使用する方法があります。私の知っている範囲では、全てのシミュレータ、論理合成ツールが対応しています。ツールサポートの問題さえなければこの方法が一番汎用性があります。

```verilog
localparam A_W = 32;
localparam B_W = 16;

wire [A_W - 1:0] a;
wire [B_W - 1:0] b;
wire [3:0] c;

assign a = {{$bits(a) - $bits(b){1'b0}}, b}; // 0で埋める場合
assign a = {{$bits(a) - $bits(b){b[B_W - 1]}}, b}; // 符号拡張
assign a = {{$bits(a) - $bits(c){1'b0}}, c}; //ビット幅がparameterでない場合にも対応可能
```
#LRM
* Verilog (IEEE Std 1364-2005)
 * 5.1.14 Concatenations
* System verilog (IEEE Std 1800-2012)
 * 11.4.12.1 Replication operator
 * 20.6.2 Expression size system function

[^1]: 言語仕様としてはエラーなのですが、実際の対応はシミュレータ依存のようです。この記事を書くにあたり複数のシミュレータで確認しましたが、特にオプション指定しない場合はVCSとIcarusではエラー、Incisiveでは警告、Riviera Proではそのまま動作となりました。ツールのバージョンやオプション指定でも変わるかもしれません。
Elasticsearch 6.2.2 で elasticsearch-head を使うためにやったこと

Solr Admin みたいなインデックス可視化ツールはないかなと探したら elasticsearch-head というものがあるということで導入しました。

手元の環境は以下になります。

* Ubuntu 16.04 LTS
* Elasticsearch 6.2.2

最初に Node.js をインストールします。

```
$ curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
$ sudo apt-get install -y nodejs
$ sudo apt-get install -y build-essential
```

次に [公式ページ](https://github.com/mobz/elasticsearch-head) を参考に以下のようにインストールします。

```
$ git clone git://github.com/mobz/elasticsearch-head.git
$ cd elasticsearch-head
$ npm install
```

今回はプラグインとしてインストールしていないので、elasticsearch.yml に以下の設定が必要になります。

```YAML
http.cors.enabled: true
http.cors.allow-origin: "*"
```

上記の設定を行うとセキュリティリスクが高まるようなので、現状だとこのツールは検証環境などのインデックスを確認するための用途になるかと思います。

最後は以下のようにして起動します。

```
$ npm run start
```

### 参考になった記事
[パッケージマネージャを利用した Node.js のインストール](https://nodejs.org/ja/download/package-manager/#debian-and-ubuntu-based-linux-distributions-debian-ubuntu-linux)
Solidityの整数リテラルとビット演算

# 忙しい人のための要約

- Solidityの整数リテラルは「その値が収まる、最も小さい型」になるようです。
- 通常は(たぶん)気にしなくて良いですが、ビットシフト演算をするとハマる時があります。

# 富豪的プログラミングとの別れ
Ethereumとかブロックチェーンの世界では富豪的プログラミングは一旦忘れなきゃいけない気がしました。

というのはEthereumではストレージの状態変更はコストが高いのです。ここで言うコストとは時間とかメモリとかのことではなくてEther(=お金)のことです。まあみんなのメモリを消費するのでお金を取るという発想なのですが。

例えばゼロから非ゼロへの書換えは20000gas掛かります。 https://etherscan.io/chart/gasprice によると2018年2月22日現在の平均gasPriceは17902757911 Wei = 0.000000017902757911 Ether。10万円/1Etherとすると0.00179027579円。まあ微々たるものですが、非ゼロのストレージの書換えは5000gasなので1/4のお金で済みます。

# 貧民的プログラミング
例えば、なにか整数型のidに対してtrue/falseな状態を管理したいと思います。例えば出勤状態とか。通常はmappingを使います。

```
mapping (uint256 => bool) idToBool;
```

しかし、これはfalseからtrueにするたびに20000gasも掛かってしまうのです。社員が1000人いれば20000000gasです！状態変更に伴うストレージの操作をゼロから非ゼロの20000gasではなく、非ゼロからの書換えの5000gasにできれば良いのに…と考えてしまいます。

**なお、true->falseに書き換えると5000gas払った後に最大15000gasのrefund(返金)があります。(が、一旦忘れます)**

# ビット演算

なので、古代行われていたと言われるビット演算を復活させたいと思いました。uint256で256ビットなので、idを256で割った商ごとにuint256を1個持ち、余り+1桁目のビットが立っていればtrueということにします。なんか頭が良くなった気がします！

```
pragma solidity ^0.4.19;

contract BoolMap {
    mapping (uint256 => uint256) private idTables;
    function _toMask(uint256 _value) private pure returns (uint256) {
        return 1 << _value;
    } 
    function put(uint256 _id, bool _value) public {
        uint256 tableIndex = _id / 256;
        uint256 idTable = idTables[tableIndex];
        uint256 mask = _toMask(_id % 256);
        if (_value) {
            if ((idTable & mask) == 0) {
                idTables[tableIndex] = idTable | mask;
            }
        } else {
            if ((idTable & mask) != 0) {
                idTables[tableIndex] = idTable & ~mask;
            }
        }
    }
    function get(uint256 _id) public view returns(bool) {
        uint256 idTable = idTables[_id / 256];
        uint256 mask = _toMask(_id % 256);
        return (idTable & mask) != 0;
    }
}
```

# 途中から動かなくなる

するとput(7, true)までは動いていましたが、put(8, true)から状態変更ができなくなりました。というのは若干嘘で、255とかの境界っぽいところが動かなくておかしいなあと思いましたが根本的にもっと小さいところがダメでした… 残念ながら頭は良くなっていませんでしたね…

# 原因

デバッガで調べていたりしましたがよく見たらコンパイラの警告が出ていました。

```
browser/BoolMap.sol:7:16: Warning: Result of shift has type uint8 and thus might overflow. Silence this warning by converting the literal to the expected type.
        return 1 << _value;
               ^---------^
```

uint8をビットシフトしたらオーバーフローするんじゃないかと言われました。なるほどそうなのか…

# 対処

_toMask関数で1をuint256にキャストしたら動きました。

```
    function _toMask(uint256 _value) private pure returns (uint256) {
        return uint256(1) << _value;
    } 
```

# 結論と教訓
- ビットシフトするときは型に気を付けよう。
- というか 1 << n なんてよくやりそうだけどだいたい間違いだぞ。
- 小賢しい最適化はもうすこしSolidityの気持ちがわかるようになってからにしよう。
- コンパイラの警告はちゃんと読もう。
Centos7：user設定方法


# rootユーザーにスイッチ
登録作業はrootユーザーで行う

```
$ sudo su - root
```


# ユーザー登録
ユーザーとパスワードを設定

```
# useradd study
# passwd study
```

# wheelグループにユーザーを登録


```
# usermod -aG wheel study
```

# ユーザーにsudo権限を持たせる

```
# visudo
```

```shell

～中略～


## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
study ALL=(ALL)         ALL　←この行を追加


～中略～

```
# 作成したユーザーにスイッチ

```
# su - study
```
PKIX path building failed:javaにSSL証明書を追加する

SSLサーバとのREST通信に失敗し、エラーメッセージが出ていた。
>com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target`


[title=javaでSSL接続をすると、PKI PATHの構築に失敗となる](http://www.melange.co.jp/blog/?p=2345)
相手ホストを信頼済みのリストに登録すればよい模様。
InstallCert.javaがリンク切れになってたので探すとgithubにあった。
[InstallCert](https://github.com/escline/InstallCert)
[JavaにSSL証明書を追加する](http://qiita.com/nenokido2000/items/b36b6e5f0854d7d63ba6)
keytoolを使ってcacertsに証明書を追加すればよい。
InstallCertのREADMEが一番わかりやすかった。
RubyMine（または他のJetBrains社製IDE）でgit pushやgit pullでエラーが出るようになった場合の対処方法


## 2018.3.2追記：公式ブログのサポート情報をご覧ください。

公式ブログでもサポート情報が出ていました。

[Update on SSH Access to GitHub in IntelliJ\-based IDEs \| Company Blog](https://blog.jetbrains.com/blog/2018/02/26/update-on-ssh-access-to-github-in-intellij-based-ides/)

日本語訳はこちらです。

[IntelliJベースIDEのSSHによるGitHubへのアクセスについて \| JetBrains ブログ](https://blog.jetbrains.com/jp/2018/02/27/920)

**本件の原因や対処方法は上記の公式ブログの内容を正としてください。**

以下はトラブル発生時に筆者が個人的に実施した対処方法です。

## 発生する問題

RubyMine上でGitHubからpull、またはGitHubへpushしようとすると、以下のエラーが発生する。

> Fetch failed: Could not read from remote repository.

しかし、ターミナルからpullやpushを実行するとエラーにならない。
また、最近まで普通にRubyMineからpullやpushはできていた。

## エラーの原因

2018/2/23以降、GitHubが古い暗号アルゴリズムを使用不可とした。

https://githubengineering.com/crypto-removal-notice/

RubyMineのSSH executableがBuilt-inになっていると、この影響を受けて接続できなくなる。

## 対処方法

Preferencesを開き、SSH executableの設定をnativeに変更する。

<img width="1019" alt="Screen Shot 2018-02-23 at 20.11.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/7465/b1cad246-0a33-b6c5-5f5e-8df089ab45d9.png">

## 備考

このエラーはRubyMineに限らず、JetBrains社製の他のIDEで同じように発生すると思われる。

- IntelliJ IDEA
- Rider
- AppCode
- CLion
- DataGrip
- GoLand
- PhpStorm
- PyCharm
- WebStorm

## 参考文献

[Built\-In SSH Client can't connect to github\.com : WI\-40861](https://youtrack.jetbrains.com/issue/WI-40861)
【Ruby on Rails】「No 'Access-Control-Allow-Origin' header is present on the requested resource」を回避する.

# なにがあったか
クライアント（Angular5）から、API（Rails5）にHTTPリクエストをしようとしたところ、次のようなエラーが出た。

```
 No 'Access-Control-Allow-Origin' header is present on the requested resource.
```

# 原因
Same-Origin Policyに引っかかっていました。

今回、API側とクライアン側はそれぞれ次のように実行しており、

- API側：`http://localhost:3000`
- CLIENT側 `http://localhost:4200`

portが`3000`と`4200`なので、この2つは異なるオリジン、いわゆるクロスオリジンの関係です。それにも関わらずに、HTTPリクエストを行おうとしていたためSame-Origin Policyに引っかかり上記のようなエラーが表示されていました。

# 解決策
1. Gemfileに`gem rack-cors`を追記または、コメントアウトを外してbundle installする。
2. config/initializers/cors.rbのコメントアウトを外す。
3. originsは利用するものに書き換える。

```cors.rb
# Be sure to restart your server when you modify this file.

# Avoid CORS issues when API is called from the frontend app.
# Handle Cross-Origin Resource Sharing (CORS) in order to accept cross-origin AJAX requests.

# Read more: https://github.com/cyu/rack-cors

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'http://localhost:3000', 'https://residenti-blog.herokuapp.com/'

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end
```
そして最後に、サーバーを再起動します。
VisualStudio2017でUnity内のソースコードをクラス図に自動変換する

#はじめに
他の人のソースコードを読むことはすごく大変ですよね。
Unityのソースコードを楽に読む方法を色々調べたら、自動でクラス図を生成する機能がVisualStudioには備わっているらしいとのこと・・・
半信半疑でGoogleで調べてみました。
結果、「クラスダイアグラムで表示」という機能を使えば出来るので、その過程を備忘録的に残します。

#前提条件
・VisualStudio2017
・Unity(筆者のバージョンは5.6.3f)
の以上2つは既にインストールされているものとして進行します。

#VisualStudio内でUnity用のプラグインをインストール
まずは、VisualStudioのインストーラを(C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe)開きます。
その後、VS2017の変更を押します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/141541/e0f44cd2-dd91-e695-c037-1feed942129f.png" width=80%>

次に、UnityとVisualStudioを連携させるプラグインが必要なので、以下の画像に従って、必要なコンポーネントをインストールしてください。
※既にインストールしている人は進んでもらって構いません。
<img src="https://qiita-image-store.s3.amazonaws.com/0/141541/624c304e-7979-c0e8-d806-abfe66618d9e.png" width=80%>


#VisualStudio内でクラスデザイナー機能をインストール
VisualStudioにてクラス図を作成する機能を持つクラスデザイナーというコンポーネントをインストールしていきます。
上のメニューバーから個別のコンポーネントを指定し、クラスデザイナーという項目にチェックを付けて、右下の変更ボタンを押します。（下図参照）
<img src="https://qiita-image-store.s3.amazonaws.com/0/141541/07f584c5-88f4-635d-f09c-b54a7dc7aeea.png" width=90%>

#UnityにてVisualStudioを開く
※既に設定している人は飛ばしてもらって構いません。
Unityのエディター画面上部のツールバーよりEdit>Preferencesを開き、
ExternalTools内のExternalScriptEditorをVisualStudio2017に設定します。
（初期の状態では候補に無いため、Browse...からC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDEdevenv.exeを参照する）
その後、エディター画面のツールバーよりAssets>OpenC#ProjectをクリックしてVisualStudioを立ち上げます。
テラシュールブログ様に詳細が載ってあるため、引用させていただきます。（感謝申し上げます。）
[Visual Studio 2017 (RC)をUnityで使う（テラシュールブログ）](http://tsubakit1.hateblo.jp/entry/2016/11/20/233000)

#クラス図を作成する
最後に、今回の目的であるクラス図作成を行います。
今回記事用に使用するUnityプロジェクトは、以前UnityOneWeekのテーマ「夏」で作成したFireWooksEngineerというゲームのプロジェクトです。
よければ遊んでみてください！（宣伝）[ここから遊ぶ](https://unityroom.com/games/speed_fire_works/)

さて、本題に戻ります。
今回は、プロジェクト全体のクラス図を作成します。
VisualStudioのソリューションエクスプローラを右クリックして、ビュー>クラスダイアグラムで表示を選択します。（下図参照）
<img src="https://qiita-image-store.s3.amazonaws.com/0/141541/b7b28127-4d96-cda3-b2f2-511e284f0429.png" width=70%>

なんと・・・。
自動的にクラス図が作られました！！
素晴らしい
<img src="https://qiita-image-store.s3.amazonaws.com/0/141541/aa699fcb-b3cd-a81b-fe63-6c41b58ceee8.png" width=80%>
しっかり依存関係まで確認できますね。
エディタになっているので、好きにパーツを動かすことが出来ます。
プルダウンにてフィールドとメソッドを確認もできます。
更に、エディタ上で右クリックして、”イメージとしてダイアグラムをエクスポート”をクリックすると、画像でクラス図を保存する機能まで備わっています！
どこまで素晴らしいの・・・

個別にクラスの相関関係を確認するためには、ソリューションエクスプローラ内の一つのクラスを選択して、同じ操作を行う事で確認できます。

#最後に
他人のソースコードを読む際に、最初はクラスの依存関係を全てホワイトボードに書き出す事をやっていましたが、らちがあきませんでした。
結果、面倒になったので、Google先生に聞いてみました。
軽く調べると簡単に出てきたので、何事も調べることが大事ですね・・・。

元々UnityのコードエディタはVSCodeを使っていましたが、Resharperと今回のこの機能が使えるという事で、乗り換えました。
VisualStudio便利( ^)o(^ )

最後に、引用させていただきましたテラシュールブログ様、重ねてお礼申し上げます。
ありがとうございました。
のじゃおじに憧れた社畜が3Dモデルに挑戦してみる2

# Blenderを1時間ほどいじってみた
何はともあれとりあえず手を動かしてみるということで
[犬のモデリング](https://qiita.com/Getabako/items/e6c97c286117fc12283e)
を参考に作ってみた

#まずは日本語化
![blender日本語化.png](https://qiita-image-store.s3.amazonaws.com/0/240128/cf99c856-2adf-f89d-0868-ce699648aa19.png)
これだけで左のアイコンの意味がなんとなく分かるような気がする。
わかんないものを使うよりなんとなくでもわかるもの使う方が気が楽ね。


#1時間後
![一時間くらいいじってできた犬っぽいもの.png](https://qiita-image-store.s3.amazonaws.com/0/240128/851ea61c-24e5-1561-6f3a-8bcdf2e2b3db.png)
はい、誰が何と言おうが犬です。犬っぽいものです。
たぶん犬です……。

次はテクスチャーなるものをいじってみます。
あ、ポリゴンのテクスチャーって技どういう意味なんだろうと思ってたけど
これのことなのか？
和訳: Go & Versioning

[Russ Cox][] による一連のブログ記事 “[Go & Versioning](https://research.swtch.com/vgo)” の和訳です。

* “[Go += Package Versioning](https://qiita.com/nekketsuuu/items/60634417e6279ccfd95b)”
* “[A Tour of Versioned Go (vgo)](https://qiita.com/nekketsuuu/items/589bc29f00b507492a96)”
* “[Semantic Import Versioning](https://qiita.com/nekketsuuu/items/2dcad7dde29171e1fe3f)”

以下は未訳です。Russ による元の記事へリンクしています。

* “[Minimal Version Selection](https://research.swtch.com/vgo-mvs)”
* “[Reproducible, Verifiable, Verified Builds](https://research.swtch.com/vgo-repro)”
* “[Defining Go Modules](https://research.swtch.com/vgo-module)”
* “[Versioned Go Commands](https://research.swtch.com/vgo-cmd)”

パート 1 に書いてあるのですが、移行のスケジュールが急であり、意見募集の期間も短そう (2018 年 2 月第 5 週まで？) なため、日本人も議論に参加しやすいように和訳しました。フィードバックを送る参考になれば幸いです。

追記1: Proposal はここで行われます: https://github.com/golang/go/issues/24301 。

追記2: Proposal に引き続き、いくつか投稿がありました。

* “[The vgo proposal is accepted. Now what?](https://research.swtch.com/vgo-accepted)”
* “[What is Software Engineering?](https://research.swtch.com/vgo-eng)”
* “[Why Add Versions To Go?](https://research.swtch.com/vgo-why-versions)”

----

これらの記事は、[Russ Cox][] によって執筆された記事を、@nekketsuuu が翻訳したものです。[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) ライセンスの元で公開します。

私がこれらの記事を翻訳できるように、Russ が https://research.swtch.com/ 上のコンテンツのライセンスを CC BY 4.0 にして下さいました。感謝します。


  [Russ Cox]: https://swtch.com/~rsc/
[Python]静止画を動くGIFにするプログラムの作り方その１


まずは、結論から。

![動かない.png](https://qiita-image-store.s3.amazonaws.com/0/240301/ce7a843e-9510-16c0-3ec9-ef23294095e2.png)

今回、画像のサンプルとして使ったのはこの画像です。動かない鳥として有名なハシビロコウです。この画像を処理して保存されたのが次の画像です。

![aa01.gif](https://qiita-image-store.s3.amazonaws.com/0/240301/60fb2427-ab54-469a-2b2f-27eca7815bb3.gif)

このように左右に動くハシビロコウが出来上がりました。
プログラムや解説は次回の投稿でしようと思います。

次回の投稿はこれです。
[[Python]静止画を動くGIFにするプログラムの作り方その２ - Qiita](https://qiita.com/nikainotensor/items/e938f7bc1f66ca9547f0)
Windows Server2008R2　ユーザ毎に表示言語を変える

前提条件：
サーバOS Windows server2008R2 日本語OS
Active Directory によるドメインポリシーを利用

（事前準備）
日本語OSの環境はMUIをインストールする必要があるので
ダウロードします。
今回は英語OSのインターフェースのため下記を選択。

Windows Server 2008 R2 Multilingual User Interface Language Packs http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=03831393-eef7-48a5-a69f-0ce72b883df2

コントロールパネル＞時計、言語、および地域＞地域と言語＞言語のインストールまたはアンインストールボタンで
言語パックをインストール

（AD操作）
「スタート」-「Active Directory ユーザーとコンピュータ」を開き、 左メニューのツリーからドメインを右クリックして、「新規作成」-「組織単位(OU)」を選択
ENGというOUを作成

OU配下に英語化したいユーザアカウントを作成する。

[グループポリシーの管理]を開き、グループポリシーオブジェクトでENGのOUに対しGPOを作成
グループポリシー管理エディターを開いて[ユーザーの構成] > [ポリシー] > [管理テンプレート] > [コントロールパネル] > [地域と言語のオプション]を参照します。

選択されたユーザーに対してWindowsが使用するUI言語を制限するをクリック。

有効に変更し、[ユーザーを次の言語に制限する]で英語を選択しOK。

Officeについても表示を英語化したいため、Officeの言語パックを事前にインストールしておく。

英語ユーザがログオンするサーバのコマンドプロンプトを起動し
gpupdate /forceでグループポリシーを適応しておく。


先のOU配下に作成したユーザアカウントでWindows Serverにログオンし、表示が英語化されることを確認する。

Adobe Readerはメニューバー「編集」＞「環境設定」＞分類から「言語」を選択　アプリケーションを表示する言語のプルダウンよりオペレーティングシステムと同じを選択しOKボタン。
これで表示が英語化された。
Symfonyのコンテナがコンパイルされるまでの流れ

Symfonyのコンテナがどんな流れでコンパイルされるのかを整理したかったので、シーケンス図をかいてみました。

Symfonyは3.4.4、EC-CUBEはexperimental/sfブランチの[最新コミット](https://github.com/EC-CUBE/ec-cube/commit/13164ec9e3270a75ea5dbf69fce9f979689f5b53)のコードを元におこしています。astahのファイルは[#2867](https://github.com/EC-CUBE/ec-cube/issues/2867)にもあげています。

![シーケンス図.png](https://qiita-image-store.s3.amazonaws.com/0/72858/b4db26eb-ab71-54f6-49ec-59520e66fe20.png)
explainshell.com > find -print0 | tar --null -T > 読みにくい > 1つ1つ調べる方がよい

explainshell.com
というパラメーター確認時に最近よく使うサイトがある。

[find で探したファイルを tar に](https://qiita.com/marcie001/items/f0bc4dd22e7128446d68)
にある
@marcie001 さんの[記事](https://qiita.com/marcie001/items/f0bc4dd22e7128446d68)内で消されたコードや、
@nacht_666 さんによる[コメント](https://qiita.com/marcie001/items/f0bc4dd22e7128446d68#comment-8c24abe711c1a4c77df6)のコードが気になった。


### 複合コマンドでの確認

https://explainshell.com/explain?cmd=find+-print0+%7C+tar+--null+-T

explainshell.comでは複合コマンドでも確認はできるようではあるが、Pipelinesの長い説明が途間に入るため、全体として読みにくい。

### 個別のコマンドでの確認

https://explainshell.com/explain?cmd=find+-print0
https://explainshell.com/explain?cmd=+tar+--null+-T

説明が一画面なので、「スクロールしてxxxあたりのyyyを表示してください」のような指示が必要なく、人に説明しやすい。
ドイツ語のウムラウト，エスツェットを入力する方法

# Mac の場合[^1]
`option` + `u` でウムラウト記号が準備され， 続けて `a` を押すと ä が, `o` を押すと ö, `u` を押すと ü が表示される．
大文字にする場合は，`option` + `u` のあとに，`shift` + `a` /`o` /`u` で Ä, Ö, Ü が表示される．
ß は，`option` + `s`

html では

```html
&auml; <!-- ä -->
&Auml; <!-- Ä -->
&ouml; <!-- ö -->
&uuml; <!-- ü -->
&szlig; <!-- ß  -->
```

ドイツ語の勉強を始める方のお役に立てたら幸いです．
***
#### 参考文献
1) 清野 智昭『[ドイツ語のしくみ](http://amzn.to/2EIOR3M)』　白水社、2014年、p.145。

[^1]: Windows での説明も『[ドイツ語のしくみ](http://amzn.to/2EIOR3M)』pp.144-145 でされています． 

***
Please donate at [wish list](http://amzn.to/343JRQu) if you find this useful:thumbsup_tone1:
微分方程式  変数分離形

ここでは微分方程式の中でも特に変数分離形について書く。

○変数分離形の形
   $\hspace{5mm}$ $y'=f(x)g(x)$

このように右辺を(xの関数)×(yの関数)と表すことのできるもの。

○解法
さっき示した変数分離形の形は次のようにも表せる。
$\hspace{5mm}$$\displaystyle \frac{dy}{dx}=f(x)g(x)$

さらにx関係を右に、y関係を左に整理して、積分してあげた形は

$\hspace{5mm}$$\displaystyle \int\displaystyle \frac{1}{g(y)}dy=\int f(x)dx$

となり、最後はこれを解くだけである。
このように途中、y,xをそれぞれ左辺、右辺へと分離するのが変数分離形の解法の特徴である。

○例1
次の微分方程式を解け。(μ≠0の定数)
$\hspace{5mm}$$y’=-\mu y$

解法:
$\hspace{5mm}$$y’=-\mu y$

$\hspace{5mm}$$\displaystyle\frac{dy}{dx}=-\mu y$  
両辺を積分すると

$\hspace{5mm}$$\displaystyle\int\frac{1}{y}dy=\displaystyle\int -\mu dx$

$\hspace{5mm}$$\log{y}=-\mu x+C$

$\hspace{5mm}$$\log{y}=\log{e^{-\mu x+C}}$

$\hspace{5mm}$$y=e^{-\mu x+C}$

$\hspace{5mm}$よって$y=Ce^{-\mu x}$となる。


○例2
質量mの物体が空気中を運動するとき速度vに比例する空気抵抗-kvを受けるものとする。この物体が落下している時の速度vを求めよ。ただし、重力加速度をgとし、t=0ではv=0である。

解法:
  運動方程式F=maより

$\hspace{5mm}$$\displaystyle m\frac{d\upsilon}{dt}=mg-k\upsilon $

$\hspace{5mm}$$\displaystyle\frac{d\upsilon}{dt}=g-\frac{k}{m}\upsilon$

$\hspace{5mm}$$\displaystyle\frac{d\upsilon}{dt}=-\frac{k}{m}\left(\upsilon -\frac{mg}{k}\right)$

両辺を積分して

$\hspace{5mm}$$\displaystyle\int\frac{1}{\upsilon-\frac{mg}{k}}d\upsilon=\int-\frac{k}{m}dt$

$\hspace{5mm}$$\displaystyle\log|\upsilon-\frac{mg}{k}|=-\frac{k}{m}t+C$

$\hspace{5mm}$$\displaystyle\upsilon-\frac{mg}{k}=e^{C_{1}}e^{-\frac{k}{m}t}$

よって$\hspace{5mm}$$e^{C_{1}}=C$$\hspace{5mm}$とすると

$\hspace{5mm}$$\displaystyle\upsilon=C e^{-\frac{k}{m}t}+\frac{mg}{k}$

となる。ここで初期条件$t=0$で$\upsilon=0$より答えは、

$\hspace{5mm}$$\displaystyle\upsilon=-\frac{mg}{k}e^{-\frac{k}{m}t}+\frac{mg}{k}$

となる。
React-Reux周りの開発をいい感じにしてくれる情報集

React-Redux開発の備忘録です。ろくに説明がなくてすいません。開発中に随時更新していきます。

# フロントエンド
#### redux-devtools
redux開発用のchromeエクステンション。
https://github.com/zalmoxisus/redux-devtools-extension

#### material-ui
お手軽にUIまわりの開発ができるコンポーネントです。
http://www.material-ui.com/#/

#### React.Rocks
React/Redux関連のプロジェクト情報が集まっているサイト。UIのインスピレーションを得るのにとても有用。
https://react.rocks/

#### Reactを使って構築されたサイト集
https://github.com/facebook/react/wiki/Sites-Using-React

#### Reactレファレンス
https://reactjs.org/

#### Reduxレファレンス
https://redux.js.org/

#### Jsbin
Javascriptのちょっとしたテストに使える。
http://jsbin.com/

#### codepen
https://codepen.io

#### validatejs
https://validatejs.org/

#### jsonplaceholder
テスト用のフェイクデータを作成してくれる。
https://jsonplaceholder.typicode.com/

#### Middleware
https://github.com/gaearon/redux-thunk

#### gatsby
静的ファイルを作るためのパッケージ
https://www.gatsbyjs.org/

#### React Native
モバイルアプリを作るためのコンポーネント。
https://facebook.github.io/react-native/


# バックエンド
#### MongoDB
http://mongoosejs.com/


#### Jwt.io
Webトークンについての説明がかかれています。
https://jwt.io/


# 共通
#### NPM
node.jsのパッケージ情報が検索できるサイト
https://www.npmjs.com/



# 学習用教材
#### Reactトレーニング
よさそうな感じなので今度つかってみようかな。
https://reacttraining.com/
GitLabでissueが勝手にクローズされるようになった件 （2018/2/22リリース）

仕事でGitLabを使って問題管理をしています。

昨日openしたばかりの、issueに着手しようとしたところ、、、


![closed画面.png](https://qiita-image-store.s3.amazonaws.com/0/148503/0a595f0a-9806-95b2-a588-abce857c3f44.png)

### なんと、closeされている。


自分のミスかなとログを見ると、

![viaCommit.png](https://qiita-image-store.s3.amazonaws.com/0/148503/db332908-8409-865b-b56c-13eb2ca3287f.png)


### closed via commitという謎のメッセージ。

確か、git **hub** だとissueとプルリクを関連付けることができ、プルリクがマージされた時点で、関連するissueをcloseできる **optionがあったはず** ←ココ大事


先週くらいまではなんともなかったので、アップデート内容を確認しました。

`リリース内容`
https://about.gitlab.com/releases/

`Automatic issue closing` 
https://docs.gitlab.com/ee/user/project/issues/automatic_issue_closing.html#default-closing-pattern-value

要約すると、 **下記のコミットメッセージを含むコミットをした場合、自動でissueがクローズされる** とのことでした。 


```
Close, Closes, Closed, Closing, close, closes, closed, closing,
Fix, Fixes, Fixed, Fixing, fix, fixes, fixed, fixing,
Resolve, Resolves, Resolved, Resolving, resolve, resolves, resolved, resolving
```

 **設定でオフにもできない** ので、とりあえずウチのチームでは `禁止用語` にしました。
なんじゃそりゃ。
【Android】BluetoothのヘッドセットのON/OFFの切り替えを常に検知する

情報が古くなっており、メンテナンスが難しいため、こちらのページはアーカイブさせていただきました。

古い情報でも閲覧を希望される場合は、編集履歴からご覧くださいませ。
PostgreSQLのデーブルを作り直した話（pg_dumpの使い方）

## そもそもなぜ作り直したか
なぜか特定レコードだけ更新が行えなくなり、原因不明の時間が続きました。
じゃあ、ダンプして作りなしちゃえばいいんじゃない？ということになり、作り直しを行うに至りました。

## バックアップファイルの作成
`pg_dump`を使用します。
PostgreSQLのデータをバックアップする際の手法ですね。

## 対象DBの確認
`psql -l`で、データベース名を確認します。

## バックアップファイル作成
`pg_dump -t table_name db_name > table_name.sql`でバックアップファイルを作成します。

こんな感じで実行しました。
`pg_dump -t スキーマ.テーブル名 DB名 > 出力ファイル名.sql` の形式でバックアップ作成。

## 作り直したいテーブルの削除
テーブルの削除については、手動で行いました。
`DROP TABLE テーブル名;`ですね。

## テーブルの作り直し
削除が確認できたら作り直しです。
先ほど作成したバックアップファイルを流し込みます。
`psql DB名 < バックアップファイル（出力ファイル名）.sql`
です。

簡素ですが、こんな具合にテーブルを作り直しました。


## 余談
特定レコードの更新が行えない場合ですが、インデックスが破損している可能性があります。
その場合は、[REINDEX](https://www.postgresql.jp/document/7.3/reference/sql-reindex.html)を用いることで解消することがあります。

少し古い記事ではありますが、こんなものもありました。
・[PostgreSQL：データの更新ができない](http://kashi57move.blogspot.jp/2008/07/postgresql.html)


そしてこのREINDEXですが、indexの再構築を行うため、その間の<font color="Red">SELECTはブロック</font>されてしまいます。
サービス提供者としては手痛いことではありますので、ケースバイケースでご自身の判断で行うようにしてください。
・[[PostgreSQL]本当は怖いREINDEX](http://dqn.sakusakutto.jp/2011/11/postgresql-reindex.html)
Rustでjson メモ

# クレート

```Rust
extern crate serde_json;
extern crate valico;

use serde_json::value::Value;
```

# JSON用意

```Rust
let json_text = r#"
{
    "url": "https://www.kernel.org"
}
"#).unwrap();
```

jsonテキストの用意には、次のような方法もあります。

```Rust
extern crate jsonway;

let json_text = jsonway::object(|json| {
    json.set("url", "https://www.kernel.org".to_string());
}).unwrap().to_string();
```

# Schema用意

型などを定義するJSONです。

```Rust
let schema_data: Value = serde_json::from_str(r#"
{
    "type": "object",
    "properties": {
        "hoge": {
            "type": "string"
        }
    }
}
"#).unwrap();
```

最初の`"type": "object"`はおまじないです。
`"properties"`に各要素名を記述していきます。
`要素名`の中には、`"type"`で型を宣言できます。

# よくわかんない処理

Schemaのコンパイルとかしてるっぽい。

```Rust
let mut scope = valico::json_schema::Scope::new();
let compiled_schema_data = scope.compile_and_return(schema_data, true).ok().unwrap();
```
# validateチェック

true/falseが返ります。

```Rust
compiled_schema_data.validate(&json_text).is_valid()
```

# jsonテキストのデシリアライズ

```Rust
let json_data: Value = serde_json::from_str(&json_text[..]).expect("Can not deserialize");
```

# アクセス

```Rust
json_data["hoge"]
```

配列もインデックスアクセス可能です。

```Rust
json_data["array"][0]
```
Rustでグローバル変数 / RwLock メモ

# extern crate / use

```Rust
#[macro_use]
extern crate lazy_static;

use std::sync::RwLock;
```

# グローバル変数の宣言

```Rust
lazy_static! {
    static ref Str_g: RwLock<String> = RwLock::new("hoge".to_string());
    static ref Int_g: RwLock<i32> = RwLock::new(0);
}
```

# メソッド

### read()

グローバル変数のポインタをread-onlyで取得します。

```Rust
let str_g = Str_g.read().unwrap();
println!("{}", *str_g);
```

### write()

グローバル変数のポインタをrwで取得します。

```Rust
let str_g = Str_g.write().unwrap();
*str_g = "fuga";
println!("{}", *str_g);
```

### try_read() / try_write()

上記の二つは、グローバル変数をロックするとスレッドをブロックします。
しかし、try_read() / try_write()はブロックしません（ロックはします）。
しかし、他のスレッドでロックされていた場合、ロックに失敗し、パニックします。
read() / write()はロックを獲得できるまで、待機し続けます。

```Rust
let str_g = Str_g.try_read().unwrap();
let str_g = Str_g.try_write().unwrap();
```

# 注意点

### ポイズニング

writeロックを獲得しているスレッドがパニックになった時、ロックで守られているデータの整合性が保たれているか保証できなくなるため、ロックを獲得できなくなります。

### デッドロック

既にロックを獲得しているグローバル変数をロックしようとすると、デッドロックが発生します。
これに対処するためには、ロックをかける時間を可能な限り短くする必要があります。
決してloopの中でロックし続けているなんて関数は書かないようにしてください。
**ロックはライフタイムの終わりと同時に外れます。**
そのため、可能な限りグローバル変数はブロックで囲って使いましょう。

```Rust
{
    let str_g = Str_g.write().unwrap();
    *str_g = "piyo";
}
```
VirtualBoxでRaspbianを使う時にISOをVDIに変換する


RaspbianをVirtualBoxで使うとき、
ISOファイルを光学ドライブIDEに設定して、
読み込むと設定が保存されない事象が発生します。

ISOファイルからVDIファイルを作成して使うと設定が保存されます。
その変換を備忘録として残します。
バッチファイルにした方が楽だと思います。

```:ISO_VDI_Convert.bat

rem RaspbianのISOファイル名をそのまま使う
set ConvertFileName=2017-11-16-rpd-x86-stretch

rem 変換前のISOファイルが格納されているディレクトリパス
set ConvertBeforePath=D:\kasou\OS_ISO\

rem 変換後のvdiファイルを格納するディレクトリパス
set ConvertAfterPath=D:\kasou\test\

rem ISOファイルからvdiファイルを作成する
"%VBOX_MSI_INSTALL_PATH%VBoxManage.exe" convertfromraw %ConvertBeforePath%%ConvertFileName%.iso %ConvertAfterPath%%ConvertFileName%.vdi

rem 仮想ディスクの容量を拡張する
"%VBOX_MSI_INSTALL_PATH%VBoxManage.exe" modifyhd %ConvertAfterPath%%ConvertFileName%.vdi --resize 8192

rem 処理結果を見たいのでpauseで止めておく
pause
```

このバッチを実行すると以下のようなログがでます。

```

D:\kasou>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" convertfromraw D:\kasou\OS_ISO\2017-11-16-rpd-x86-stretch.iso D:\kasou\test1\2017-11-16-rpd-x86-stretch.vdi
Converting from raw image file="D:\kasou\OS_ISO\2017-11-16-rpd-x86-stretch.iso" to file="D:\kasou\test1\2017-11-16-rpd-x86-stretch.vdi"...
Creating dynamic image with size 2387427328 bytes (2277MB)...

D:\kasou>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd D:\kasou\test1\2017-11-16-rpd-x86-stretch.vdi --resize 8192
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

D:\kasou>pause
続行するには何かキーを押してください . . .
```


## ちなみに
VDIファイルを削除してもう1回やると、
VDIファイルの容量を拡張するコマンド部分で以下のエラーが発生します。

```
VBoxManage.exe: error: UUID {5bb3d088-b54d-4e8a-8ff1-42dabd45e1ca} of the medium 'D:\kasou\test1\2017-11-16-rpd-x86-stretch.vdi' does not match the value {a6ce7570-7ba4-4c63-ae27-d3a45b094d1d} stored in the media registry ('C:\Users\Administrator\.VirtualBox\VirtualBox.xml')
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component MediumWrap, interface IMedium, callee IUnknown
VBoxManage.exe: error: Context: "Resize(cbResize, pProgress.asOutParam())" at line 740 of file VBoxManageDisk.cpp
VBoxManage.exe: error: Failed to resize medium!
```

理由は現時点で不明。(20180223時点)

ディレクトリを削除して、違う名前のディレクトリを作るとうまくいく。

１つのディレクトリに同じものを作ろうとするとUUIDの認識でエラーになる？

VirutalBox側で物理パスとUUIDを保持してて、
「パスは同じだけどUUIDが違うだろーっ！」
ってどっかの元議員みたいに怒ってる？

時間があって気が向いた時に調べます。(あと忘れてなければ)

ディレクトリは毎回分けているので、今後上記のエラーはでないはず。

<br>
MNIST



[MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges](http://yann.lecun.com/exdb/mnist/)

download
* train-images-idx3-ubyte.gz:  training set images (9912422 bytes) 
* train-labels-idx1-ubyte.gz:  training set labels (28881 bytes) 
* t10k-images-idx3-ubyte.gz:   test set images (1648877 bytes) 
* t10k-labels-idx1-ubyte.gz:   test set labels (4542 bytes)



## 

[TensorFlow チュートリアルMNIST For Beginnersを試してみる \| トライフィールズ](https://www.trifields.jp/try-tutorial-mnist-for-ml-beginners-of-tensorflow-1713)
Githubの公開鍵でサーバへログイン出来るようにするシェル

新しくエンジニアが入ったときにサーバへのログインしてもらうときによくやるやつメモ。

```bash:createUser.sh
#!/bin/bash

if [ ! $1 ]; then
  echo "pass the username to create."
  exit 1;
fi

useradd $1;

cd /home/$1

mkdir /home/$1/.ssh

chmod 700 /home/$1/.ssh

curl https://github.com/$1.keys >> /home/$1/.ssh/authorized_keys

chmod 600 /home/$1/.ssh/authorized_keys

chown -R $1:$1 /home/$1/

echo "$1 user created"
```

**Usage**

```bash
$ sh createUser.sh ichiwa
```
asp.net フォーム認証後のリダイレクト先について

いまさら、asp.net のフォーム認証 だとは思いますが、asp.net を基礎から覚えたくて、勉強中です。

フォーム認証で、「MOTOフォルダ内のページにアクセスするときは、認証を要求する。」という設定なのですが、[web.config]は下記のような設定にしています。

```web.config
    <authentication mode="Forms"> 
        <forms name="loginCookie" loginUrl="sign-in.aspx" protection="All" timeout="30" path="/" > 
        </forms> 

    </authentication> 
        
    <authorization>
      <!-- すべて許可 --> 
      <allow users="*" /> 
    </authorization> 

  <location path="MOTO">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
```

sign-in.aspxで、認証後に要求元へのリダイレクトは、下記のようにしていますが、要求元がない状態場合の、sign-in.aspxで認証後のリダイレクト先は、どのように設定するのでしょうか？

```sign-in.aspx
    If sLoginID > 0 And Me.txtAccount.Text = sLoginName And Me.txtPassword.Text = sLoginPW Then
      Session("LoginID") = sLoginID

      '要求元へリダイレクト (要求元がないときは、Default.aspx)
      FormsAuthentication.RedirectFromLoginPage(Me.txtAccount.Text, True)
    Else
      login_message.ForeColor = Drawing.Color.Red
      login_message.Text = "認証に失敗しました。"
      'MsgBox("認証に失敗しました。")
    End If
```

初歩的な質問で申し訳ございません。
どなたか、ご教主お願いします。

### いま、私が取り組んでいるプログラムのご紹介

Azure SQL と Access を使って、データを共有型して、自由にデータベースを作れるようなアプリを作成しています。

[クラウドデータ共有データベース Ganso](http://access-cloud.hatenablog.com/ganso)
サーバ上の標準出力をSlackに通知したい時のシェルスクリプト(メモ)

# 注意事項
- Webhookのタイムアウトなどは一切考慮しておりません
- このため重要なサービスにおけるエラーログの収集はご注意ください
- またこのスクリプトのライセンスはNYSL( http://www.kmonos.net/nysl/ )となります
- よってこのスクリプトを利用することによって生じた損害等について、作者は一切の責任を負いません

# 使い方
- bash, curlおよびjqパッケージを利用します
- 標準出力にてテキストを渡すことでSlackに通知します

```
echo "なんかログ" | ./send_slack_channel.sh
```

スクリプト内にWebhook URLおよび書き込み対象のチャンネル等を各自変更してください。
ユーザ名はデフォルトサーバホスト名(hostname)
また書き込むテキストの先頭にはサーバにおける時刻を埋め込むように設定しております。
Slack通知の遅延やサーバ時刻のズレなどがあった場合を考慮して時間を埋め込んでます

```
#!/bin/bash

TEXT=$(cat -)
WEBHOOK_URL='***Webhook URL***'
CHANNEL='server-logs'
USERNAME="$(hostname)"
TEXT_PREFIX="[$(date '+%Y-%m-%d %H:%M:%S %Z')] "

if [ "${TEXT}" == "" ]; then
    #echo "text is empty."
    exit 0
fi

MESSAGE="{\"channel\": \"#${CHANNEL}\", \"username\": \"${HOSTNAME}\", \"text\": \"${TEXT_PREFIX}\"}"

RESULT=$(echo $MESSAGE \
| jq ".text += \"${TEXT}\"" \
| curl -s -X POST \
--data-binary @- \
${WEBHOOK_URL})

if [ "${RESULT}" != "ok" ]; then
    echo ${RESULT}
    exit 1
fi
exit 0
```

# 感想
crontabで普段メール通知が来るところをSlackにすることでログが追いやすくなった
postfix等メール設定をせずともログ送信ができるのは便利である
EC-CUBE3 & クロネコwebコレクトで「当該加盟店のAPI利用不可」エラーになるときの対処

xserverでEC-CUBE3 & クロネコwebコレクトを使おうとしたときにちょっとハマりそうになった書いておきます。

# 現象
専用IPアドレスを用意していても、クロネコwebコレクトの決済で「当該加盟店のAPI利用不可」というエラーになる
http://yamato-financial.okbiz.okwave.jp/faq/show/2804?site_domain=default

# 原因
EC-CUBEをインストールしたWebサーバーが複数のNICを持っていたため、ヤマトの決済サーバにアクセスする際に専用IPアドレスを使っていなかった。

# 対策
プラグイン内のcurl関数のオプションを設定している部分に、`CURLOPT_INTERFACE` を追加して、専用IPアドレスを設定する

`YamatoPayment\Service\Client\BaseClientService.php` の383行目から。

```php:YamatoPayment\Service\Client\BaseClientService.php
        // 通信実行
        try {
            $curlOptions = array('CURLOPT_SSLVERSION' => 0, 'CURLOPT_INTERFACE' => 'xxx.xxx.xxx.xx'); // 専用IPアドレスを指定
        // 中略
            $client->setConfig(array('curl.options' => $curlOptions));
```


# 環境
- xserverの共用サーバー + CoreSSL証明書 + 専用IPアドレスオプション
- php 7.1.4
- EC-CUBE 3.0.15
- クロネコヤマト カード・後払い一体型決済モジュール 1.1.0

# 参考
[PHPマニュアル curl_setopt()関数](http://php.net/manual/ja/function.curl-setopt.php)
【vagrant】ホストからゲストにscpでファイルを転送する方法

# 概要

マウント程大それたことをしたい訳ではないけど
ファイルを共有したい！！
そんな時、`scp`が便利です！！

# 手順

## 接続情報の取得

```bash:command
vagrant ssh-config > ssh.config
```

## configファイルを指定してファイルを転送する

接続情報の取得で出力したファイルを指定して、ファイルを転送する

```bash:commad
scp -F ssh.config {{file_name}} vagrant@default:~/
```
UNIX/ShellScript

配列を使用する
参考URL：http://shellscript.sunone.me/array.html

~~~Shell
$ array=(111 "foo" 222 "bar" 333 "foobar")
#↑配列に値を設定する。

$ echo $array
111
#↑インデックスを指定しない場合は、先頭の値のみが出力される。

$ echo ${array[@]}
111 foo 222 bar 333 foobar
#↑全ての値を出力する場合は、インデックスに「@」を指定する。
~~~

for文
変数は`${}`で囲む

~~~sh
#　team_cのすべての要素でteam_cにマッチした行をteam_nameに格納
for team_name in ${team_c[@]};do 
  echo ${team_name} >> 'unix_result_2.txt'

# grep -c マッチした行数を表示
# 変数名は${}で囲む
  grep -c ${team_name} ${league_csv} >> 'unix_result_2.txt'
  done  # for文の終わり

echo >> 'unix_result_2.txt'
~~~