OmniAICreator/Qiita-1.07M huggingface dataset:
親要素のpaddingを無視して、画面の横いっぱいに表示するCSS

CSSを書いていて、親要素からはみ出して表示したくなるときってありませんか？

特にスマホの画面などは、左右に余白を設けることが多いかと思います。
下記のようなイメージです。

<img width="367" alt="スクリー<img width="280" alt="スクリーンショット 2018-01-13 21.38.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/155990/6f4d4f38-9982-de21-f840-0179df9c35ec.png">

そんなとき、「Mainの中でこの見出しだけは画面の横いっぱに広げて欲しい」などという要望があると、paddingの一括指定ができなくなってしまいます。
それ以外の要素に対してそれぞれpaddingを指定したり、共通のクラスを付与したりといった対応が必要になります。
前者の場合、mixinにて共通化して呼び出したりでも対応できますが、やっぱりこれも面倒です。

そんなとき、全体にpaddingを指定したままでも、横にいっぱい表示する方法があります。

## 方法

横いっぱいに表示したい要素に下記を指定するだけです。

``` scss
  margin-left: calc(((100vw - 100%) / 2) * -1);
  margin-right: calc(((100vw - 100%) / 2) * -1);
```

## 解説

そんなに大したことやっていませんが、簡単に解説します。

* (100vw - 100%)

画面いっぱい（100vw）からその要素の値を引くということです。
calcを使っているので、単位が違うもの同士の計算が可能になります。
これによって左右の余白（padding）の合計値が取得できます。

* ((100vw - 100%) / 2 * -1)

2で割って左右どちらかの値にします。
そこにさらに-1をかけることでマイナスの値にして、結果ネガティブマージンを指定することになります。

これによって、左右の余白（padding）分の値を伸ばすことになります。

下記でより詳細に説明しています。
もしよろしければこちらもご確認ください。
<a href="https://1-4nomiya.hatenablog.com/entry/2019/11/16/144002">より詳細な説明</a>

## 注意

ただし、１点注意が必要です。
スマホの場合、`<meta name="viewport" content="width=device-width,initial-scale=1">`のような指定をしても、左右が固定化されなくなってしまいます。
本来であれば、左右のスワイプが効かないので上下のみにスクロールするはずなのですが、左右にもスワイプが可能になってしまうため、画面がグワングワン（？）します。

画面の横いっぱいにリンクを設置した際に、iPhoneのhover処理（タップエリアがグレーアウトされる感じのやつです）が効かなくなってしまう問題を思い出しますが、横いっぱいというのはどうもうまくいきませんね。
左右に1px余裕を持たせてあげれば解決はできますが、よ〜く見ると当たり前ですが1pxの隙間ができてしまいます。

⇛ 追記）ブラウザのバージョンによって異なるようです。

どちらかの問題が受容できるのであれば、とても便利だと思います。
ただ、できればもっといい方法を知りたいので、他にいい方法があれば、ぜひ教えていただきたいです。
よろしくお願いいたします。
NDL Authorities APIをPythonで呼び出す。

#はじめに
##NDL Authoritiesとは
国立国会図書館(NDL)の運営する典拠データの検索サイトです。
https://id.ndl.go.jp/auth/ndla

##典拠データ
典拠データとは以下の通りです。
>国立国会図書館では、利用者が求める資料を探し出せるように、タイトル、著者等を記録した書誌データを作成しています。書誌データには、著者名や件名として記録する人物、団体、テーマ等に複数の表記方法や同義語がある場合は一つにまとめ、同じ名称で異なるものを指す場合はそれぞれ区別して検索ができるように、「標目」を付与します。
これらの「標目」を統制するために、標目の別表記や同義語、標目として選んだ根拠を示す資料等の情報をまとめて記録したのが「典拠データ」です。
https://id.ndl.go.jp/information/about/

###典拠データの利便性の例
*人名で検索した場合、時代によって呼び名が異なったり、言語によって綴りが違う場合も、同一のものとして扱うことができます
*特定のキーワードに対する上位語、下位語、同義語、関連語と、図書館の分類(NDC)を調べることができます。
　これによって、そのキーワードに関係する語句を効率よく拾い出すことができ、NDCからその分類の本をまとめて検索することができます。

##WebAPI
国会図書館はNDL Authoritiesの検索WEB APIの仕様を公開しています。
http://id.ndl.go.jp/information/sparql/
これを元に、Python でAPIを呼び出すサンプルプログラムを作成しました。

##SPARQLについて
WEBAPI呼び出し後のデータベースへの実質的なアクセスは、SPARQLのクエリが行っています。
その仕様についてはこちらを確認して下さい。
http://id.ndl.go.jp/information/sparql/
PythonはあくまでAPIの呼び出しまでを行うということです。

#プログラム
##Git Hub
アップロードしてあります。
https://github.com/AvocadoWasabi/Call-NDLAuthorities-API

##要点
SPARQLクエリをパラメータとしてURLエンコードしたものを、
エンドポイントのURLと結合させ、GETします。
今回はJSONで結果を取得しています。
(searchメソッドで一連のメソッドを呼び出しています)

##コード

以下はクラス化したコードの一部です。

```python3:sample
import requests
import json
import urllib.parse

def main():
    end_point = 'http://id.ndl.go.jp/auth/ndla'
    keyword = 'インターネット' #means Internet in Japanese.

    #make query
    #Make SPARQL Query, which searches authority data of the keyword
    query = ('PREFIX xl: <http://www.w3.org/2008/05/skos-xl#>'
            'PREFIX skos: <http://www.w3.org/2004/02/skos/core#>'
            'PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>'
            'PREFIX rda: <http://RDVocab.info/ElementsGr2/>'
            'PREFIX ndl: <http://ndl.go.jp/dcndl/terms/>'
            'PREFIX foaf: <http://xmlns.com/foaf/0.1/>'
            'SELECT ?uri1 WHERE{'
            '   ?uri1 rdfs:label "' + keyword + '"'
            '}')

    #URL encode
    parameter = urllib.parse.urlencode({'query' : query, 'output' : 'json'})
    #make whole URL
    url = end_point + '?' + parameter

    result = requests.get(url)
    try:
        data = json.loads(result.text)
    except json.decoder.JSONDecodeError:
        #JSONDecodeError happens if query is incorrect
        #print API's Error message
        print(result.text)

    #print result
    print(data)

if __name__ == '__main__':
    main()
```

##結果
検索した「インターネット」の典拠データについて、
普通件名のアドレスhttp://id.ndl.go.jp/auth/ndlsh/00841024と、
団体名インターネット株式会社http://id.ndl.go.jp/auth/ndlna/001144835
の結果が得られました。

```
{'head': {'vars': ['uri1']}, 'results': {'bindings': [{'uri1': {'type': 'uri', 'value': 'http://id.ndl.go.jp/auth/ndlsh/00841024'}}, {'uri1': {'type': 'uri', 'value': 'http://id.ndl.go.jp/auth/ndlna/001144835'}}]}}
```
コードレビューにこそ、コーチングのアプローチを適用するべきかも

### 3つのコミュニケーションパターン
会社でコーチング研修があり、(主に部下と1on1を想定して)コミュニケーションパターンが以下の3つに分けられるという話がありました。

* コーチング：<br>「答え」は相手の中にある<br>相手の話を聞く/問いかける/人となりを認める
* ティーチング：<br>「答え」はこちらにある<br>知識ややり方を教える/相手が理解してないことを説明する
* フィードバック：<br>成長を促すために、周りからどう見えているか、思われているかを伝える

ポイントは

<b>「いつもティーチングで自分が思うことばかり言ってしまってないか？アプローチには種類があることを認識し、適切に使い分けていこう」</b>

という話でした。

これだけでもとても面白い話だったのですが、「これ、コードレビューでも同じではないか？」と思ったのです。

### レビューにおけるティーチングとコーチング
#### ティーチング
ティーチングはいわゆる「指摘」です。

プルリクに対して
「ここは○○なので××にしてください」
というコミュニケーションは、レビューの中では一般的ですよね。
これはこれで、コードの品質担保には重要なコミュニケーションです。

ただ、結構これだけだと「はーい、直しました」ってレビュー投げ直して終わり、となりがちですよね。

ただの凡ミスとかなら良いですが、後輩にきちんと設計の意図を考え直してもらいたい時などは、「指摘された通りに直す」だけだと学びが浅くなりがちです。

#### コーチング
そこでコーチングのアプローチをとってみるとどうなるでしょうか？

* コーチング：<br>「答え」は相手の中にある<br>相手の話を聞く/問いかける/人となりを認める

これを応用すると、

* なぜそのような書き方をしたのか聞く
* きちんと意図を持って書いてたのならそれは認める(考えてなかったらオコ)
* 「この書き方だとこういう時に困らない？」「それを避けるにはどうしたらいいと思う？」と考えさせてあげる

というコミュニケーションになるでしょうか。<br>
さきほどのコミュニケーションにくらべると、明らかに考えを深めることができそうですね。<br>
これはもしかしたら、PR上のテキストではなく直接コミュニケーションするなど、やり方を考えても良いかもしれません。


### まとめ
大切なことは、まずアプローチには種類があることを認識することだと思います。

3種類あることを知らずに同じようなアプローチを続けるのと、知った上で一つのアプローチを意図的にするのは大きく異なります。

ぜひこの3種類を認識して、普段のコミュニケーションをふりかえってみてはいかがでしょうか？

### 参考資料
コーチング講習の課題図書で以下の2冊が配布されました。どちらも読みやすい本だったので興味がある方は手に取ってみてください。
[ヤフーの1on1](http://amzn.to/2CUJCJl)
[「経験学習」入門 ](http://amzn.to/2FAaTCD)

コーチはこちらの方でした
https://ameblo.jp/coachmemori/
アルゴリズム問題 コインdeリバーシ

#問題

このゲームは 2 人のプレイヤーの間で行なわれます。
ゲームには、表裏がそれぞれ黒と白に塗られたコインと、1 × N の横に長いボードを使います。
便宜上、黒い面を向いているコインを黒コイン、白い面を向いているコインを白コインと呼ぶことにしましょう。
ゲームは次の手順で進みます。


・手順
1. 親番のプレイヤーが、ボードのすべてのマスにコインを無作為に並べます。この状態からゲームスタートです。
2. ボードに次の操作を施したあと、「黒コインがいくつあるか」を先に答えられたプレイヤーの勝利となります。

・操作
「黒コインで挟まれている1つもしくは連続した白コイン」および「白コインで挟まれている1つもしくは連続した黒コイン」を一斉に反転させる。反転するコインがなくなるまでこの操作を繰り返す。

次の図は上記の操作によってコインが反転していく様子を表したものです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202349/4e8741d5-7fd9-1a09-3bf7-a511db2033a3.png)

 
このゲームにすっかりはまってしまったあなたは、自主練習のために黒コインの個数を計算するプログラムを作ることにしました。
コインの並びが与えられたときに、操作を施したあとで黒コインがいくつあるかを計算するプログラムを書いてください。

##入力
入力は以下のフォーマットで与えられます。

```
N
s
```

・1 行目には、ボードの横の長さを表す整数 N が入力されます。
・2 行目には、ゲーム開始時のコインの並びを表す文字列 s が与えられます。これは "b" と "w" のみからなる長さ N の文字列です。

・s の i 文字目 (1 ≦ i ≦ N) が "b" のとき、ボードの左端から i マス目は黒コインとなります。
・s の i 文字目 (1 ≦ i ≦ N) が "w" のとき、ボードの左端から i マス目は白コインとなります。

##出力
表の数を出力

#回答コード（１００点　Bに昇格）
```rb:
num = gets.to_i
game = gets.chomp.split("")
@omote = "b"
@ura = "w"


def turn(game , first_c, last_c , start , last)#コインの配列、先頭（表か裏）、ケツ（先頭が表なら裏、またその逆）、反転の先頭、ケツ
    return if start > last #反転すべて反転したら終了
    start.upto(last) do |coin|
        if game[coin] == @omote #表なら裏に
            game[coin] = @ura
        else                    #裏なら表に
            game[coin] = @omote
        end
    end
    start=game.index(last_c)
    last =game.rindex(first_c)
    turn(game , first_c, last_c, start , last)
end
    

if game[0]==@ura && game[num-1]==@ura #1文字目と最後の文字がwなら全部ｗになるので
    puts 0
elsif game[0]==@omote && game[num-1]==@omote #bなら全部bなので
    puts num
else
    if game[0] == @ura #一文字目がｗなら最初のｂのインデックから反転させていく
         start = game.index(@omote)
         last = game.rindex(@ura)
         turn(game , @ura , @omote, start , last)    
         puts game.select{|c| c==@omote}.size
    else                #一文字目がｂなら最初のｗのインデックスから反転させていく
         start = game.index(@ura)
         last = game.rindex(@omote)
         turn(game , @omote , @ura, start , last)
         puts game.select{|c| c==@omote}.size
    end
end
```

#解説
問題にとりかかる前に自分でいくつかシュミレーションをしたところ

「最初と最後が同じ面なら全てのコインがそちらの面になる」
とたまたまきづくことができた（たまたまではなく実力が付いてきたから気づけたのか！？なんて。）

if分岐で上の条件でわけて簡単な出力になるものと、
そうでないものとしてから、ここに適応する関数をくみたてていった。

この問題は端っこからオモテ、もしくはウラが決定されていくものと判断が思いのほかパッと判断できたので、決定された部分いじる事の無いような（余計な処理が行われないような）仕組みを考えて再帰呼び出しで書き出してみた。
インスタンス変数を用いてうまい事処理が出来てるのではないかと思うけどもう少し無駄が省けそう。

Bランク昇格記念の問題なので別にいいか。
[Unity]Test Runnerのシンプルなサンプル


準備

1. Editorという名前のフォルダを作る
2. 以下の画像のようにスクリプト作成

![スクリーンショット 2018-01-13 19.28.45.png](https://qiita-image-store.s3.amazonaws.com/0/113504/04612041-8912-d481-e3e8-d9d1c6490e7d.png "スクリーンショット 2018-01-13 19.28.45.png")

ここではSampleTestと名付けました．

すると以下のようなスクリプトが生成されます．

```SampleTest.cs
using UnityEngine;
using UnityEditor;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;

public class SampleTest {

	[Test]
	public void SampleTestSimplePasses() {
		// Use the Assert class to test conditions.
	}

	// A UnityTest behaves like a coroutine in PlayMode
	// and allows you to yield null to skip a frame in EditMode
	[UnityTest]
	public IEnumerator SampleTestWithEnumeratorPasses() {
		// Use the Assert class to test conditions.
		// yield to skip a frame
		yield return null;
	}
}
```

クラスの中身は一度全部消してしまいましょう．
そして以下のように書きます．

```csharp
using UnityEngine;
using UnityEditor;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;

public class SampleTest {

	[Test]
	public void AnyTest(){
		int a = 5, b = 4;
		int ans = a * b;

		Assert.AreEqual (ans, 20);
	}
}

```

Unityエディタに戻り，
Window => Test Runnerを押す．
するとこんなWindowが出てくるはずです．

![スクリーンショット 2018-01-13 19.36.23.png](https://qiita-image-store.s3.amazonaws.com/0/113504/4c5e5566-846b-8f8d-35d7-8d05f2e64d62.png "スクリーンショット 2018-01-13 19.36.23.png")

左上のRun Allボタンを押すとテスト開始

![スクリーンショット 2018-01-13 19.37.58.png](https://qiita-image-store.s3.amazonaws.com/0/113504/7c784c41-00c0-99d9-4268-a17d34b8f452.png "スクリーンショット 2018-01-13 19.37.58.png")
チェックマークがついたらテストが通ったことになります．

# ポイント

`using NUnit.Framework`
必要です．

`[Test]`
テストアトリビュート．
このアトリビュートがついた関数がテストの対象になります．

`Asset.AreEqual(val1, val2)`
val1とval2が等しいときにテストを通す．
railsのkaminariのデザインを変更する

# 目的

kaminariをrailsに導入した際に自分でページネーションのデザインを変更したい

# kaminariのviewを出す

```
rails g kaminari:views default
```

これをコマンドにうつとapp/views/kaminari/にkaminariのviewがでる。

# 各ファイルの変更箇所

_pagenator.html.erbから各ファイルを呼び出している。このファイルで全体のデザイン。それぞれ数字か一番最初かなどを他のファイルで編集する。難しいのがcurrentがファイルにないこと。（currentは現在のページでリンクがない）currentはclassでcurrentがついているのでこのclassに対してcssでデザインを変更する形がいい。
Mysql 5.7* パスワードをPolicyに合わせるとめんどくさい件について

# Mysql 5.7* パスワードのポリシー

Mysql にユーザーを追加しパスワードを設定しようと試みたところ、

Errorが出ました。

下記参照
```
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
```

上記は要するにパスワードの文字列をもっと複雑にしてください的な内容になります。

下記が詳細になります。

| ポリシー | 実行されたテスト |
|:--|:--|
| 0 または LOW | 長さ |
| 1 または MEDIUM | 長さ; 数字、小文字/大文字、および特殊文字 |
| 2 または STRONG | 長さ; 数字、小文字/大文字、および特殊文字。辞書ファイル |

引用先:

https://dev.mysql.com/doc/refman/5.6/en/validate-password-options-variables.html#sysvar_validate_password_policy

MySQL 5.7

https://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html

Mysql 8.0が出たので、下記を追加しました。

https://dev.mysql.com/doc/refman/8.0/ja/validate-password-options-variables.html

要するにMEDIUMは文字列の長さを指定した長さにして、数字を使って、大文字、小文字を使って、さらに特殊文字を用いてパスワードにしてくださいとのこと、

これではログイン不安なので、

変更してみました。

```sql

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 8     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | MEDIUM|
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
```

上記のようになっているものを下記で変更。

```sql
mysql> set global validate_password_length=6; # 文字列の長さを変更
mysql> set global validate_password_policy=LOW;　# ポリシーを変更
mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 6     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
```

これで6文字で特殊文字がなくても、大文字、小文字両方使わなくても設定できます。


もしくはMysqlの設定そのものを変更してしまいます。

下記引用：

https://qiita.com/panappe/items/a4fdf8c8646802fceac0

## パスワードのチェックを無効化する
チェックを無効にしたければvalidate_passwordプラグインを無効にするといいらしい。
ということで、my.cnfにvalidate-password=OFFを追記。これだけ。

```bash
$ sudo vi /etc/my.cnf
/etc/my.cnf
[mysqld]
validate-password=OFF
```
設定反映のためmysqlの再起動。

```bash
$ sudo systemctl restart mysqld.service
```
WSLのbashでyesコマンドを打ってはいけない

WSL(Windows Subsystem for Linux)上のbashで`yes`コマンドを打ってみると、
![Ubuntu-2018_01_13-21_01_32.gif](https://qiita-image-store.s3.amazonaws.com/0/90361/83def583-8cbd-f97e-9af1-44a1ec060b0c.gif)
ctrl+cを何度も押していますが止まりません。

止め方がわかるまで使うのは控えた方がよさそうです。
【Route 53】【お名前.com】【Amazon S3】Webサイト作成

#AWS s3

バケットを作成し、サイトを公開する

#Route 53

Hosted Zoneを作成し、
お名前.comで購入したドメインを入力する
![Screen Shot 2018-01-13 at 19.57.11.png](https://qiita-image-store.s3.amazonaws.com/0/179225/bd19c383-c3c6-fb49-601e-58c9f3b08b59.png)

Recodeをsetする
Alias Targetにs3で作成したバケットを選択する

![Screen Shot 2018-01-13 at 19.54.52.png](https://qiita-image-store.s3.amazonaws.com/0/179225/67246502-c41d-4d06-2948-7f012d348b99.png)

作成したHosted zonesのNSレコードのvalueをメモする
※赤字の部分！

![Screen Shot 2018-01-13 at 20.03.16.png](https://qiita-image-store.s3.amazonaws.com/0/179225/da8aa24e-fb42-b6cc-5b02-d108f51d52d5.png)

# お名前.com

お名前.com　ログイン
ネームサーバーの設定　-> 対象ドメイン選択　-> 他のネームサーバーを利用
![Screen Shot 2018-01-13 at 20.09.18.png](https://qiita-image-store.s3.amazonaws.com/0/179225/a7271af4-95b1-8a39-3998-25487f1be4bd.png)

Hosted zonesのNSレコードのvalueを４つ入力する。
![Screen Shot 2018-01-13 at 20.09.32.png](https://qiita-image-store.s3.amazonaws.com/0/179225/1184a931-3e7e-9c3d-9f44-a71e3b33d7ef.png)

確認画面に進み、完了！！
なかなか反映されない場合はTTL秒数を短めに。
Python3.6 で Mayaviを動かす

##はじめに
Pythonで3D表示させるために、比較的手軽に利用できる[Mayavi](http://docs.enthought.com/mayavi/mayavi/) を利用しました。
Mayaviは[VTK](https://www.vtk.org/)のバージョン依存がありPython3で、Mayaviを動作させるのに結構はまったので記事を書きました。

##動作環境
Ubuntu 16.04.2 LTS
python 3.6.4
pyenv
virtualenv
anaconda

##環境構築
apt-getで必要なライブラリをインストールします

```
sudo apt-get install -y libglib2.0-0 libxext6 libsm6 libxrender1 gtk3.0
```

anacondaでpython3.6.4環境を準備します

```
conda create -n mayenv python=3.6.4 anaconda
pyenv activate anaconda3-4.3.1/envs/mayenv
```

必要なパッケージをインストールします。（VTKのバージョン7.1.1がインストールされる）

```
conda install -y -c conda-forge qt vtk pyvtk pyside envisage mesalib mayavi
conda install -y -c ajsrk traitsui
pip install scipy
```

##動作確認
サンプルプログラムを動作させ、3Dオブジェクトが表示されれば完了です

```
from numpy import pi, sin, cos, mgrid
dphi, dtheta = pi/250.0, pi/250.0
[phi,theta] = mgrid[0:pi+dphi*1.5:dphi,0:2*pi+dtheta*1.5:dtheta]
m0 = 4; m1 = 3; m2 = 2; m3 = 3; m4 = 6; m5 = 2; m6 = 6; m7 = 4;
r = sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7
x = r*sin(phi)*cos(theta)
y = r*cos(phi)
z = r*sin(phi)*sin(theta)

from mayavi import mlab
s = mlab.mesh(x, y, z)
mlab.show()
```
![Screenshot from 2018-01-13 20-07-10.png](https://qiita-image-store.s3.amazonaws.com/0/64243/e88b8c3c-2000-6b82-5df3-d9af8a2a0918.png)



###参考にしたサイト
http://docs.enthought.com/mayavi/mayavi/mlab.html#a-demo
https://stackoverflow.com/questions/19138418/get-mayavi-working-with-python-3
cakephp3でinsertしたデータのidを取得をしたいとき

cakephp3の公式にも書いてあったがそれだけだとわからなかったから一応メモ書き

DBにデータを追加するとき
idをAUTO INCREMENT設定でinsertした後にそのidを取得したときありません？
ありますよね！
下記のように簡単に取得できるみたいです。

```insert.php
$this->table_name->save($entity);
$entity->id;
```
学校の先生でもわかるPepperのYoutubeアプリを起動させない方法

#背景
以下の記事を書いたところ、やっぱり学校の先生から「難しい」「スクショでわかりやすくかいてくれ」と問い合わせをもらいました。

読んでくれる人がいることはありがたいので、なんとかPC操作が苦手な人でもスクショをたどるだけで再現できるように記事を書き直してみます。

##1,Pepperにsshで接続するための準備

###1-A　Tera Termのインストール
PepperにChoregrapheとはまた違ったソフトで接続します。

接続するために、Windowsの場合はTera Termというアプリを用意します。

以下のサイトからインストールしていきます。
https://ja.osdn.net/projects/ttssh2/releases/

1　最新の「teraterm-x.xx.exe」をダウンロードします。
![1.PNG](https://qiita-image-store.s3.amazonaws.com/0/222559/e702d815-fa45-3c13-e8b0-ce5be963f816.png)
2　ダウンロードした「teraterm-x.xx.exe」をダブルクリックしてセットアップをはじめる。「同意する」にチェックして「次へ」をクリック
![2.PNG](https://qiita-image-store.s3.amazonaws.com/0/222559/536cb74b-6a02-b1e7-c6c5-77e4763c122d.png)
3　コンポーネントはそのまま「次へ」をクリック
![3.PNG](https://qiita-image-store.s3.amazonaws.com/0/222559/c5f452a2-68a9-308e-3fc4-7551323d7242.png)
4　お好きな言語を選択して「次へ」
![4.PNG](https://qiita-image-store.s3.amazonaws.com/0/222559/c40d0961-a6e2-ddb0-e6d2-0a86a8219320.png)　
5　ここもとりあえず、こだわりがなければそのまま「次へ」
![5.PNG](https://qiita-image-store.s3.amazonaws.com/0/222559/9adb0b98-8bff-d2c1-9058-b97e824912c2.png)
6　「インストール」をクリックするとインストールが始まります。
![6.PNG](https://qiita-image-store.s3.amazonaws.com/0/222559/02da4154-54d2-8c11-2e9a-0a77fdf871b3.png)
これでTera Termを使う準備ができました
###1-B　Tera Termを使ってPepperとPCを接続する

1　Tera Termを起動すると以下のような見慣れない画面が開きます。
ホスト（T）の中に電源のついたPepperのIPアドレスを入力します。
PepperのIPアドレスは胸の電源ボタンをポチっと押すとしゃべってくれます。
192.168.3.10　とか、192.168.10.5　とかの4つの数字と「.」でできた番号を入力します。
![7.PNG](https://qiita-image-store.s3.amazonaws.com/0/222559/c07b25e4-17ac-a355-16b5-30353cef231a.png)

2　うまくいくと次の画面がでます。
・ユーザー名は必ず「nao」になります。
・パスワードは初期設定時に設定したロボットパスワードというものになります。
・「チャレンジレスポンス認証を使う」を選択して「OK」をクリック
![9.PNG](https://qiita-image-store.s3.amazonaws.com/0/222559/7a858056-6242-ba3e-5376-32e760dd76d4.png)
3　再度ロボットパスワードを入力します。
![10.PNG](https://qiita-image-store.s3.amazonaws.com/0/222559/4206f28e-32f7-3b0b-d515-289660f528e8.png)


接続完了しました。
これで、Pepperの頭の中をいじる環境が整いました。

##2,Pepperの頭の中をいじる。

あとは以下のコマンドをコピペしてEnterを押します。
`cd ~/.local/share/PackageManager/apps/sbr_7cd1aed6-aa7f-41a0-ae57-51787c052921_ytp`
を入力してEnter
`rm sbrytpcommon.py`
を入力してEnter

`rm sbrytpcommon.pyc `
を入力してEnter


これで、タブレットからYoutubeアイコンを触ってもアプリが起動されなくなりました。
t2.microインスタンスでWindowsは使い物になるのか？

ICDP(田舎クラウドデザインパターン)的なネタ再び。

概要
======
AWS EC2 t2.micro インスタンスのシステム資源は非常に乏しい。
AWS無料利用枠でウィンドウズも対象だけど、本当に使い物になるのか？


目的
======
t2.microインスタンスへWindows Server 2008R2をインストールしてソフトウェアを起動しようとしたところ、 Out of Memory で起動不能であった。
メモリ1GB、連続して演算できない制限付きのCPU能力で、ウィンドウズを使用するには厳しい。
動作させたいソフトウェアは必要メモリ500MBのため、なんとか使えるようにすることを目的とする。


要件
======

- AMI
Windows_Server-2008-R2_SP1-Japanese-64Bit-Base-2017.11.29 - ami-95d06bf3

- ページファイル（スワップ）無しで使う。
スワップが発生したら実用にならないためページファイルは無しとする。
これはスワップ処理にはCPU時間を消費するため、CPU時間に制限があるt2系インスタンスでは動作が間欠的に停止したり、操作不能に陥ったりするからである。


現状
======

Windows Server 2008R2 をインストールして起動した状態はこのようになっている。
![t2a.jpg](https://qiita-image-store.s3.amazonaws.com/0/96018/10276628-d644-3db2-e9f6-393a62592b72.jpeg)

消費メモリは959MB。
メモリ1GBしか無いのに消費メモリがこの状況では無理もない。殆ど空きがない。
40MBではメモリ不足で起動不能となるのは当然であろう。


対処
======

タスクマネージャでメモリ使用状況を見て削減できそうなプロセスを調べる。
![t2b.jpg](https://qiita-image-store.s3.amazonaws.com/0/96018/d60b9e91-7229-7c81-db59-0c31e38762ea.jpeg)

TrustedInstaller.exe が460MBも使用している。
これは何かと調べると、Windows Modules Installerサービスのようだ。
Windows Update関連のプログラムで、停止させると更新に失敗するが通常は問題無いので停止させてみた。


無効に設定したサービス
======

先の大物を含め、無効に設定したサービスは以下の通り。
ただしこれを行うとWindows Updateが失敗するので行う場合は手動で起動し対処すること。

- Windows Modules Installer
- Windows Update
- WinHttp Web proxy Auto-Discovery Service

また、AWSオリジナルの制御機能を使わないのであれば以下も無効にできる。
こちらは計20MB程度の削減にしかならないのでお好みで。

- Amazon SSM Agent
- AWS Lite Guest Agent
- Ec2Config


対処した結果
======

![t2c.JPG](https://qiita-image-store.s3.amazonaws.com/0/96018/1ed3db6e-716d-6aee-e997-123182274451.jpeg)

消費メモリが400MB程度となり、600MBの空きを確保できた。


結論
======

かろうじて要件を満たし動作可能な環境を構築できた。
しかし、リソースには余裕が無いためMackerel等で常時監視した方が良いと思われる。
【railsでfullcalendar】fullcalendarでの日程の変更をのDBに反映する

【環境】
ruby 2.5.0
rails 5.1.2
fullcalendar-rails 


【目的】
railsのアプリ上で、fullcalendarでイベントの時間を変更したときに、DBにも変更を反映すること。


【フロー】
イベントの時間が変更されたことを受け取る
（fullcalendarでの表示の変更）
↓
ajaxでpatch
↓
DBでも変更


【コード】



```javascript:calendar.js

$(document).ready(function() {
    //イベントを編集するための関数を設定
    //ajaxでpostするときは、自分でcsrf-tokenを投げるための設定が必要
    //ajaxでpatchする際は、postでmethodをpatchに指定する
    edit_event = function (start, end, id) {
      $.ajaxPrefilter(function(options, originalOptions, jqXHR) {
        var token;
        if (!options.crossDomain) {
          token = $('meta[name="csrf-token"]').attr('content');
          if (token) {
            return jqXHR.setRequestHeader('X-CSRF-Token', token);
          }
        }
      });
      $.ajax({
        type: "post",
        url: "/editevent",
        data: {
          start: start.toISOString(),
          end: end.toISOString(),
          id: id,
          _method: 'PATCH'
        }
      }).done(function(data){
        alert("変更しました!");
      }).fail(function(data){
        alert("変更できませんでした。");
      });
    };

    $('#calendar').fullCalendar({
      header: {
        right: 'month,agendaWeek,agendaDay'
      },

      editable: true,
      eventResize: function(event) {
        var start = event.start;
        var end = event.end;
        var id = event.id;
        edit_event(start, end, id);
      },
    });
});


```

```ruby:config.rb

patch '/editevent', to: 'events#edit_event'

```






```ruby:events_controller.rb

class EventsController < ApplicationController
    def edit_event
      starttime = params[:start] 
      endtime = params[:end]
      event = Event.find(params[:id])
      event.update(starttime: starttime,
                    endtime: endtime)
    end
end

```

コードは一部簡略化していますが、これでも動くと思います。


 【参考にしたサイト】
[【初心者向け】Rails5＋FullCalendarでイベントを登録する](https://qiita.com/fukumura/items/23d834ad3d3df9236769)
[jQuery.ajaxPrefilter() | jQuery API Documentation](http://api.jquery.com/jquery.ajaxprefilter/)
[fullcalendar](https://fullcalendar.io/docs/)
「AWS、またパッチ当てたってよ」と聞いたので3度目のAurora（MySQL互換）R4テスト（mysqlslap）

タイトル通り、です。
※パッチを当てたのか別のことをしたのかは、自分ではまだ情報を捕捉できていません。そのため、今後情報を追記する可能性があります。

結果、**「元の性能に戻ったみたい」**です。

※以下の記事の続報です。

 * **[MeltdownとかSpectreとか騒ぎがあったので、Amazon Aurora（MySQL互換）R4インスタンス再テスト（mysqlslap）](https://qiita.com/hmatsu47/items/656ebb6575c31bf1a90e)**

---

**2018/01/15追記（01/16一部修正）：**

AWSとしては**「対応を完了した」**という認識のようですが、詳細な情報は出していません。

 * **[Processor Speculative Execution Research Disclosure](https://aws.amazon.com/jp/security/security-bulletins/AWS-2018-013/)** ※2018/01/13 13:00 PST 更新版 および 2018/01/15 20:30 PST 更新版で確認

RDS/AuroraではなくEC2向けのAmazon Linuxについては、週末（1/13～14あたり）に更新版のカーネルアップデートが配布されたようです。

なお、私の初報の記事（前述）が、**[Publickey](http://www.publickey1.jp/)** さんの以下の記事で（ちょっとだけ）取り上げられています（ありがとうございます）。

 * **[AWSもSpectreとMeltdownの対策完了を報告。対策後、Amazon EC2で性能の低下は見られないと](http://www.publickey1.jp/blog/18/awsspectremeltdownamazon_ec2.html)（Publickey）**

Googleの対応についても先に記事にされていますが、対比して読むと面白いです。

 * **[GoogleはSpectreとMeltdownの対策を昨年6月に開始し12月には完了していた。性能低下の報告はなし](http://www.publickey1.jp/blog/18/googlecpuspectremeltdown612.html)（Publickey）**

脆弱性の発見者にGoogleのチームが含まれているので当然といえば当然ですが、時間をかけて慎重に進めることができたGoogleがパフォーマンスの問題を（ほぼ）出さずに対応を終えた一方で、AWSは~~おそらく時間も情報も足りていなかったのでしょう、~~結果として初回の対応では性能低下を避けられませんでした（本当のところはどうなのか、また初回の性能低下は意図的なのかミスなど想定外の事態だったのかは、発表がない以前に**「性能低下していない」ことにしてしまっている**のでわかりませんが）。

※Googleの対応についての記事を最初に読んだときに見落としていましたが、Googleは（2017/06の対応で）「Web全体の顧客保護を行うために業界での協力を行」ったと書いてありました。加えて、AWS自身もPVインスタンスのユーザ向けにはかなり前にメンテナンス予告をしていたことを考えると、単純に「時間も情報も足りていなかった」と見るのは正しくなさそうです。「HVMインスタンス向け（もしかするとPVインスタンス向けも）の対応について判断を誤った」（もしくは作業ミスをした）と考えるほうが自然だと思います。

---

# mysqlslapの内容（同じです）

```bash:mysqlslap
$ mysqlslap --auto-generate-sql --auto-generate-sql-guid-primary --engine=innodb --number-int-cols=20 --number-char-cols=20 --concurrency=150 --auto-generate-sql-write-number=2000 --auto-generate-sql-execute-number=2000 --auto-generate-sql-load-type=mixed -u 【ユーザ名】 -h 【クラスタエンドポイント】 -p
```

# 結果

いずれも暗号化あり、です。

| 実施時期 | db.r4.large・バイナリログなし | db.r4.large・バイナリログあり | db.r4.xlarge・バイナリログなし | db.r4.xlarge・バイナリログあり | db.r4.2xlarge・バイナリログなし | db.r4.2xlarge・バイナリログあり |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 2017/10/末 | 48.860 | 57.737 | 33.133 | 37.857 | - | - |
| 2018/01/上 | 74.779 | 91.679 | 45.433 | 54.413 | 34.180 | 39.621 |
| **2018/01/13 （今回）** | 50.990 | 61.550 | 32.440 | 38.089 | 24.209 | 26.682 |

※単位は秒。結果は3回実行した平均です。

ほぼ元に戻った模様なので、性能比は省略します（2017/10比で誤差の範囲だと思います）。

この1週間、振り回された人が多そう…（もしかして、振り回したのはAWSではなくて私？）。

因みに、この記事とは関係ありませんが、db.r3.xlargeで運用していて本日（2018/01/13）朝にdb.r4.xlargeに移行したインスタンス（参照負荷が0で冗長化のためだけに用意されているリードレプリカ）のCPU負荷の推移は、以下のようになっています（右端のほうの山はVer.1.14からVer.1.16へのバージョンアップとR4への移行）。

![aurora_cpu2.png](https://qiita-image-store.s3.amazonaws.com/0/123899/dc6c44c3-cd0a-e4c3-6ef5-04772bfd6b97.png)

AWSの再パッチらしきタイミングで元の負荷に近いラインに戻るとともに、バージョンアップ＆R4化でも（さらに）CPU負荷が下がっていますね。

---

 * **[Qiitaに投稿したAmazon Aurora関連記事](http://hmatsu47.hatenablog.com/aurora)**
VyOS1.1.8にMacarel-agentを入れる

手順

1.mackerel-agentのセットアップスクリプトをダウンロード

```console
vyos@vyos# sudo curl -L -O https://mackerel.io/file/script/setup-all-apt.sh
```

2.セットアップスクリプトに実行権限付与

```console
vyos@vyos# sudo chmod +x setup-all-apt.sh
```

3.`MACKEREL_APIKEY` を指定してスクリプト実行

```console
vyos@vyos# MACKEREL_APIKEY='hogehogehogehogehogehogehogeho' ./setup-all-apt.sh
```

4.実行が完了するとmackerel-agentが起動し、Mackerel側に自動的にホストが登録されます。

```console
vyos@vyos# ps ax | grep mack
25073 pts/2    Sl     0:02 /usr/bin/mackerel-agent --pidfile=/var/run/mackerel-agent.pid --root=/var/lib/mackerel-agent
```

Debianへのargentインストール公式手順だと、wgetからの標準出力でシェルをそのまま実行していますが、それだとうまくいかないようです。
【超絶簡単】CentOSで初めからGUI（デスクトップ）をインストールする方法

# はじめに
CentOSで最小限のインストール(CUIのみ)してしまった状態からGUIを追加インストールする方法の記事はたくさんあったけど、初めからGUIをインストールする方法を説明する記事は簡単すぎて（？）意外と見つからなかったため書く。

# やり方
インストール画面で、ソフトウエアの選択で"サーバ(GUI使用)"を選択する！
以上！！！(笑)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/221948/b7397daf-375f-fc4b-b54e-8d2e0790cbda.png)

# 感想
ubuntuはISOがデスクトップ版とサーバ版にそもそも分かれているけどCentOSは分かれてなくて、インストール時にどっちにするか決めるのね。
Pythonでバイナリファイルを指定サイズに分割、結合する

## 1. 指定されたデータサイズでファイルを分割する

指定されたファイルを指定されたデータサイズ（チャンクサイズ）で分割して、同じディレクトリに`元ファイル名.0、元ファイル名.1、元ファイル名.2`という名前で出力します。
処理のポイントは元ファイルをチャンクサイズづつ読み込み、読み取り位置をシークさせていくことです。チャンクサイズしかメモリに展開しないため、巨大なファイルでも分割することが可能です。

**（注意）**
サンプルではチャンクサイズは最大でも数MBを想定しています。数十～数百MBでファイルを分割したい場合、一度でチャンクサイズのデータを読み込むのではなく、バッファリングしつつ読み込んで分割ファイルに書き込むようにしてください。

```python:指定されたデータサイズでファイルを分割する
# 指定されたデータサイズでファイルを分割する
def divide_file(filePath, chunkSize):

    readedDataSize = 0
    i = 0
    fileList = []

    # 対象ファイルを開く
    f = open(filePath, "rb")

    # ファイルを読み終わるまで繰り返す
    contentLength = os.path.getsize(filePath)
    while readedDataSize < contentLength:

        # 読み取り位置をシーク
        f.seek(readedDataSize)

        # 指定されたデータサイズだけ読み込む
        data = f.read(chunkSize)

        # 分割ファイルを保存
        saveFilePath = filePath + "." + str(i)
        with open(saveFilePath, 'wb') as saveFile:
            saveFile.write(data)
        
        # 読み込んだデータサイズの更新
        readedDataSize = readedDataSize + len(data)
        i = i + 1
        fileList.append(saveFilePath)

    return fileList
```

## 2. ファイルを結合する

結合したいファイルのファイルパスが格納されたリストに従い、指定されたファイルパスに結合したファイルを出力します。
処理のポイントは結合ファイル毎にフラッシュしてファイルに書き込むことです。
注意点は分割と同じで、分割ファイルのデータサイズが大きい場合、バッファリングしながら読み込んでファイルに書き込むことです。

```python:渡されたファイルリストの順序で１つのファイルに結合する
# 渡されたファイルリストの順序で１つのファイルに結合する
def join_file(fileList, filePath):

    with open(filePath, 'wb') as saveFile:
        for f in fileList:
            data = open(f, "rb").read()
            saveFile.write(data)
            saveFile.flush()
```

## 3. 指定された部分データをファイルから取得する

指定されたファイルから指定された範囲の部分データ（start、end自体を含む）を取得します。
もともと今回の記事はflaskで[Range Requests](https://triple-underscore.github.io/RFC7233-ja.html)によるファイルダウンロードを検討したことが始まりです。その際に必要となる指定範囲のデータをファイルから取得する処理のお試し実装になります。
ポイントはファイル分割と同じで読み取り位置をシークさせ、必要なデータだけを取得するところになります。

```python:指定された部分データをファイルから取得する
# 指定された部分データをファイルから取得する
def partial_content(filePath, start, end):

    partialSize = end - start + 1
    f = open(filePath, "rb")
    f.seek(start)
    data = f.read(partialSize)

    return data
```

## 4. テスト

手元にあった画像ファイル（jpeg）を今回実装した処理で分割、結合して正しく表示できるか確認しました。

```python:テスト
# main
if __name__ == "__main__":
    # 3126866 Byte
    target = "sample.jpg"

    # 250000 Byte で分割
    fileList = divide_file(target, 250000)
    # 分割したファイルを結合
    join_file(fileList, 'join_' + target
    
    # 0-9999 の 10000 Byte を取り出す
    data01 = partial_content(target, 0, 9999)
    # 10000-残り全て を取り出す
    data02 = partial_content(target, 10000, os.path.getsize(target))
    # 結合して確かめる
    with open('partial_' + target, 'wb') as filePartial:
        filePartial.write(data01)
        filePartial.write(data02)
```
LaTeXメモ一覧

# この記事について
この記事は、個人的なメモ目的で書いたQiita記事の一覧です。
より詳細な内容を調べたい方は、TeXWiki等をご参照ください。
#一覧
- [LaTeXにソースコードを"美しく"貼る方法](https://qiita.com/ta_b0_/items/2619d5927492edbb5b03)
- [LaTeXで「セルを結合して中央揃え」を実現させる方法](https://qiita.com/ta_b0_/items/c8c828b6a53d49498736)
- [LaTeX文章を2段組で書く方法](https://qiita.com/ta_b0_/items/ae489dc726d7419e8bda)
- [LaTeXでbibtexを使う方法](https://qiita.com/ta_b0_/items/69a5e72baacaf08ba79e)
- [LaTeXで分割タイプセットをする方法](https://qiita.com/ta_b0_/items/1426ad05de7b90b34a46)
- [VScodeでLaTeXをタイプセットする時の設定](https://qiita.com/ta_b0_/items/bb8a0d4e379fb818bd14)
 
随時更新する予定です．

# 最後に
$\rm\LaTeX$は最強なので，レポートをWordで書くのは ~~やめましょう~~ 控えましょう．
LaTeXで「セルを結合して中央揃え」を実現させる方法

# 概要
- $\rm\LaTeX$の表で「セルを結合して中央揃え」を実現させる．
- (おまけ)セル内の配置を調整する
- (おまけ)キャプションと表・図の間の空白を消す

# 結論
`\multicolumn{結合するセルの数}{位置と罫線の指定}{入力文字列}`とする。
罫線（そのセルの左右に位置する縦罫線）は、`|`で入力する。

```latex:例：2つのセルを結合して中央揃えに設定し、「ほげほげ」を入力する場合
\multicolumn{2}{|c|}{ほげほげ}
```

#使用例

## 今回作る表
<img width="308" alt="スクリーンショット 2018-01-13 18.03.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/160611/14f3098b-7336-8acc-286e-2f8e802f8fd6.png">
##方法
```latex:
\begin{table}[h]%[]内はお好みで(h(here),t(top),b(bottom),H(要here.sty)を記入)
    \caption{成績}
        \centering
        \begin{tabular}{|c|c|ccc|}\hline
        \multicolumn{2}{|c|}{} & \multicolumn{3}{c|}{国語の点数}\\
        \cline{3-5}
        \multicolumn{2}{|c|}{}
            & 0 $\sim$ 39 & 40 $\sim$ 79 & 80 $\sim$ 100 \\ \hline
            & 0 $\sim$ 39 &0 &2 &4 \\
            数学の点数 & 40 $\sim$ 79 & 2 & 9 & 8\\
            & 80 $\sim$ 100 & 6 & 4 & 1\\ \hline
        \end{tabular}
\end{table}
```

#おまけ
##「国語の点数」の部分にたくさんの文字を入れる場合
### 問題点
<img width="346" alt="スクリーンショット 2018-01-13 18.09.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/160611/202840e8-f560-408e-dccc-bc0abaa483ca.png">

この場合，表はその文字数によって全体の横幅が調整されるため，点数部分の列幅がおかしくなってしまう．
### 解決法
```latex
...
\usepackage{tabularx} %要tabularx.sty
\begin{document}
...
\newcolumntype{C}{>{\centering\arraybackslash}p{17mm}} %ここを追加
\begin{table}[h]
    \caption{成績}
    \begin{center}
        \begin{tabular}{|c|c|CCC|}\hline %ここもcからCへ変更
            \multicolumn{2}{|c|}{} & \multicolumn{3}{c|}{国語の点数}\\
            \cline{3-5}
            \multicolumn{2}{|c|}{} & 0 $\sim$ 39 & 40 $\sim$ 79 & 80 $\sim$ 100 \\ \hline
            & 0 $\sim$ 39 &0 &2 &4 \\
            数学の点数 & 40 $\sim$ 79 & 2 & 9 & 8\\
            & 80 $\sim$ 100 & 6 & 4 & 1\\ \hline
        \end{tabular}
    \end{center}
\end{table}
...
\end{document}
```
<img width="359" alt="スクリーンショット 2018-01-13 18.16.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/160611/f481658e-eeb8-dada-11ee-f5d57655fa5b.png">

begin{tabular}の後ろに続く部分には，通常l(左端揃え),r(右端揃え),c(中央揃え)の3つしか書けないが，そこに新たに作った「C」を使う．
1行目の部分のうち，最後のp{17mm}の部分を変更することで該当する各セルの横幅の太さを変更できる．
ちなみに，**指定した幅内で文字列が収まらない場合は自動的にセル内で改行される．**

##一部のセルだけ配置を変更する
`\multicolumn{1}{r}{この部分だけ右揃え}`のように， **"1つのセルを結合する"** ように書くことで1つのセルだけ配置を変更できる．

##キャプションと表・図の間の空白を消す
表や図を挿入するときは，`\begin{center},\end{center}`を使うとキャプションと表・図の間に1行分の空白が生じてしまう．
そこで，`\begin{center}`の部分に`\centering`と書き，`\end{center}`を消すことでその空白を消すことができる．
<img width="356" alt="スクリーンショット 2018-01-13 18.17.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/160611/b3654ca2-beda-8eab-6160-cfa4dbae2785.png">
git stage / unstage

# 概要

`git stage` / `git unstage` というコマンドが便利。

`git stage` は `git add` のシノニム（synonym）。

*Git - git-stage Documentation*
https://git-scm.com/docs/git-stage

`git unstage` というコマンドは存在しないので、エイリアス（alias）を作る。

```~/.gitconfig
[alias]
	unstage = reset HEAD
```

# 使い方

`readme` というファイルを編集していると想定する。

```shell-session
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   readme

no changes added to commit (use "git add" and/or "git commit -a")
```

`git stage` で `readme` ファイルを `staged` 状態にする。

```shell-session
$ git stage .
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   readme
```

先ほど作った `git unstage` を使う。`staged` → `unstaged` 状態に戻る。

```shell-session
$ git unstage
Unstaged changes after reset:
M	readme

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   readme

no changes added to commit (use "git add" and/or "git commit -a")
```

# まとめ

既存のコマンドの代わりに覚えやすい別名を使うことで、脳のメモリ（記憶）を節約する。

| :pensive: | :blush: |
|:-:|:-:|
| `git add` | `git stage` |
| `git reset HEAD` | `git unstage` |
Vagrantの実行方法

# Vagrantの実行の流れ

vagrantを利用して、railsサーバを立ち上げて用いる流れを書きます。

1.vagrantの起動

```terminal
$ vagrant up
```

2.vagrantのログイン

```
vagrant ssh
```
3.railsの実行元に移動

```
cd /var/www/html
```

4.railsサーバ起動

```
rails s
```

- 次にサーバを切る方法

1. railasサーバ終了

```
ctr+C
```

2.vagrant ログアウト

```
ctr+D
```

3.vagrant シャットダウン

```
vagrant halt
```

以上。
Android8.0端末でデータベースの中身を見る方法とそれ以前の端末での方法

# Androidでデータベースの中身を見たい
Android開発をする上で、データベースの中に何が入っているかを、mockを使ってテストもできますが、個人的にはどういう風に値が入っているかとかを見たかったりするときがあるのです。

基本的には、きちんと表示やデータの取得ができていなかったときに、データベースの中身がどうなっているかを確認するっていうのが主ですが。

最近仕事でデータベース周りの実装をしているのでわかったことですが、Android7.0以前ではrun-asコマンドで`/data/data`にアクセスしてデータベースの取得をすることが可能ですが、**Android8.0からは、セキュリティの強化のためか、run-asコマンドでのアクセスは可能ですが、データベースをコピーするなどはできなくなっています。**

とりあえず、run-asでの確認方法と、Android8.0以降でのデータベースの確認の仕方を書きたいと思います。

# データベースを抜き出す方法を解説します。
run-asコマンドでまずは`/data/data/パッケージ名/databases`配下にあるデータベースを、外部からアクセスできるフォルダに移動させます。
以下では`/sdcard`に移動させていますが、外部からアクセスできるならここではなくてもいいです。

## 権限の変更
まずはchmodコマンドで権限を変更します。
変更しない場合、Permission deniedになってしまうからです。

```
adb shell "run-as パッケージ名 chmod 666 /data/data/パッケージ名/databases/test.db"
```
これで権限が変更されたはずです。
僕のプロジェクトのtest.dbのパーミッションを見てみましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/151973/bdb5e132-0bb2-7787-7704-133450e639fe.png)

test.dbの権限が-rw-rw-rw-となっていて、上のsample.dbの権限とは違う権限に変更されていることがわかります。

## データベースをコピーして移動
次に、/data/data/パッケージ名/databases配下のデータベースを、pullできる場所にコピーしてあげましょう。
実はここで、各OSによってコピーができるかできないかの振る舞いが違っているんじゃないかという説が仕事中に発生しました。

まずは、7系以下で実行可能なコマンドを説明します。
### Android7.0以前の方法
以下のコマンドで移動ができます。

```
adb shell "run-as パッケージ名 cat databases/test.db > /sdcard/test.db"
```

この方法は万能で、Android7.0であれば大体データベースをコピーできます。

実はcpコマンドでもコピーができます。

```
adb shell "run-as パッケージ名 cp data/data/パッケージ名/databases/test.db /sdcard
```
これで/sdcard配下にtest.dbが移動されているはずです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/151973/457eb157-99f5-213a-cd0d-25618c0b3fd3.png)

無事に移動ができました！

### Android8.0の方法
色々なQiitaの投稿にも書いてある↑の方法。
この方法が通用しないのがAndroid Oreoです。曲者。

ただ、上の方法は、catができてれば複製ができるということ。

そのため、run-asコマンドなしで直接`/data/data/パッケージ名/databases`にアクセスしたら取得できました。

コマンドは以下で行けました。

```
adb shell "cat data/data/パッケージ名/databases/test.db > /sdcard/test.db"
```

## ローカル環境にデータベースを移動させる
sdcard配下にコピーができたら、あとはローカル環境に移動させるだけです。

今回はデスクトップに配置します。

```
adb pull /sdcard/test.db ./Desktop/
```

取得できました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/151973/450a27d6-225e-ca56-2219-efcc6bc5c276.png)

これでデータベースをアプリから抜き出すことができました！

# 取得したデータベースをGUI上で見たい！
取得したデータベースをGUI上で確認したいです。
私は仕事で[DB Browser for SQLite](http://sqlitebrowser.org/)を使って確認していますので、これをおすすめしておきます。

## それ以外の方法
それ以外のDBの確認方法としては、stethoを導入しての確認方法があります。

@Yuki_312 さんが書いてくれてます。
http://yuki312.blogspot.jp/2015/03/android-stethosqlite-preference.html

この方法でも簡単にDBアクセスできます。

ただし、注意点としてSQLCipherでデータベースの暗号化をしている場合は、アクセスした瞬間アプリがクラッシュしますので、くれぐれもご注意ください。

#　追記（2018/01/20）
上記方法は、現場で実行した方法で、データベースもきちんと取れて確認済みでした・・・・が、
家で試しにやってみると、catはできるものの/sdcard配下に複製するとファイルサイズが０になっていて確認できませんでした。。。

何が原因か今のところわかっていないので、分かり次第追記します。
LaTeX文章を2段組で書く方法

# 概要
$\rm\LaTeX$を用いて論文のように全2段組で書く方法
# 書き方
```latex
\documentclass[a4j,twocolumn]{jarticle}
```
# 表だけ1段組で書く
`\begin{table},\end{table}`の代わりに`\begin{table*},end{table*}`を使う．

```latex
\begin{table*}
…%いつも通りの表の内容を書く
\end{table*}
```
# 図だけ1段組で挿入する
`\begin{figure},\end{figure}`の代わりに`\begin{figure*},end{figure*}`を使う．

```latex
\usepackage[dvipdfmx]{graphicx}

\begin{document}
…
    \begin{figure*}
        \centering
        \includegraphics[width=\linewidth]{hoge.png}
        \caption{fuga}
        \label{piyo}
    \end{figure*}
…
\end{document}
```
ちなみに，`width=\linewidth`と書くことで図をページの幅基準で出力してくれるので2段組の際にはおすすめ．
#おまけ
##2段組の間にある空白の幅を調整する方法

```latex
\documentclass[a4j,twocolumn]{jarticle} 
\setlength{\columnsep}{3zw}%ここを任意の幅にする．
…
\begin{document}
…
\end{document}
```
3zwは，全角文字で3文字分の幅を開ける設定．
##sectionだけどsection番号をつけない方法
「概要」などの時におすすめ．

```latex
\section*{hoge}
```
## jreport形式の際に「関連図書」を「参考文献」へ書き換える方法
```latex
\documentclass[a4j]{jreport}
\renewcommand{\bibname}{参考文献}
\begin{document}
…
\begin{thebibliography}{9}
\item hoge
\bibitem[label] fuga
\end{thebibliography}
\end{document}
```
ちなみに

- `\begin{thebibliography}{9}` の9は，参考文献の数が1~9個である場合に使う．参考文献の数が2桁の時は99と書く．
- `\item`は，単純に参考文献を並べる時に使用する．
- `\bibitem[label]`は，本文中に参考文献番号を書く時に利用する．
本文中には`\cite[label]`と書く．
TypeScript 2.4+におけるRedux Action

TypeScriptでReduxのActionをどのように書くかは記事によってばらつきがあります。これからRedux+TypeScriptを書く人が迷わないようまとめたいと思います。

## TL;DR

**String enums**を使おう。

TypeScript2.4から[Enums](https://www.typescriptlang.org/docs/handbook/enums.html) にString enumsが導入されています。2.4+以降の環境であればString enumsを使うことでより型安全にReduxが書けるよって記事です。

## Enumsを使わないパターン

少し古い記事だと次のようにActionのtypeが文字列定数で定義されているパターンをみます。

```ts
const INCREMENT_COUNTER = 'INCREMENT_COUNTER';
const DECREMENT_COUNTER = 'DECREMENT_COUNTER';
```

JSの場合に近い書き方ですが、それぞれのActionを定義する際にせっかくのTypeScriptの型を生かしづらいです。型を生かしてActionを書くとすると次のようになりちょっと冗長ですね。

```ts
const INCREMENT_COUNTER: 'INCREMENT_COUNTER' = 'INCREMENT_COUNTER';

interface IncrementCounterAction extends Action {
  type: typeof INCREMENT_COUNTER;
  payload: {
    num: number;
  };
}
export const incrementCounter = (num: number): IncrementCounterAction => ({
  type: INCREMENT_COUNTER,
  payload: {
    num
  }
});
```

他にtypeは宣言せずに直接文字列リテラルを指定しているパターンもあります。

```ts
interface IncrementCounterAction extends Action {
  type: 'INCREMENT_COUNTER';
  payload: {
    num: number;
  };
}
```

Reducerでtypeをチェックする際に、ありえないcaseを書くとコンパイルエラーになる(TypeScript 2.1+であれば)ので文字列リテラルも悪くはないですが、文字列をコピペするのはあまりしたくないですし、名前空間を用意してスコープを絞りたくなります。

## TypeScript 2.4以降での実装

### Actionのtypeを定義する

String enumsを用いて次のように書きましょう。

```ts
enum ActionTypes {
  INCREMENT_COUNTER = 'INCREMENT_COUNTER',
  DECREMENT_COUNTER = 'DECREMENT_COUNTER'
}
```

### Action/ActionCreatorを定義する

次にActionとActionCreatorを定義します。

```ts
import { Action } from 'redux';


interface IncrementCounterAction extends Action {
  type: ActionTypes.INCREMENT_COUNTER;
  payload: {
    num: number;
  };
}
export const incrementCounter = (num: number): IncrementCounterAction => ({
  type: ActionTypes.INCREMENT_COUNTER,
  payload: {
    num
  }
});

interface DecrementCounterAction extends Action {
  type: ActionTypes.DECREMENT_COUNTER;
  payload: {
    num: number;
  };
}
export const decrementCounter = (num: number): DecrementCounterAction => ({
  type: ActionTypes.DECREMENT_COUNTER,
  payload: {
    num
  }
});

export type CounterActions = IncrementCounterAction | DecrementCounterAction;
```

typeには上で定義したEnumsのメンバーを指定します。また、今回の本題ではないですが、Actionは[Flux Standard Action](https://github.com/acdlite/flux-standard-action)に従って定義することをお奨めします。

```ts
// 微妙な書き方
interface IncrementCounterAction extends Action {
  type: ActionTypes.INCREMENT_COUNTER;
  num: number;
}
```

### Reducerを定義する

合わせてReducerも書くと次のようになります。

```ts
export interface CounterState {
  count: number;
}
const initialState: CounterState = {
  count: 0
};

const reducer = (state: CounterState = initialState, action: CounterActions): CounterState => {
  switch (action.type) {
    case ActionTypes.INCREMENT_COUNTER:
      return { count: state.count + action.payload.num };
    case ActionTypes.DECREMENT_COUNTER:
      return { count: state.count - action.payload.num };
    default:
      return state;
  }
};

export default reducer;
```

ありえないcase値を指定しようとするとコンパイラに怒られますし、Tagged union typesもちゃんと効くので各case内で存在しないpayloadにアクセスする心配もありません。ガシガシ補完きかせられるので書くのもちょっと楽になります。

## まとめ

String enumsを使って型の恩恵をより得ながらReduxを書こう！
collection_check_boxesで複数のカラムを表示する方法

`collection_check_boxes`を使用する機会があったので備忘録として残しておこうと思います。

##やったこと
- collection_check_boxesで複数のカラムを表示する

##各言語のバージョン・開発環境
- ruby 2.4.1
- Rails 5.1.4
- haml 5.0.3
- Bootstrap 4.0.0.beta

##前提
以下の様な関連があります。
<img width="631" alt="スクリーンショット 2018-01-13 16.10.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/114886/e6865fa1-585c-2de4-c4e6-545360c1a1a0.png">

##画面の遷移イメージ
グループの一覧ページがあります。
<img width="742" alt="スクリーンショット 2018-01-13 16.50.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/114886/fad0d00f-aa54-bdef-2fa1-2d9201cb5833.png">
「所属ユーザー一覧ボタン」がクリックされると「所属ユーザー一覧」へ遷移します。
<img width="736" alt="スクリーンショット 2018-01-13 16.50.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/114886/092f81b0-6b76-edf5-42e1-a82c5d660741.png">
「ユーザー追加/除外ボタン」がクリックされると「メンバー登録」へ遷移します。
※書いててここのボタンの表示はユーザーよりもメンバーの方が適切だなと思いましたが、~~修正が面倒なので~~進みます。
<img width="731" alt="スクリーンショット 2018-01-13 16.50.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/114886/2ba807a2-3b46-7ba8-f69c-4ad75f473cf7.png">

#### メンバー登録の周りのソースコード

```Ruby:members_controller
def index
  @group = Group.find(params[:group_id])
  @users = User.all
end
```

```Ruby:index.html.haml
= form_with(model: @group, url: admin_group_members_path, group_id: @group.id, local: true) do |form|
  
  #第3引数に指定したものが、checkboxのvalue値に、第4引数に指定したものが text値になる。
  = form.collection_check_boxes(:user_ids, @users, :id, :name) do |user|
      = user.label { user.check_box + user.text }

= form.submit class: "btn btn-primary float-right"
```

##collection_check_boxesで複数のカラムを表示する
メンバー登録において、ユーザーのアカウント名（name） だけではなく、メールアドレス(email)も表示したい時は`collection_check_boxes`の箇所を以下の様に変更すれば、メールアドレス表示させることができます。

```Ruby
= form.collection_check_boxes(:user_ids, @users, :id, :name) do |user|
      = user.label do
        = user.object.name
        = user.object.email
        = user.check_box
```

これにBootstrapを当てていい感じのテーブルにすると以下の様なコードになります。

```Ruby
  = form_with(model: @group, url: admin_group_members_path, group_id: @group.id, local: true) do |form|
    %table#group_list.table.table-striped
      %thead
        %tr
          %th ユーザ名
          %th メールアドレス
          %th 追加/除外
      %tbody
        = form.collection_check_boxes :user_ids, User.all, :id, :name do |user|
          = user.label do
            %tr
              %td= user.object.name
              %td= user.object.email
              %td= user.check_box
```

修正後のイメージです。
<img width="970" alt="スクリーンショット 2018-01-13 17.32.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/114886/2e5208c4-bdea-19d9-edfb-4e21ac267447.png">


参考にさせていただきました。
[collection_check_boxesメソッドの構造確認](https://qiita.com/sho012b/items/3a595fde14516081dff5)
Excelの全関数の情報源

###最も多くのExcel関数について記載されている（と思われる）ページは以下。

[できるネット](https://dekiru.net/category/windows-office/excel-kansu/)


###書籍で言うならば、以下。

[できるポケット Excel関数全事典 2013/2010/2007対応](http://amzn.to/2mtM9TX)
羽山 博  (著),‎ 吉川 明広 (著),‎ できるシリーズ編集部 (著)
LaTeXにソースコードを【美しく】貼る方法

# お知らせ
こちらの記事の内容は2019年で更新を停止しています。
もし最新情報がありましたら、コメント欄でご指摘いただけますと幸いです。

# 概要
$\rm\LaTeX$ にソースコードを美しく貼る．
具体的には,

- ソースコードは等幅フォント
- 左側に行数を表示
- キャプションはソースコードの上
- キャプションは「ソースコードn」(n=1,2,3…)
- キャプションの下とソースコード最終行の次に線を引く

を目指す．
また，おまけとして，

- キャプション名を変える方法
- キャプション番号を変える方法

も紹介する．

#方法
~~## jlisting.styのインストール
注：jvlistingで対応可とのコメントをいただきました。私は試していないのですが、参考までに。
jlisting.styは以下からダウンロードできます。
https://ie.u-ryukyu.ac.jp/e075729/2009/08/02/jlistingsty%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/~~

texliveに標準で付属しているjvlistingを使うことで、jlistingのインストールは不要となります。
## サンプル
```sample.tex
\documentclass[a4j]{jarticle} %ここは関係ない
\usepackage{listings,jvlisting} %日本語のコメントアウトをする場合jvlisting（もしくはjlisting）が必要
%ここからソースコードの表示に関する設定
\lstset{
  basicstyle={\ttfamily},
  identifierstyle={\small},
  commentstyle={\smallitshape},
  keywordstyle={\small\bfseries},
  ndkeywordstyle={\small},
  stringstyle={\small\ttfamily},
  frame={tb},
  breaklines=true,
  columns=[l]{fullflexible},
  numbers=left,
  xrightmargin=0zw,
  xleftmargin=3zw,
  numberstyle={\scriptsize},
  stepnumber=1,
  numbersep=1zw,
  lineskip=-0.5ex
}
%ここまでソースコードの表示に関する設定
\begin{document}
HelloWorldのソースコードを，ソースコード\ref{fuga}に示す．
…
\begin{lstlisting}[caption=hoge,label=fuga]
#include<stdio.h>
int main(){
   printf("Hello world!");
}
\end{lstlisting}
\end{document}
```
#結果
<img width="496" alt="スクリーンショット 2018-01-13 21.55.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/160611/518f3727-8b2b-5325-1173-e4bcc84ff0f2.png">

# おまけ
## キャプション名を変える方法
キャプション名「ソースコードn」を「プログラムn」に変えるには，`\begin{document}`の前に`\renewcommand{\lstlistingname}{プログラム}`と書く．
## キャプション番号を変える方法
ここでは，jreport形式において，キャプション番号を「[chapter番号].[section番号].[subsection番号]-[そのsubsection内においてn番目]」に変更することを目標とする．

```sample.tex
\documentclass[a4j]{jreport}
…
\makeatletter
	\AtBeginDocument{
	\renewcommand*{\thelstlisting}{\arabic{chapter}.\arabic{section}.\arabic{subsection}-\arabic{lstlisting}}
	\@addtoreset{lstlisting}{section}}
\makeatother
…
\begin{document}
…
```
この時，キャプション番号の一番後ろ(ハイフンの右側)の部分を1から数え直したいは，自分で都度リセットする必要がある．
そこで，数え直したい場所の直前に`\setcounter{lstlisting}{0}`を書くことで1にリセットすることができる．
npm パッケージのページをブラウザで開く方法

# [`npm docs`](https://docs.npmjs.com/cli/docs) (`npm home`)

ホームページを開く。

```shell-session
$ npm docs # カレントディレクトリのパッケージ

$ npm docs eslint @types/node # 複数パッケージを指定可能
```

# [`npm repo`](https://docs.npmjs.com/cli/repo)

リポジトリページを開く。

```shell-session
$ npm repo # カレントディレクトリのパッケージ

$ npm repo eslint # パッケージを1つだけ指定可能
```

# [`npm bugs`](https://docs.npmjs.com/cli/bugs) (`npm issues`)

issue ページを開く。

```shell-session
$ npm bugs # カレントディレクトリのパッケージ

$ npm bugs eslint # パッケージを1つだけ指定可能
```

---

以下の Bash 関数は不要で、npm 標準のコマンドのみで実現できた… :sweat_drops: 

# ~~インストール~~

~~`~/.bashrc` に `npm-open` 関数を追加する。~~

<script src="https://gist.github.com/ybiquitous/31a7f54216cdd2a53d194efac93f7a29.js"></script>

```bash:~/.bashrc
# Usage: npm-open <package>
function npm-open() {
  [ -n "$1" ] && npm info "$1" homepage repository.url | head -1 | cut -d ' ' -f 3 | xargs open
}
```

# ~~使い方~~

```shell-session
$ npm-open eslint # homepage URL

$ npm-open @types/node # repository URL
```

# ~~Gist~~

*Open NPM package's URL*
https://gist.github.com/ybiquitous/31a7f54216cdd2a53d194efac93f7a29
指定した時間経過したらGameObjectを消すスクリプト

## 前提条件
Unityのバージョン：2017.2.0f3
使用した言語：C#
筆者のプログラミング能力：チンパンジー

## コード
```C#
    // 引数の宣言
    // Destroyする時間を指定する
    public float time = 2;
    
    // DestoryしたいGameObject(基本はアタッチされたもの)
    public GameObject gameObject;

    // Use this for initialization
    void Start()
    {
        // Destory
        Destroy(gameObject, time);
    }

    // Update is called once per frame
    void Update()
    {

    }
```

## 内容
一定時間後にGameObjectをDestroyするだけ
プレハブなどにアタッチして、呼び出した後に消したい時とかに使えそう。

## 変数
###GameObject gemeObject
消したいGameObject
###float time
何秒後にgameObjectを消すか
日本天文学会年会の予稿をクラウド (Overleaf) で書く

# これは何か
日本天文学会の年会の予稿をクラウド ([Overleaf](https://www.overleaf.com/)) を使って準備してみました。その手順をまとめます。

# 背景
## 日本天文学会年会
[日本天文学会](http://www.asj.or.jp/)は日本の天文学研究者を中心とする学会で、春と秋の年 2 回、年会が開かれます。年会は、3-4 日の開催期間中に 900 名弱の研究者が集まり 650 件ほどの講演が行われる ([2016年度事業報告書](http://www.asj.or.jp/asj/info/AnnReport2016.pdf))、日本で最大の天文学者のイベントです。

年会へ講演を申し込むためには、講演の概要を記した予稿を提出します。予稿は天文学会の指定するフォーマットを用いて tex で準備します。

## Overleaf
[Overleaf](https://www.overleaf.com/) はクラウドの tex 環境です。tex 環境を自前の計算機に用意する手間を省けて、どの計算機からもアクセスでき、複数人でシェアもできるのがメリットです。複数のタブで同じファイルを開けば、複数箇所を同時に編集もできます (例えば、本文とreferences の章を同時に編集)。また、編集がリアルタイムで反映されてすぐに確認できるのも便利です。

# 方法
## 0. 準備
- アカウントが無い人は作りましょう --> [Sign Up for a Free Overleaf Account](https://www.overleaf.com/signup)
- Sign In します

## 1. プロジェクトを作る
- "NEW PROJECT" をクリックし、新しいプロジェクトを作ります
    - フォーマットは、"Basics" の "Blank Paper" を選択します
- main.tex だけあるはずです。中身は、最小限の tex コードです。

## 2. 日本語を使えるようにする
tex コンパイルに関する設定は、"latexmkrc" というファイルを設置して記述します。

- files の右の ▼ マークをクリックし、"Add..." > "Blank File" を選択
- ファイル名の入力モードになるので、 latexmkrc と入力
- latexmkrc ファイルの中に以下を記述

```
$latex = 'platex';
$bibtex = 'pbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$pdf_mode = 3; 
```

- ページ右上の歯車マークをクリックし、"Settings" 画面を表示させる
- "Project Settings" > "Advanced Build Options" > "LateX Engine" に "LaTeX dvipdf" を選択し、 "SAVE PROJECT SETTINGS" をクリック

## 3. 天文学会の予稿フォーマットを設置する
- [年会の申込ページ](http://www.asj.or.jp/nenkai/abs/)より、最新のパッケージをダウンロードし、解凍する
- クラスファイル (例: 2018a.cls) を Overleaf にアップロード
    - files の右の ▼ マークをクリックし、"Upload from..." > "Computer" を選択し、クラスファイルをドラッグ
- 本文ファイル (例: template-ja.tex) の内容を、main.tex に上書きする

## 4. 予稿を書く
- これで準備完了です
- 予稿を書きましょう！！