OmniAICreator/Qiita-1.07M huggingface dataset:
NotesデータベースをMicroSoft Accessで作ってみる　（その１）

自分の端末にMicroSoft Accessがインストールされていることに気付いたので、Accessデータベースを作ってみようと思います。

#作りたいモノ
作りたいと思ったのは、社員情報を一元的に管理できるAccessデータベース。
作りたい理由は以下の２点
1. 自分以外の社員が、どんなスキルがあるのかを知りたいから
　「××について知りたいな～」というときに、知っている人を探せると便利。
2. Excel職務経歴書の使い勝手が悪いから
　自分が説明しやすくて、カスタマイズしやすくて、見やすい職務経歴書が欲しい。

MicroSoftによれば、[SharePoint サイトでデータを共有する]
(https://support.microsoft.com/ja-jp/office/access-%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E5%85%B1%E6%9C%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-03822632-da43-4d8f-ba2a-68da245a0446#__toc310279044)こともできるそうなので、社内で共有できる社員情報データベースを目指してみよう。

……Access、使ったことないけど。

#プロトタイプ作成
作りたいイメージに沿って、Notesでプロトタイプをざっくりと作成。

##テーブルみたいなモノ
Notesデータベースはリレーショナルデータベースではないので、フォームを使ってテーブルっぽいモノを作成する。

|社員情報フォーム|資格情報フォーム|職務経歴フォーム|
|:---:|:---:|:--:|
|![shain.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/983034/4b104cd2-d56c-862e-a070-2b7b46b567c0.png)|![shikaku.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/983034/b64a81c6-c6b1-a517-e071-ff02e70e81e8.png)|![keireki.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/983034/83d72811-104a-a656-132d-d9c7ce03d871.png)|

リレーションは主キーを社員番号としています。
![rire.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/983034/b05ce9b9-6443-119e-7d26-375b7c4a919f.png)

##画面イメージ
こんな感じでレコードを登録していくと

|ビュー名|資格情報フォーム|
|:---:|:---:|
|社員情報|![VWStaff.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/983034/3d247b28-4599-a486-bc70-25dc10c38bbb.png)|
|資格情報|![Vwshikaku.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/983034/d906275d-f059-4f3b-0583-20ad4b49648a.png)|
|職務経歴|![vwSHokumu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/983034/06dc1d14-0829-6b05-da21-e6ca2f4dd0d9.png)|

社員情報フォームに、社員コードをキーに資格と職務経歴の「Notes埋め込みビュー」を追加すると、社員の資格と職歴を抽出して表示が行われます。
![form.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/983034/90982e45-544b-d169-0b20-06c7733003f8.png)

これっぽいことを、Accessで実現しようと思います。（「その２」に続きます。）
E-Mail Verificationを実装中にTarget class [App\Listeners\LogVerifiedUser] does not exist. エラーに遭遇した時の対処法。　 laravel6.20

![errors.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686759/f8090074-7388-50df-de8a-077f71f38565.png)
#はじめに
laravelでwebサービスを開発中に詰まってしまったので、備忘録として投稿します

#環境

laravel 6.20
Mailtrap
を使用していました。

#実装に際して参考にしていたQiita記事
https://qiita.com/usaginooheso/items/d965f95191739f9335e8

こちらの記事にて確認メールを受信し、いざボタンをクリックしてみると...

![errors.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686759/9499d681-699a-fffe-8aa9-851120254380.png)


とエラー画面が表示されてしまう。
DBをみてみると、email_verified_atカラムは更新されており、処理は成功している。

#解決

エラーの通り、LogVerifiedUserクラスが存在しないことが問題のようです。
調べてみるとこちらのコマンドを打てばLogVerifiedUserを作成されるそう。

`php artisan event:generate`

これで設定したリダイレクト先へ遷移するようになりました！
vue.js で google tag managerやろうぜ

# GTM って何よ？

google analytics や adwords のタグをかんたんに管理できる。
今後は直接挿入でなく、これを使ってくべきですね。


・Analyticsのプロパティ
・GTMのコンテナ
の2つが必要になる。

# やり方教えてよ

まずはアカウントを作ろう

https://tagmanager.google.com/


![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/9c895171-2074-ffb7-e6c3-cf9acfb87584.png)

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/a33a3214-dbd4-160b-97c6-eaee2b990762.png)

英語のポップアップ（利用規約)が出るので、OKする

`ここまででアカウント作成OK`

# Analyticsの設定

タグを選択し、新規をクリック。
タグの設定をクリック。

2022/04/24追記
Google アナリティクス GA4 設定を選択すること


![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/02910bca-3948-025c-7bbc-27be5b451cf8.png)

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/80d1244f-44b8-c93b-bf98-ec033fea287f.png)

Google アナリティクス:ユニバーサル アナリティクスを選択

Google アナリティクス設定の 新しい変数を選択

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/1d521109-b93e-8e50-0be8-21dfacfba68c.png)


トラッキングIDにあなたの Analytics のIDを入れる

2022/04/24 追記
UA ではなく G- から始まる変数になっている

```
gtag('config', 'G-xxxxxxxJ');
```

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/db162efe-c086-fbf6-c08e-b1965ab53420.png)

で保存。
今度はトリガー選択をクリックし、 All Pages を選択し、保存。

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/35e8d64d-5094-2509-7e0f-ffc8242bbe21.png)

ここまでできたら、タグを有効にするために公開しましょう。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/8cc58372-bb02-c679-ab52-dfdca592568a.png)


これで公開され、Analytics の設定が完了しました。


# 続いて、vue.js で利用してみましょう。

※古いAnalyticsタグは削除しておいたほうが良いかも


vue2 で使う場合は必ずバージョンを指定。
でないと、vue3 用のが入ってしまいバグる

```

npm install vue-gtm@3.0.0-vue2

```


2022/04/24 追記
https://www.npmjs.com/package/vue-gtm
を参考にバージョンが変わっている。

インスコok

続いて使うにはapp.jsの最下部らへんに

```app.js

import VueGtm from 'vue-gtm';

Vue.use(VueGtm, {
    id: 'GTM-hoge92',//your
});


```

ページにアクセスしてテストしてみよう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/f09ff6f2-f0a4-8f47-568a-6b9d1cc89fe5.png)

はい！
アクセスがカウントされていますね。


# Google広告のコンバージョンとか取得するには？

https://www.kwm.co.jp/blog/cv_tag_setting2019/

を参考に設定すると良い。
ちなみに、google広告をクリックしていないと、コンバージョンに反映されない。
なので、有料でクリックする必要がある。
音楽機械学習ライブラリMagentaのRNNネットワークとEncoder Decoderのファイルはどこにあるのか？

音楽機械学習ライブラリMagenta
https://magenta.tensorflow.org/

についてRNNのネットワーク構成はどこで確認できるのか？Encoder Decoderのファイルはどこ？と質問をいただくのでQiitaにも書いておきます。

各ファイルについてGitHubのurlリンクでお伝えします。

Magentaの音楽生成各RNNのネットワーク構成については
events_rnn_model.py
https://github.com/magenta/magenta/blob/master/magenta/models/shared/events_rnn_model.py

各encoder decoderに関しては
note_seqの中に複数のPerformance_RNN関連ファイル
https://github.com/magenta/note-seq/tree/master/note_seq

があるのでそちらを確認ください。
Adobe XDのここがすごい

#Adobe XDを知る前
いままでは個人的なサイトしか作ったことがなかったので、すべて頭の中でイメージしたものをHTMLにて表現していたが、今年の目標であるフロントエンドでの副業をするにあたって、自分以外の人物にWEBサイトを提案するということが必要になった。
調べていくうちに、WEBサイトの設計図（ワイヤーフレーム）や原型（プロトタイプ）を作ることができるAdobe XDなるものがあるということを知り、Udemyでの講座を受講してみた。

【2020年最新版】Adobe XD 手を動かして覚えるUI/UXプロトタイピング。初級から高度テクニックまで全てを学ぶ
https://www.udemy.com/share/102JO2AEcZcllWTX0F/

##1.リピートグリッドとコンポーネントがすごい
WEBサイトでは、商品一覧など同じ要素をもったブロックが連続して並ぶことが多々ある。そのようなブロックを一個一個コピー＆ペーストして、間隔を調整する作業が生まれる。そのようなときにリピートグリッド機能を使うことで、ブロックの連続コピーと間隔が一瞬で調整可能になる。
![Udemy_RepeatGrid.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655898/9659f5b3-fc17-d5ce-7fd2-92f5f362cd74.gif)
リピートグリッドにて複製したあとに、解除して個々のブロックの中身を変更することも可能だが、解除前なら最初のブロック内要素を変更した場合には、複製したブロックも一括で変更してくれる。
似たような機能にコンポーネントというものもある。こちらは作成したブロックをコンポーネントとして登録し、同じものを複製（インスタンス）することができる。コンポーネントを修正や変更するとインスタンスも自動で変更される仕組みになっている。ヘッダーブのように複数ページに同じ要素を持つものをコンポーネント化することで、同じ調整をなんども行うことがなくなる。また、インスタンスの一部を変更すると、その部分はインスタンス独自の構成になり、ほかの要素はコンポーネントが反映される。

##2.プレビューがすごい
プレビューでは、実際の閲覧のように作業ウィンドウが非表示になりコンテンツだけが表示される状態になる。実際の閲覧時の印象を確認することができるが、本来のWEBサイトは複数のページで構成されることが多く、そのページはリンクでつながっている。これをXDだけで表現することもできる。リンク元とリンク先を矢印のようなアイコンでつなぐ作業だけで、プレビュー画面で実際のリンクのような処理が可能だ。
![Udemy_Prev.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655898/b2e75a18-32e3-d70c-c900-8e44bff3a904.gif)
次に出てくる共有でもそうだが、簡単に実際のページを見るような感覚でクライアントに提案できるのはすごい

##3.共有がすごい
XDが出る前はPHOTOSHOPやILLUSTRATORで作った版をPDFや紙などで書き出して、クライアントに提出し、修正コメントなどをPDFに書き込みや別途連絡などでやりとりをしていたのだと思う。また、完成したプロトタイプではサイズや行間、パディングなどの見えない設定値の確認が非常に困難だった。
XDでは、Adobe Creative Cloudを通して、ブラウザにて作成したものを閲覧、さらに修正箇所にチェックをつけコメントまで付けられる。さらに、開発用の共有もあり、コンポーネントのサイズやマージン・パディングなどの確認やCSSまで記述してくれる。
![Udemy-XD01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655898/adfa5d19-87f9-3edb-3568-ecec86a9ec63.jpeg)
実際にこのCSSが使い物になるかどうかは別として、開発するにあたり、細かい数値がしっかりと表記されるのは非常にありがたい機能だ。

##XDを使ってみて
基本的な操作はILLUSTRATORのような操作感で、BOXを配置し、位置を調整するという作業の連続なので、非常にとっつきやすく簡単にプロトタイプを作ることができた。いままでは紙でラフスケッチのような構成図を作り、頭の中でイメージしながらコードを書き、全体の調整をコツコツとしていく作業だったが、完成したビジュアルがあるおかげで、作業効率の向上になるのではないか。今後も講座で習ったことを復習しながらプロトタイプを作成していく。
【GAS】メソッドを追加する際のthisの振る舞い

この記事は[ノンプロ研](https://tonari-it.com/community-nonpro-semi/)の第4期中級GAS講座のための事前課題をするなかで、新しく知ったこと、わからなかったこと、気づいたこと、調べたことなどを発表する記事です。

仕事の事情もあり、年末に入会したノンプロ研。入会間もないですがすごく居心地が良く（社会情勢により完全オンライン移行中なのにちょっと不思議な表現ですが）、とても良い学びの場になると感じています。

会の重要なモットーでもある”教えることは2度学ぶこと”を実行するためにも、事前課題から自分の学びはアウトプットしていこうかと思いました。

この記事では、オブジェクトに関してあった発見を書こうと思います。具体的には、GASでの`this`の振る舞いについてです。

## クラス定義時の`this`

事前課題前のわたしの`this`の理解は、インスタンスメソッドの定義でインスタンスそれ自身を指す使い方のみでした。

```js
class Person {
  constructor(name, age) {
    this.name = name;
    this.age  = age;
  }
  isAdult() {
    return this.age >= 18;
  }
}

const alice = new Person('Alice', 13);

alice.greet(); // "Hello! My name is Alice."
```

## オブジェクト定義時の`this`

インスタンスでない通常の(?)オブジェクトにもメソッドを持たせることができます（事前課題で初めて知った）。

```js
const person = {
  name: 'John Doe',
  age: 42,
  isAdult() {
    return this.age >= 18;
  }
};

console.log(person.isAdult()); // true

```

## メソッド追加時の`this`

この`person`に`gender`属性と`isMale()`メソッドを持たせるとします。`isMale()`は自身の`gender`が`male`であるかどうかを返すメソッドです。`person.isMale`に`function`キーワードで代入することで実現できます。

```js

const person = {
  name: 'John Doe',
  age: 42,
  isAdult() {
    return this.age >= 18;
  }
};
  
person.gender = 'male';
person.isMale = function() {
  return this.gender === 'male';
 }

console.log(person.isMale()); // true

```

ところで、`person`の定義部分ではES6で導入された省略記法を使っています（これも初見）。

```js
const person = {
  ...
  isAdult() { ... }
}
```

後からメソッドを追加する時にも、ES6っぽい書き方ができないかな？と思いました。

ES6以降導入された、アロー関数を使って定義してみます。

```js
const person = { ... };

person.isMale = () => {
  return this.gender === 'male';
}
```

わーい今っぽい。
ところが、実際にこれで`person.isMale()`をしてみると`false`になってしまいました。

```js
const person = { ... };
  
person.gender = 'male';
person.isMale = () => {
  return this.gender === 'male';
}
console.log(person.isAdult()); // false
```

`this.gender`が`male`になっていないということなのかな？と思って`this.gender`を調べてみると、`this.gender`が`undefined`になっていました。

そこで`this`自体も`console.log()`してみると、`this`がグローバルオブジェクトになっていることがわかりました。

![スクリーンショット 2021-01-13 1.03.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258098/e888dbb5-a778-f995-5462-33d825f5c18a.png)

※answer...というのは、事前課題の解答として自分が同一プロジェクト内に書いている関数たちです。

オブジェクト定義のその中で書かないと、`this`はそのオブジェクトを指してくれないんですね。

## まとめ
ということで、メソッド定義の際の`this`の扱いには注意が必要、ということを改めて発見できました。

書きながら調べてみたら、[タカハシさんがすでに思いっきりこのテーマを扱っていた](https://tonari-it.com/gas-class-self-this/)のでたはは〜という感じでしたが、自分で書いてみることで勉強になったと思います。演習もやったという気持ちになるし、また書きたいと思っています。読んでくださった方の参考になれば幸いです。
プログラミング初学者がデバッグを知る

※この記事はデバッグについての忘却録です。
※この記事の内容は初学者による筆者個人の見解です。ご了承ください。

#初学者における「ロジックを理解する」について
制作物を見てもらう前提の話ですが、初学者におけるプログラミングの学習練度を実際の現場で働かれている方が測る一つの手法として、自分で記述したコードの**「ロジックを理解している」**かどうか、で判断するという意見をお聞きします。

しかし、実際は初学者が一からロジックを組み立ててコーディングするのは難しく、どうしても実装したい機能をブラウザで検索し、参考元からの一部抜粋(コピぺ)の塊になりがちです。自分の書いたコードのレビューなんかも怪しいところです。(自分はそうだった。)
とりあえずコーディングしていき、エラー解消等をしていって動いたからオッケーが往々にしてあると思います。
それ自体に否定的になるわけではなく、**自分で書いたコードの「ロジックを理解している」**という観点とはまた別の話になるのかなと思います。

自分の培ってきたものを見て貰いたいのに、そんな曖昧な状態で判断して頂くのは、相手にとっても自分にとっても良いものではありません。
それ以上に、一緒に働かせてもらえるようになってからが大変になってしまいます。

そんな状況を改善するために実施していきたい２つの方法があります。それが、

**デバッグ**　と　**自分の記述したコードにコメントアウトを残す**　ことです。


#デバッグとは
デバッグは、システムやプログラムのバグを取り除くことを指す。
バグを発見するための専用ソフトウェアをデバッガという。

##テストとデバッグ
テストとデバッグは、意味合いが似ているので混同しがち。しかし、両者には違いがあります。

その違いとは、テストはバグを発見することだけではなく性能や機能を評価するためにも行われることです。デバッグはパフォーマンスの評価はしない。(テストの手法自体は多岐にわたる)

#コメントアウトを残す
ここで行うことはコードレビューではありません。
記述したコードがどんな動作をするのかをコメントアウトで残すことで、理解を深めることです。

#まとめ
**「ロジックを理解する」**ことにおいて、大切なのは自分の記述したコードのデバッグができるようになること。(デバッグのやり方を覚える事)
そして、学習中のコーディングでは理解の曖昧な関数や機能には積極的に(どういった動作をするのかを)コメントアウトを残す。
iOSのバックアップで、FirebaseのAuthは機種変更では引き継がれない

# はじめに

タイトル通りですが、Firebaseの認証情報 `Auth.auth().currentUser` は、あるiOS端末のバックアップを取って、他のiOS端末で復元したとしても認証情報を引き継ぐことはできません。

## iOS端末Aのバックアップを取って、端末Bで復元する

この場合、復元された端末Bでアプリを動作させてもcurrentUserは`nil`です。

## iOS端末Aのバックアップを取って、再度端末Aで復元する

この場合、端末AのcurrentUserのuidはバックアップを取った時と同一です。つまり**同一端末での復元ではFirebaseの認証情報は復元されます**。

# まとめ
このようにバックアップの復元先が元の端末かそうでないかでFirebaseの認証情報が復元されるかどうかが変わってきます。
特にUserDefaultsやキーチェーンなど、復元される項目と組み合わせて情報を組み立てている場合、バグの温床となります。
お気をつけください。
IntellijのTerminal設定

## IntellijのGit Bash Terminal設定
Intellij > Settings > Tools > Terminal
- Shell path = "C:\xxxx\Git\bin\bash.exe"
or
- Shell path = "C:\xxxx\Git\bin\sh.exe" --login -i


## Intellijのcmd Terminal設定
Intellij > Settings > Tools > Terminal
- Shell path = cmd.exe
WSL2でCoqIDE

## 環境
WSL2 + Ubuntu 20.04

## インストール
aptで問題なく入る。

```
$ sudo apt install coqide
```

## トラブルシューティング
### Gtkエラーが出て動かない
XServerが動いていないと、

```
$ coqide
Unable to init server: Could not connect: Connection refused
Fatal error: exception Gtk.Error("GtkMain.init: initialization failed\nml_gtk_init: initialization failed")
```

のようになるので、`VcXsrv`などを入れて、`DISPLAY`環境変数を適宜設定する。
`VcXsrv`の場合、`XLaunch`の起動時に`Disable Access Control`にチェックを入れておかないと、

```
$ coqide
Authorization required, but no authorization protocol specified
...
```
のようなエラーがでる。

## アイコンがおかしい
```
$ sudo apt install yaru-theme-icon
```
で直る。
文系未経験が「42tokyo」に合格したので、感想を書いてみた

いまさらですが、42tokyoのpiscineに合格しましたので、その過程を書かせていただきます。

#自己紹介
関西の某私立大学の経営学部経営学科に在籍しております。
プログラミングは、小学生の時から趣味でゲームをつくってましたとか、中学生の時に暇だからサーバー立てて遊んでました的な、生粋のプログラマンキッズな育ち方をしたわけではなく、普通にサッカーをしてきた、ただの一般人です。（一般人に失礼）


#42tokyoと出会う
いろいろあり、最初はHTML/CSSでHPを作る勉強をしていました。その当時Twitterが盛り上がっている時期であり、僕自身も同じようにHTML/CSSを勉強している仲間を探すためにTwitterで毎日ツイートしていました。そんな中、「42tokyo」というアカウントがたまたまTLで流れてきて、42tokyoのHPを見た瞬間にめちゃくちゃ興奮したのを覚えています。その瞬間、「休学してここに行こう！」と決めました。

#怒涛の試験「piscine」　〜準備編〜
そんなこんなで、42tokyoの試験を受けることになりました。1次試験はオンラインですぐに受けることができるゲームみたいなものです。こちらに関しては説明は省かせていただきます。
オンラインでの試験を合格すると2次試験であるpiscineへの参加が可能になります。
ここで、piscineとはなんぞやということでいろいろ調べていると、piscine体験談がたくさん出てくるのですが、みなさんが口を揃えて、相当厳しい試験であるということをおっしゃっていました。また、現役のエンジニアの方や、理系の将来有望な学生の方など、ライバルは相当手強いということもわかりました。

この状況で、自分はどうすれば合格できるのか、小さな頭を振り絞って考えました。

実際に試験前に行ったことは
・１ヶ月という長い試験になるので、お互いを鼓舞しあえる仲間を事前に探す
・フルコミットできる環境を準備する

前者に関しては、無事にTwitterなどで仲間を集めることに成功。
後者に関しては、24時間空いているコワーキングスペースで、お風呂は近くの快活クラブに2日に１回行き、服に関しては、GUの３枚1000円のTシャツを着回すことにしました。

#怒涛の試験「piscine」　〜試験中編〜
ついに、試験が始まりました。気合は十分でしたが、初日からいろいろと事件が発生します。
カリキュラムに関することは、ここではお話できないのですが、初日から全くわからないという状況でいきなり合格は絶望的のように感じられました。そんなこんなで予定していたスケジュールで動けないほど追い込まれていました。

1日のスケジュール
7:00~　　起床して即コーヒーを入れて勉強開始
12:00~　モンスターエナジー注入
19:00~　晩御飯
20:00~　モンスターエナジー注入
26:00~　睡眠

もちろん、日によってお風呂にいく日もあれば、お昼ご飯を買いに行ったりもしていましたが、基本的にはこんな感じでご飯もろくに食べずに試験に没頭していました。
試験中の食事はほとんど、快活クラブのモーニングと、Uberしたすき家の牛丼でした。本当に両者には恩返ししきれないぐらいお世話になりました。
ここでお礼を言わせていただきます。快活クラブさん、すき家さん、Uber eatsさん、本当にありがとうございました。

#怒涛の試験「piscine」　〜終了〜
そんなこんなで試験がおわりましたが、そこから結果が出るまで毎日不安で不安でたまりませんでした。しかし、１ヶ月の試験をやり抜いた達成感と、確実に成長したのではないかという自信をもってなんとか結果発表まで息絶えることなく過ごすことができました。

結果発表の日は、いつものごとくコワーキングスペースに向かっている途中の電車の中でした。あの瞬間は本当に電車の中にいることを忘れて大声でさけんでしまいそうなほど嬉しかったことを覚えています。メールを開いて、少し下にスクロールした時、合格の文字が見えました。おそらく人生で一番うれしかった記憶であろうと思います。

#piscineを経験した感想
これから先42tokyoのpiscineを受ける方のために、少し先に経験した立場から感想とアドバイスを残したいと思います。（えらそうですいません）
感想としては、こんなすばらしい試験を受けることができてよかったです。そもそも１ヶ月に及ぶ試験なんてなかなかないと思うし、その中でここまで強烈な内容になっているのは、piscineだけだと思います。僕自身、合格という結果で終わることができましたが、仮に不合格であったとしても、この１ヶ月を経験したというの自分の財産になると思います。

アドバイスとしては、この試験はかの有名な漫画の一番有名といっても過言ではないセリフ「諦めたらそこで試合終了」です。完全未経験の僕でも１ヶ月なんとか頑張ることで合格することができました。途中で何回も絶望したけど、純粋に試験を楽しむという気持ちを持って頑張ることができれば、結果はついてきます。諦めないで、楽しんでください。

拙い文章でかつ、長文になってしまいましたが、こんな僕の感想文を読んでくださりありがとうございました。
OracleBronze　勉強記事11

#はじめに
最初の記事のはじめにを参照
https://qiita.com/miyanoShiho/items/ef6dd74478ee2c6a4fea
#今日間違えた問題の復習
##関数
SYSDATE→時分秒まで作成される
NULLIF 2つの式が等しい→NULL
       不一致→式1
##FM修飾子
先行がゼロがどこで回避されていたか？という観点が必要
FM修飾子→先行ゼロなどを除去する。
##FX修飾子
FX→Format eXact
TO_DATEで使われていており、書式と値が厳密に一致している必要がある。
Sony Spresense用 RS-422/485ボード

RS-422/485通信はその長距離通信が可能な故に今でも工場とかでは幅広く使われています。
RS-422、RS-485 共に***差動信号***による伝送で***10Mbps***のスピードで､最大***1.2km***までデータの伝送が可能です。
RS-422とRS-485の違いは1ライン当たりのドライバ、レシーバーの数と全2重、Point to Pointと半2重、マルチドロップの違いです。

RS-422/485に関する詳しい説明は省かせていただきますので以下のサイトを参考にして下さい。
[アイ・ビー・エス・ジャパン株式会社のページ](https://www.ibsjapan.co.jp/tech/details/rs-422-485/rs-422-485-serial.html)
[FiberOpticNetworking’s blog RS-232、RS-422、RS-485の違いは何ですか？](http://fiberopticnetworking.hatenablog.com/entry/2018/10/19/111930)

このボードに使用しているRS-422/485のチップは***Analog Devices社のADM2582EBRWZ***です。
このチップはロジック部分と通信部分が***アイソレーション***されていて、
***最高通信レート: 16 Mbps、1ラインに256ノード***の接続可能となっています。

詳しくは以下のデータシートをご覧下さい。
[ADM2582EBRWZ データシート](https://www.mouser.jp/datasheet/2/609/adm2582e_2587e-1503113.pdf)

回路図とEagle用のデータはGithubにて公開しています。
[kaz19610303/SPRESENSE_RS422_485](https://github.com/kaz19610303/SPRESENSE_RS422_485)

***ジャンパー設定***
SJ1　受信イネーブル制御ピン選択　1: EMMC_DATA3　3:I2S_DIN
SJ2　送信イネーブル制御ピン選択　1: EMMC_DATA2　3:I2S_DOUT
SJ3　ショートでRXラインの終端抵抗有効
SJ4　ショート:RS-485　オープン:RS-422
SJ5　ショート:RS-485　オープン:RS-422
(SJ4とSJ5は両方オープンまたは両方ショートに設定してください)

CN3はアイソレーション電源出力です。
1、2ピン 3.3v
3、4ピン GND

![2-5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/9f68a8cc-dc6c-8117-cc29-c6ffdb6fc5ca.jpeg)

![2-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/04feab58-f816-caf7-1232-d0bee1f3788e.jpeg)


回路図  
![SPRESENSE_RS422_485.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/3ac66ec2-4deb-beb4-aa2c-cd551cb1c0f5.png)


***テストプログラム***
RS-485で送信下データを自身で受信して、受信したデータをモニターに出力するだけのプログラムです。

ジャンパーの設定
SJ1　1-2ショート
SJ2　1-2ショート　
SJ3　ショート
SJ4　ショート
SJ5　ショート

```Spresense_rs485_test.ino
/*
  Spresense RS-422/485 ボード(NS-SPR-0301)　テストプログラム
  rS-422/485 test
  Set Jummper
  SJ1　1-2ショート　　
  SJ2　1-2ショート　　
  SJ3　ショート
  SJ4　ショート
  SJ5　ショート

  Next Step LLC
  https://next-step.asia/
  https://github.com/kaz19610303/SPRESENSE_RS422_485
*/

#define Receive_Enable 21                     // 受信許可ピン Active LOW
#define Transmit_Enable 20                    // 送信許可ピン Active High


void setup() {
  // initialize both serial ports:
  Serial.begin(9600);                         // Monitor terminal
  Serial2.begin(9600);                        // RS-422/485 terminal
  pinMode(21,OUTPUT);
  pinMode(20,OUTPUT);
  digitalWrite(Receive_Enable, LOW);          // Receive Enable
  digitalWrite(Transmit_Enable, HIGH);        // Transmit Enable
}

void loop() {
  Serial2.println("1234567890");              // Send RS-422/485
  while (Serial2.available()) {               // Recive RS-422/485
    Serial.write(Serial2.read());             // Send Monitor terminal 
  }
  delay(1000);
}
```
[Mac]ssh接続時のREMOTE HOST IDENTIFICATION HAS CHANGED!のエラーを解決

# 前置き
Macでssh接続をする際に
REMOTE HOST IDENTIFICATION HAS CHANGED!
というエラーが出ることがある。
これは以前の認証キーが残っていることが原因であるようだ。

## ■ssh接続試行時のエラー
```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
（省略）

ECDSA host key for  x.x.x.x has changed and you have requested strict checking.
Host key verification failed.
```

## ■[注意！]良くない解決策
~~`vim /Users/[ユーザー名]/.ssh/known_hosts `~~

~~この中の接続しようとしているIPアドレスの部分を消去
（消去できればなんでも良いですが、ddを押して１行一気に削除が楽です）~~

## ■良い解決策
該当のknown_hostsを削除するという方針自体は正しいようですが、直接消すのは（エラー自体は消えますが）良くないようです。
対処法としては、エラー時に警告が出るのと同時に上記のknown_hostsの情報を削除するためのコマンドも案内されるそうで、そちらのコマンドを使う方が良いようです。
（この具体的なコマンドは現在状況を再現できなく、再度出てきた時に更新できればと思います！）

※新形式のknown_hostsだと探すのが少し面倒という理由もあるようです。
大変勉強になりました。

この辺りは詳しくは@angel_p_57さんの[SSHの公開鍵ってなに?](https://qiita.com/angel_p_57/items/19eda15576b3dceb7608#%E3%83%9B%E3%82%B9%E3%83%88%E9%8D%B5%E3%81%AE%E6%89%B1%E3%81%84)をご参照いただくと大変勉強になりそうです。

皆で高め合っていきましょう！
Splunk 外部pythonでファイルをダウンロードして取り込む

これのベストプラクティスはなんなんだろう？　
とりあえずできたので、紹介します。

#前提条件

[前回のCSV](https://qiita.com/toshikawa/items/901b2d68461dd1ae085c)
を利用するためにApps `seika`を作成。
ディレクトリ構成はこんな感じ

```bash:tree
├── bin
│   ├── README
│   ├── dl.py
│   └── seika_dl.sh
├── data
│   ├── seika_20210113.csv
│   └── seika_20210114.csv
├── default
│   ├── app.conf
│   └── data
│       └── ui
│           ├── nav
│           │   └── default.xml
│           └── views
│               └── README
├── local
│   ├── app.conf
│   ├── inputs.conf
│   └── props.conf
└── metadata
    ├── default.meta
    └── local.meta
```

#inputs.conf

```python:inputs.conf
[script://$SPLUNK_HOME/etc/apps/seika/bin/seika_dl.sh]
disabled = false
index = main
interval = 0 20 * * *
sourcetype = csv

[monitor:///Applications/Splunk/etc/apps/seika/data]
disabled = false
sourcetype = seika_csv
crcSalt= /Applications/Splunk/etc/apps/seika/data
```

`seika_dl.sh`の`interval`は_午後８時に実施_
検証の時には`interval = 0 * * * *`　_毎分０秒に実施_に変更していました。
ここの`sourcetype`は使われないので適当

`monitor`の`soucetype`は今回のため作成したものを使用
`crcSalt`をつけることで、ファイルができたら強制的に読み込むようにしている。

#seika_dl.sh
`bin/`配下の二つのスクリプトは`chmod 755`済

```bash:seika_dl.sh
cd $SPLUNK_HOME/etc/apps/seika/data
/opt/anaconda3/bin/python ../bin/dl.py
```

データ格納用フォルダーに移動したのち、ダウンロード用scriptを起動しているだけのもの
`/usr/bin/env/ python`で行けるかと思ったら、Splunk内のpythonが起動してしまうため、フルパスで記載。

`dl.py`は前回のにシバンをつけただけ。
`pandas`入れて欲しいよ〜 :cry:

#props.conf

```python:props.conf
[seika_csv]
INDEXED_EXTRACTIONS = csv
KV_MODE = none
LINE_BREAKER = ([\r\n]+)
NO_BINARY_CHECK = true
SHOULD_LINEMERGE = false
TIMESTAMP_FIELDS = date
TIME_FORMAT = %Y-%m-%d
category = Structured
disabled = false
pulldown_type = true
```
読み込みやすいようにpython側で加工しているのでシンプル
python側で`date`列を一番左にしておくと時間の設定も多分いらない。

#検索
##SPL
```python:miyagi.spl
index=main sourcetype=seika_csv area="宮城" category="野菜"
| stats sum(*_price) as *_price by date, product_name
```
##結果
![trellis.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130729/16394672-9fc2-12ba-2e02-a0dc18867366.png)

##解説
- _trellis_表示は`stats by`の引数を第１：_X軸_　第２：_カテゴリー_とすると、このように綺麗に表示できる。
- ['high_price','middle_price','low_price']の３つをグラフにするので`(*_price) as *_price`で省略して記述している。

#まとめ
まだ二日分なのでつまらないけど、データが集まってくるといろいろ使えそうな感じまで持っていけた。

本格運用するのであれば、データそのものはローカルに保存しない方法を検討したほうがいいんだろうなと思いました。
【Rails】モデルの属性名を日本語化する

Rails のエラーメッセージを日本語化した際、モデルの属性名だけ英語のアルファベット表記になってしまう。。。という状況に陥ったので、解決するまでの道のりを記録しておきます。

####①辞書によるデフォルトメッセージを日本語に
![スクリーンショット 2021-01-14 16.46.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634245/2e1f1c21-a3dd-939c-052d-17c535463676.png)
config/initializers/配下に新しいファイルを作成(とりあえず locale.rb というファイル名にします)。下記のように記述。

```config/initializers/locale.rb
I18n.config.available_locales = :ja
I18n.default_locale = :ja
```

####②日本語の辞書ファイルを作成
config/locales/にja.ymlというファイルを作成。中に記述する内容を自分で書いてもいいのですが、すでに作成されたものがあるので、[こちら](https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml)をコピーするなりダウンロードするなりして保存します。

これで Rails サーバーを再起動。エラーが出るように、新規作成画面（空欄で登録しようとするとエラーになるバリデーションを設定済み)でわざと空欄のまま登録ボタンを押すと・・・
![スクリーンショット 2021-01-14 16.06.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634245/7a27a7df-6ac6-ff55-55ac-9c4f59e99308.png)
確かに日本語になりましたが・・・Task name, Detail, Deadline がアルファベット表記のままです。

タイトルにも書きましたが、これらはデフォルトの日本語表記というわけではなく、自分が命名したモデルの属性名なので別扱いなのです。これらを日本語にするためには別のファイルを準備しなければなりません。

####③モデル属性を日本語に

今度は config/locales/ に モデルを日本語表にする辞書 "model.ja.yml" を作成。 

```config/locales/model.ja.yml
ja:
  activerecord:
    models:
      task: ブログ
      user: ユーザー
    attributes:
      task:
        task_name: タスク名
        detail: 詳細
        deadline: 期限
      user:
        title: タイトル
        name: 名前
        email: メールアドレス
        current_password: 現在のパスワード
        password: パスワード
        password_confirmation: 確認用パスワード
        remember_me: ログインを記憶
```
このようにモデル属性に対応する日本語を記述します。これでサーバーを立ち上げなおして、先ほどと同じやり方でエラーを出してみると・・・
![スクリーンショット 2021-01-14 16.36.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634245/6f59e6d4-c05d-b487-7439-8834f49f994d.png)
モデル属性の部分も日本語になりました。
Spring Bootアプリケーションテンプレートの作成


## Spring Bootアプリケーションテンプレートの作成
1. [Spring Initializerのサイト](https://start.spring.io/) にて、Dependencies=Spring Webを入れてテンプレートを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/0351f294-8bad-c218-15e9-af823e2ed94d.png)

1. [GENERATE]をクリックするとテンプレートプロジェクトがダウンロード出来る。

## IDEのインポート
- 上記プロジェクトを解凍し、IDEにてインポートする。

- そのまま「xxxxxApplication.java」を実行することが出来る。
Mac,Centos (windows userはwebサービスを使う。)でタンパク質の二次構造特定 (DSSP : 水素結合推定アルゴリズム)を使う方法。

#DSSPについて#
DSSP (水素結合推定アルゴリズム) とは、タンパク質のアミノ酸に2次構造を割り当てるためのアルゴリズムである。詳しくは↓
https://ja.wikipedia.org/wiki/DSSP_(水素結合推定アルゴリズム)

タンパク質の原子構造ファイル (拡張子 : PDB)から簡単にどの部位がhelix,strand,loop structureなのかを特定する事ができる。pdb については詳しくは↓
https://ja.wikipedia.org/wiki/蛋白質構造データバンク

使い方は主に３種類ある。1つ目はOS関係なしにインターネット接続があれば使えるweb サーバを使って行う方法である。DSSPのソースコードは以下のサイトを使って得る事ができる。↓
https://swift.cmbi.umcn.nl/gv/dssp/



#やり方1 : webサーバを使ってやる方法#
この下の行の方にweb サーバを使った言及がありそこをクリックすると以下のサイトに行く。↓
https://www3.cmbi.umcn.nl/xssp/
![スクリーンショット 2021-01-14 16.02.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231863/e7a233a6-bfd8-c759-5937-27f8067c8fc0.png)

ここで、**Output**の部分で**DSSP**を選択、**Input**の部分を**PDB File**にし、
**Enter a PDB code** からファイルからpdbファイルをアップロードする。
そして**submit**をクリックすると結果が出力される。
結果を見ると、

      #  RESIDUE AA STRUCTURE BP1 BP2  ACC     N-H-->O    O-->H-N    N-H-->O    O-->H-N    TCO  KAPPA ALPHA  PHI   PSI    X-CA   Y-CA   Z-CA            CHAIN AUTHCHAIN

という行が途中で現れ、その下にある、部分に二次構造データが含まれている。詳しくは以下の画像の赤斜線部分である。
![スクリーンショット 2021-01-14 16.10.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231863/705dba82-2529-c4e9-890d-17165f28466c.png)

ここで様々なアルファベットが羅列されているが、8種類の二次構造が割り当てられる。
 **ヘリックス（G、H、I）、ストランド（E、B）、ループ構造（S、T、C; Cは空白で表わされることもある）**
空白行はループ構造である。

#やり方2 : Mac Userおすすめ homebrew コマンドを使ってインストールしてやる方法#
**Terminal**上で、

    brew install brewsci/bio/xssp

と入力すると、使えるようになるこれは**mkdssp**コマンドが入っており、terminal上でpdbがあるディレクトリ上で、

    mkdssp -i [pdbファイル名].pdb -o [出力したいファイル名].arg

とコマンドを打つと、**[出力したいファイル名].arg**に結果が出力され、やり方1で得られたものと同じ結果が得られる。

#やり方3 : Centosでやる方法#
やり方2と**ほぼ**同じ方法であるが、インストールする際に**yum**コマンドを使ってインストールする。これはバージョンが古いが問題はない ~~(はず)~~。

    yum -y install dssp

とうてば**mkdssp**コマンドが使えるようになる。

#参考文献#
https://yoshitakamo.github.io/pymol-book/ch06/dssp.html
ネットワークの基礎①

#はじめに
ネットワークの動画を見てた際の重要そうな単語のメモです。
忘却録。

## 重要な単語
**LAN ( Local Area Networrk )**
　敷地内など狭い範囲でのネットワークのこと。

**WAN (Wide Area Network)**
　LANとLANを結びつけることで構築する広い範囲のネットワークのこと。
　電気通信利用者(キャリア)が展開している。

**ISP( Internet Service Provider )**
　プロパイダという通信事業者が世界規模のインターネットを構築している。

**TCP/IP（Transmission Control Protocol/Internet Protocol）**
　通信プロトコル
　IP通信で使用するプロトコル群（ IP, ICMP, TCP, UDP, HTTP, SMTP, SSH,TELNETなど）を総称してTCP/IPと呼ぶ。

**イントラネット**
　TCP/IPを使って構築した社内ネットワークのこと。
　技術的にはインターネットと一緒だが、クローズドな環境。

**エクストラネット**
　イントラネット同士を繋いだもののこと。

**バッチアプリケーション**
　Windowsの更新プログラムとかのこと。

**インタラクティブアプリケーション**
　データ通信が発生するもので、動画サイト、ブラウザゲームなどのこと。

**リアルタイムアプリケーション**
　Skype、音声電話、LINEなどのこと。

**バイナリデータ(2進数)**
　0と1を組み合わせた数値データのこと。

**符号化(エンコード)**
　文字をバイナリデータに変換のこと。

**復号化(デコード)**
　バイナリデータを文字に変換のこと

**文字コード**
　文字に番号つけたもの。EUC、Shift_JISなど。

**文字化け**
　送信側で設定された文字コードと受信側で設定された文字コードで違うと復号化に失敗してしまうこと。

**帯域幅(bandwidth)**
　通信速度の意味でもつかう。
　1秒間にどれだけ0,1を送れるかという意味のこと。

**bps( bits per second )**
　1秒間に何bit送ることが出来るかの意味のこと。
　例：5bps = 1秒間に0か1のデータ5桁分(00000)を送ってること。

**ビット(bit)**
　0か1の1文字分でデータの重さのこと。
　1バイト = 8bit(8桁)(00000000)、8バイト=800bit。

**輻輳(ふくそう)**
　大量データ通信で混雑しデータ通信が困難になること。

**ジッタ(イライラの意)**
　信号が遅れたり、早く到着した場合、映像、音声の乱れを起こすことの意味。

**ノード**
　ネットワーク構成での機械端末のこと。

**リンク**
　　ノードとノードの間のデータの通り道。ケーブル、電話など

###トポロジ(ノードの並べ方)
　ノードのつなぎ方のこと。用途によって変わる。

**バス型トポロジ**
　拡張性は低い、1箇所でも断線するとオワコン。
　データの衝突(コリジョン)が起こりやすい。

**スター型トポロジ**
　ハブ(集線装置)を中心にノードを構築する。
　もっとも一般的につかわれる。
　無線ハブも該当する。

**メッシュ型トポロジ**
　全ノードをつないだものフルメッシュ。
　重要なノードに絞ったものパーシャルメッシュ。
　コストが結構かかるが障害に強い。

**リング型トポロジ**
　トークン(信号の一種、権利)を持ってるノードのみがデータ送信可能になる。
　トークン管理なので順番にノードに送信するのでデータ衝突がない。

**ターミネータ**
　バスのはしっこにあるので、反射することがないようにデータを端でKillする。

###通信の種類
**ユニキャスト**
　1対1の通信。

**マルチキャスト**
　ノードをグループ化して1対グループに通信。

**ブロードキャスト**
　バス型のトポロジで1対全てに通信。
OracleBronze　勉強記事10

#はじめに
最初の記事のはじめにを参照
https://qiita.com/miyanoShiho/items/ef6dd74478ee2c6a4fea
#今日間違えた問題の復習
##間違い
where でbetween　A　and Bが、
A>Bの関係だと正しく取得できない。
##q引用符
q 'AああああA'　//先頭と末尾は共通の一文字
大文字、小文字は区別される。
##to_chat(date)
YYYYを指定して取り出す必要がある。
そうしないとorder byで正しくソートできない。
日付だと正しくソートできない？　// yyyy/mm/dd hh:mi:ssのような形式
##SQL関数
ネストについて
単一行関数→無制限
グループ関数→第２レベルまで
OracleBronze　勉強記事9

#はじめに
最初の記事のはじめにを参照
https://qiita.com/miyanoShiho/items/ef6dd74478ee2c6a4fea
#今日間違えた問題の復習
##日付書式
・デフォルトは「DD-MON-RR」
##日付の計算
MONTHES_BETWEEN()
6末-7末 = 1(ヶ月)
##USING句が適している場合
①データ型が異なる共通列は自然結合でエラーになるため、USINGで結合列を指定
②共通列にNULL値列がある場合
##COUNT
COUNT(*) //NULLあり全行数
COUNT(列名) //NULLなし行数
##完全外部結合
結合+結合しない行数も取得する
##複数列問い合わせ
IN(),ANY(),ALL()
Android ViewBingdingでFlagmentを使用するときの定型文に使われる構文の解説

###前書き
　Android ViewBingdingでFlagmentを使用するときの次のような定型文が使われます。初心者の私には瞬間理解できなかったので、解説を残します。いくつかキーワードを残しますので、説明が不十分でしたら、それを頼りに調べなおしてください。

```kotlin
class TitleFragment : Fragment() {
    private var _binding: FragmentTitleBinding? = null
    private val binding get() = _binding!!    // <---この行について解説
// 以下省略
}
```

##1.!!マーク
　これは!! Operator(!!演算子)です。null許容型の変数_bindingに!!を付けることにより、_bindingを強制的に非null許容型に変換し、非null許容型の変数bindingに代入することを可能にしています。
（参考文献：野崎英一著[「やさしいKotlin入門」](https://www.cutt.co.jp/book/978-4-87783-427-2.html)）p219
（参考ページ：[The !! Operator](https://qiita.com/SYABU555/items/7cc5909c119ec9ab0288#the--operator)）

##2. get()
　これは、クラスプロパティのアクセッサのゲッターです。
　次の構文と同じ意味です。

```kotlin
private val binding: FragmentTitleBinding
        get() {
            return _binding!!
        }
```

（参考文献：野崎英一著[「やさしいKotlin入門」](https://www.cutt.co.jp/book/978-4-87783-427-2.html)）p166 コード24.7


###後書き
参考になりましたか？
なおこの問題は、金田著「[はじめてのAndroidプログラミング　“第５版”](https://www.sbcr.jp/product/4815607968/)を写経しているときに気が付きました。また、同様の構文は、Android デベロッパードキュメントガイド[ビュー バインディング](https://developer.android.com/topic/libraries/view-binding#fragments)にも記述があります。
Obsidian｜よくつかうリンク集

Obsidianは、ローカルファーストの強力なノートアプリで、公式サイトやフォーラムなど、充実した情報がが提供されています。

### 公式リソース

- **公式トップページ**: [Obsidian](https://obsidian.md)
- **公式フォーラム**: [Obsidianフォーラム](https://forum.obsidian.md)
- **公式ヘルプ**: [Obsidianヘルプ](https://help.obsidian.md)
- **公式ヘルプ（日本語）**: [Obsidian 日本語ヘルプ](https://publish.obsidian.md/help-ja)
- **公式Twitter**: [@obsdmd](https://twitter.com/obsdmd)

公式フォーラムでは、英語での情報交換が活発に行われており、質問に対して迅速かつ親切な回答が期待できます。

### 日本語コミュニティとリソース

日本語での情報やコミュニティも増えてきています。以下は、日本語でObsidianに関する情報を提供しているブログや記事の一覧です。

- **ごりゅご.com / #obsidian**: [ごりゅご.com](https://goryugo.com/tag/obsidian/)
- **メモツールObsidianの使い方**: [Qiita記事](https://qiita.com/koKekkoh/items/f1f684f0d7dadb658d02)
- **jMatsuzakiブログ / obsidian**: [jMatsuzakiブログ](https://jmatsuzaki.com/archives/category/lifestyle/obsidian)
- **メモアプリObsidianマガジン - 滝林夏来**: [note記事](https://note.com/takibayashi/m/m38cd2861c756)
- **ゼロイチObsidian｜ゼロからはじめるObsidian案内**: [Qiita記事](https://qiita.com/hann-solo/items/22bcaa81b695ddb47238)
- **Obsidianがすごくいい**: [Zenn記事](https://zenn.dev/usagizmo/articles/beb73159edbe68)
- **実験系研究者が使うObsidian**: [note記事](https://note.com/brainy_zinnia740/n/ne64cc231c7e9)
- **フォルダ分け不要！リンクと検索だけで快適ノート管理**: [note記事](https://note.com/worktech2791/n/n07402e651f6e)
- **Obsidianがいい感じ**: [Zenn記事](https://zenn.dev/kakifl/articles/obsidian-is-good)

これらのブログや記事では、Obsidianの使い方や活用方法が詳しく紹介されています。

### ソーシャルメディアでの情報交換

TwitterやBlueskyなどのソーシャルメディアでも、Obsidianに関する情報交換が行われています。

- **Twitterの#Obsidian部 タグ**: Twitter上で「#Obsidian部」タグを検索することで、最新の情報やユーザーの活用事例を確認できます。
- **BlueskyのObsidianフィード**: BlueskyでもObsidianに関する投稿が行われており、カスタムフィードで作成して情報を収集することが可能です。

これらのソーシャルメディアを活用することで、最新の情報や他のユーザーの活用事例をリアルタイムで得ることができます。

### YouTubeチュートリアル

動画での学習を希望する方には、以下の日本語チュートリアルが参考になります。

- **Obsidianの使い方を徹底解説！設定方法とオススメのプラグイン**: [YouTube動画](https://www.youtube.com/watch?v=PmEzy3f4adA)
- **Obsidianのインストール・初期設定・基本的な使い方解説（Mac版）**: [YouTube動画](https://www.youtube.com/watch?v=KQHJeVc3oRI)
- **知識のネットワークを作る究極のノート術**: [YouTube動画](https://www.youtube.com/watch?v=O4Ga14fe05w)

これらの動画は、Obsidianの導入から活用までを丁寧に解説しており、初心者にも理解しやすい内容となっています。

### 目次に戻る

[Obsidian｜使いかたの記録（目次） - Qiita](https://qiita.com/hann-solo/items/ac8fa75394813e8adcf4)
Ubuntu 20.10 で Azure IOT Hub を使う

mosquitto のクライアントのインストール

```bash
sudo apt install mosquitto-clients
```

azure-cli のインストール

```bash
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
```

インストールされたことを確認

```text
$ az --version
azure-cli                         2.17.1

core                              2.17.1
telemetry                          1.0.6

Python location '/opt/az/bin/python3'
Extensions directory '/home/uchida/.azure/cliextensions'

Python (Linux) 3.6.10 (default, Dec 31 2020, 08:28:31) 
[GCC 10.2.0]

Legal docs and information: aka.ms/AzureCliLegal


Your CLI is up-to-date.

Please let us know how we are doing: https://aka.ms/azureclihats
and let us know if you're interested in trying out our newest features: https://aka.ms/CLIUXstudy
```

Azure にログイン

```text
$ az login
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code H4GVAAAAA to authenticate.
```

ブラウザーで、https://microsoft.com/devicelogin にアクセスしてコードを入れます。

拡張機能のインストール

```bash
az extension add --name azure-iot
```

SAS トークンの取得

```bash
az iot hub generate-sas-token -n iot-first
```

pip3 のインストール

```bash
sudo apt install python3-pip
```

paho のインストール

```bash
sudo pip3 install paho-mqtt
```
OracleBronze　勉強記事8

#はじめに
最初の記事のはじめにを参照
https://qiita.com/miyanoShiho/items/ef6dd74478ee2c6a4fea
#今日間違えた問題の復習
##制約の範囲
①表レベル
・主キー、check
②列レベル
・NOT NULL
③表、列レベル
・外部キー
##代替引用符の種類
・先頭と末尾が共通の文字列のもの
・シングルクオーテを二回
・かっこで括られたもの
##NEXT_DAY
その曜日の次の日付
引数：英語か数字
OracleBronze　勉強記事7

#はじめに
最初の記事のはじめにを参照
https://qiita.com/miyanoShiho/items/ef6dd74478ee2c6a4fea
#今日間違えた問題の復習
##DATE型
 時分秒も含まれるため
 省略した場合はデフォルトが「00:00:00」
 「00:00:01」-「23:59:59」は検索条件に含まれない
##<>all
すべてと一致しない
NULLが含まれる複数列問い合わせ
<>NULLの状態になるため、正しい条件ではない。(IS NOT NULLが正しい)
そのため検索結果は0件
##UNION(集合演算子)
列のデータ型の種類は一致していることを確認する
1テーブル
number,date,date
number,varchar,date
この場合、2番目の列のdateとvarcharが不一致のためエラー
##スキーマオブジェクト
・ビューやシノニム
##スキーマオブジェクト以外のもの
・ユーザー
OracleBronze　勉強記事6

#はじめに
最初の記事のはじめにを参照
https://qiita.com/miyanoShiho/items/ef6dd74478ee2c6a4fea
#今日間違えた問題の復習
##TO_DATEの日付書式の一致
・省略した場合はデフォルトの「DD-MON-RR」となるためエラーとならない。
・fx修飾子は厳密に一致している必要がある。
・fx修飾子が無い場合は、暗黙的変換が行われる。
##外部結合
処理される順番
①FROM句の結合
②whereでの条件の結果
③Order byでソート
ポイント：結合した結果の中でwhereの条件が適用されるということ
誤り：結合中にwhereの条件が適用される。
モジュールについて

こんにちは！

リンピンです🙆

今回は
モジュール
の言葉の意味について調べたことを書かせていただきます。


１，モジュールの意味
２，使うことによるメリット、デメリット

１，モジュールの意味

まずはじめにモジュールの意味について書いていきます。
調べた結果からすると

機能を一つずつ分けて、他のファイルから読み込めるようにした処理のまとまりのこと

らしいです。

もともとは、
建築等の工学的に何かを設計する時に用いる概念で、設計対象を構成する要素であり
これらを組み合わせることで、目的物の作成ができるといった流れのようです。

これをプログラミングで例えると

バラバラにそれぞれの機能を作成し（要素）
個別に動作確認をしたあと
組み合わせることで完成品を得られるといった流れになる
（上記３行が概念に値するかと）

２，使うことによるやメリット、特徴

複数人での開発が多いことから
個々のモジュールを部品のように扱うことによって
一度作成したモジュールを
モジュール単位で扱うことができ、
分業を容易にしたり
使いまわしがきくなど
効率化に貢献してくれる
ことがメリット、といいますか特徴ですね。

何か間違っていたり、もっと良い解釈があれば教えていただけると幸いです！


参考文献：https://gimo.jp/glossary/details/moduel.html
OracleBronze　勉強記事5

#はじめに
最初の記事のはじめにを参照
https://qiita.com/miyanoShiho/items/ef6dd74478ee2c6a4fea
#今日間違えた問題の復習
##interval[期間データ型]
省略した場合は、デフォルトの時間で計算される
例)25時間であれば
　+01 01:00:00(1日と1時間00分00秒)
##WIH TIES
問題文はcountで行を出していて、実際のSQL文は1行単位で問い合わせをしている。
offset 3 rows 7なので(3行スキップ、7行表示)
最後の行が3行あり、同じ値が続いているので、WITH TIESの場合追加で範囲とする。
OracleBronze　勉強記事4

#はじめに
最初の記事のはじめにを参照
https://qiita.com/miyanoShiho/items/ef6dd74478ee2c6a4fea
#今日間違えた問題の復習
##副問い合わせを使用した表作成
引き継がれるもの
・列名
・データ型
・明示的に定義されたNOT NULL制約
　→同じ対象に再定義しようとするとエラーになる。
##NOTで同じ条件になるもの
NOT(A AND B)→　NOT(A) OR NOT(B)
NOT(A OR B) →　NOT(A) AND NOT(B)
##数値と文字の比較
\$20.000の場合、先頭の$が数値として変換できないためエラーになる。
##グループ関数エラー
・HAVING句はグループした行に戻すので単一行演算子(>=とか比較)ではエラー
・where句でグループ関数を使用エラー
OracleBronze　勉強記事3

#はじめに
最初の記事のはじめにを参照
https://qiita.com/miyanoShiho/items/ef6dd74478ee2c6a4fea
#今日間違えた問題の復習
##TO_DATEの暗黙的変換
書式形式を設定しない場合
　デフォルト書式「DD-MON-RR」だが
 　[16-03-10]だと、「DD-MM-RR」になっており、エラーになる。
  　「MON」の場合、MARCHのMAR
##数字の暗黙的変換
数値型の列に
'300+100'は一見、計算してくれそうに見えますが、
+の記号が解決できないため、エラーになる。
##delete時のpurge
・トランザクションは終了する
・表領域の解放
・順序は残る
GitLensでAzure DevOps Serverと高度な統合を行う方法

# 概要

- Visual Studio CodeのGitLensでAzure DevOps Server(TFS)と高度な統合を行う手順
- 既定ではGitLensでAzure DevOps Serverに対して、Webサイトの参照や、Remote URLのコピー、VSCodeで編集しているファイルの別のブランチのバージョンをブラウザで開くことなどができない

# 手順

1. VSCodeの設定で「GitLens Remotes」を検索し、「settings.jsonで編集」を選択します。

2. 以下を記述します。


    **ドメイン名が`tfs-server-name:8080`の場合**

    ```json
    {
        "gitlens.remotes": [{
            "domain": "tfs-server-name:8080",
            "type": "Custom",
            "name": "My Company",
            "protocol": "https",
            "urls": {
                "repository": "http://tfs-server-name:8080/${repo}",
                "branches": "http://tfs-server-name:8080/${repo}/branches",
                "branch": "http://tfs-server-name:8080/${repo}?version=GB${branch}",
                "commit": "http://tfs-server-name:8080/${repo}/commit/${id}",
                "file": "http://tfs-server-name:8080/${repo}?path=${file}${line}",
                "fileInBranch": "http://tfs-server-name:8080/${repo}?path=${file}&version=GB${branch}${line}",
                "fileInCommit": "http://tfs-server-name:8080/${repo}/commit/${id}?path=${file}${line}",
                "fileLine": "&_a=contents&line=${line}",
                "fileRange": "&_a=contents&line=${start}&lineEnd=${end}"
            }
        }]
    }
    ```
【Android】タップで切り替えを行わないSiwtchボタンの作成

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/24550ee5-8412-bb2f-4633-30aca66cfd8a.gif" width=50%>

Switchボタンは通常タップもしくはフリックでON/OFFを切り替えを行う。
フリックのみでの切り替えを行いたい場合は以下を使用。

``` SwitchOnlyFlick.kt
class SwitchOnlyFlick : SwitchCompat {

	constructor(context: Context) : super(context)
	constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
	constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle)

	override fun toggle() {}
}
```
toggle関数で何も行わないようにすれば、タップによるON/OFF切り替えは行われない。
Build Tools for Visual Studio 2019（msvc）のオフライン インストール

オフラインの端末にBuild Tools for Visual Studio 2019のC++コンパイラーをインストールする方法を説明します。[公式の説明](https://docs.microsoft.com/ja-jp/visualstudio/install/create-an-offline-installation-of-visual-studio?view=vs-2019#use-the-command-line-to-create-a-local-cache)をちょちょっと変えただけです。

# 1. オンライン端末での作業
## 1.1. Visual Studio ブートストラップをダウンロード
[ここ](https://aka.ms/vs/16/release/vs_buildtools.exe)からセットアップファイル（ブートストラップ）をダウンロードします。

## 1.2. ローカル インストール キャッシュを作成
ダウンロードした`vs_buildtools__xxsx.yyyy.exe`(x,yは数字)を適当なフォルダーに移動し、Powershellで以下を実行。後で追加するのが面倒なので`--includeOptional`でワークロード内のすべてのコンポーネントをダウンロードします（除けば必須コンポーネントのみ、`--includeRecommended`とすれば必須+推奨コンポーネント）。なお、`--includeOptional`だと6GBでした（2021年1月時点）。

```powershell:Powershell
cd ... #...はvs_buildtools__xx.yy.exeのフォルダー
#インストーラーのダウンロード
.\vs_buildtools__xxxx.yyyy.exe --layout ./vslayout --add Microsoft.VisualStudio.Workload.VCTools --includeOptional --lang ja-JP
```

ダウンロードが終わったらvslayoutフォルダーをインストール先のオフライン端末にコピーします。


# 2. オフライン端末（インストール先）での作業
## 2.1. ローカル キャッシュから Visual Studio をインストール
Powershellで以下を実行すればインストールされます。ダウンロード時と同様、`--includeOptional`を除けば必須コンポーネントのみ、`--includeRecommended`とすれば必須+推奨コンポーネント、`--includeOptional`ですべてのコンポーネントをインストールします。

```powershell:Powershell
cd ... #...はvslayoutのフォルダー
.\vs_buildtools__xxxx.yyyy.exe --noweb --add Microsoft.VisualStudio.Workload.VCTools --includeOptional
```

# 参考
- [『Visual Studio 2019』をオフラインでインストールする方法](https://qiita.com/takamon9/items/b3effb7701bb304c0a68)
- [Visual Studio のオフライン インストールを作成する](https://docs.microsoft.com/ja-jp/visualstudio/install/create-an-offline-installation-of-visual-studio?view=vs-2019)
- [コマンド ライン パラメーターを使用して Visual Studio をインストールする](https://docs.microsoft.com/ja-jp/visualstudio/install/use-command-line-parameters-to-install-visual-studio?view=vs-2019)
- [Visual Studio Build Tools のコンポーネント ディレクトリ](https://docs.microsoft.com/ja-jp/visualstudio/install/workload-component-id-vs-build-tools?view=vs-2019#c-build-tools)
【データサイエンス備忘録】 DataFrame型の中身の確認 【python】

#head()メソッド
データの先頭5行を確認する。

``DataFrameが代入された変数.head()``
括弧内に数字を指定することで、指定した行数だけデータを表示することも可能。
``DataFrameが代入された変数.head(10)``とするとデータの先頭10行が表示される。

#shape
読み込んだデータの行数と列数を調べる。

``DataFrameが代入された変数.shape``
行数だけを取り出したい場合は**shape[0]**、列数だけを取り出したい場合は**shape[1]**と記述する。

#info()メソッド
DataFrameの各カラムのデータ型を確認する。

``DataFrameが代入された変数.info()``


#describe()メソッド

数値型データの基本統計量の確認する。
pandasで読み込んだDataFrameのデータに対し、数値型データの基本統計量を表示するには`describe`関数が便利である。

`DataFrameを代入した変数.describe()`

なお、出力結果の説明は以下のとおりである。


- count:データの個数
- mean:平均値
- std:標準偏差
- min:最小値
- 25%:第一四分位数
- 50%:第二四分位数(中央値)
- 75%:第三四分位数
- max:最大値

例えば、中央値より平均値が大きい場合は、データの分布は値が小さい方向に偏っている可能性がある等、慣れてくると、基本統計量を見るだけでデータ分布をイメージすることができるようになる。

文字列型データの基本統計量の確認
文字列型（object型）の変数の場合は、`describe`関数のオプションに（include=['O']）を指定することで確認できる。

※ゼロではなく、大文字のオーである。

`DataFrameを代入した変数.describe(include=['O'])`

出力結果の説明は以下のとおりである。


- count : データの個数
- unique : ユニークな要素の個数
- top : 最も多く出現する要素（最頻値）
- freq : topで返された要素の出現回数

#dtypes
データの型を確認する。

`DataFrameが代入された変数.dtypes`

データ内の各列の値の型を参照することができる。
pythonでグラフ描く度に調べてるので、最もシンプルな使い方だけまとめとく

# pythonでグラフ描く度に調べてるので、最もシンプルな使い方だけまとめとく

jupyter notebook使ってます。
jupyter notebookじゃないのなら「%matplotlib inline」は不要

# ２次元グラフ

```python

# ライブラリのインポート
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

# グラフ描画したい関数
def func(x):
    return x**2

# 変数準備
# np.arange(開始, 終了, ステップ)
x = np.arange(0.0, 10.0, 0.1)
y = func(x)

# グラフに描画
plt.plot(x, y);
```

![2d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82541/491771e9-92cb-9b6b-5dd5-164173badb0a.png)



# ３次元グラフ

```python

# ライブラリのインポート
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

# グラフ描画したい関数
def func(x, y):
    return x * y * (10 - x - y)

# 変数準備
x = np.arange(0.0, 10.0, 0.1)
y = np.arange(0.0, 10.0, 0.1)
X, Y = np.meshgrid(x, y)
Z = func(X, Y)

# 描画
fig = plt.figure()
ax = Axes3D(fig)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("f(x, y)")
ax.plot_wireframe(X, Y, Z)
plt.show()
```

![3d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82541/85fa4288-726f-2854-b92e-3d8f9990504c.png)
[GitHub]コマンドから全てのリポジトリ名を取得する

#Situation-Complication

```shell
$ gh repo list
```
って、いつになったら実装されるのだろう。
https://github.com/cli/cli/issues/642


#事前に
repo権限のついたToken発行

👇詳細。お借りします。
https://gotohayato.com/content/460/


#自分のリポジトリを全て取得

```shell
% curl -sSL -H "Accept: application/vnd.github.v3+json" -u <User>:<Token> \
  https://api.github.com/user/repos \
  | jq -r '.[].name'
```

👇これでも同じ

```shell
% curl -H "Authorization: token <Token>" \
  https://api.github.com/user/repos \
  | jq -r '.[].name'
```

なお、userではなくusersを用いると、public reposだけ取得できる。

```shell
% curl -sSL -H "Accept: application/vnd.github.v3+json" -u <User>:<Token> \
  https://api.github.com/users/<User>/repos \
  | jq -r '.[].name'
```
Java Wordに複数の文字のウォーターマークを追加

<p><strong>以前はWordにウォーターマークを追加する方法を紹介しましたが、今回はWordに複数の文字のウォーターマークを追加する方法を紹介することにします。 Free Spire.Doc for Javaというライブラリを使って簡単にできますよ。</strong></p>
<h4><strong>下準備</strong></h4>
<p><strong>1.E-iceblueの公式サイトから<a href="https://www.e-iceblue.com/Download/doc-for-java-free.html">Free Spire.doc for Java</a>無料版をダウンロードしてください。</strong></p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/l/lendoris/20210114/20210114145341.png" alt="f:id:lendoris:20210114145341p:plain" title="" class="hatena-fotolife" itemprop="image" /></p>
<p><strong>2.IDEを起動して新規プロジェクトを作成してから、インストールされたファイルにあった相応しいSpire.doc.jarを参照に追加してください。</strong></p>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/l/lendoris/20210114/20210114145406.png" alt="f:id:lendoris:20210114145406p:plain" title="" class="hatena-fotolife" itemprop="image" /></p>
<h4><strong>コード</strong></h4>
```JAVA
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.HeaderFooter;
import com.spire.doc.Section;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.ShapeLineStyle;
import com.spire.doc.documents.ShapeType;
import com.spire.doc.fields.ShapeObject;
import java.awt.*;

public class Watermark {
    public static void main(String[] args) {
        //ドキュメントをロードします。
        Document doc = new Document();
        doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.docx");
        //Add WordArt shape and set the size
        ShapeObject shape = new ShapeObject(doc, ShapeType.Text_Plain_Text);
        shape.setWidth(50);
        shape.setHeight(15);
        //テキストの位置・形式を配置します。
        shape.setVerticalPosition(20);
        shape.setHorizontalPosition(20);
        shape.setRotation(315);
        shape.getWordArt().setText("複写禁止");
        shape.setFillColor(Color.red);
        shape.setLineStyle(ShapeLineStyle.Single);
        shape.setStrokeColor(new Color(192, 192, 192, 255));
        shape.setStrokeWeight(1);

        Section section;
        HeaderFooter header;
        for (int n = 0; n < doc.getSections().getCount(); n++) {
            section = doc.getSections().get(n);
            //Get the header of section
            header = section.getHeadersFooters().getHeader();
            Paragraph paragraph1;
            for (int i = 0; i < 4; i++) {
                //Add the header to the paragraph
                paragraph1 = header.addParagraph();
                for (int j = 0; j < 3; j++) {
                    //テキストをコピーします。
                    shape = (ShapeObject) shape.deepClone();
                    shape.setVerticalPosition(40 + 120 * i);
                    shape.setHorizontalPosition(20 + 130 * j);
                    paragraph1.getChildObjects().add(shape);
                }
            }
        }
        //保存します。
        doc.saveToFile("output/AddMultipleTextWatermark.docx", FileFormat.Docx_2013);
    }
}
```
<h4><strong>実行結果</strong></h4>
<p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/l/lendoris/20210114/20210114145451.png" alt="f:id:lendoris:20210114145451p:plain" title="" class="hatena-fotolife" itemprop="image" /></p>
<p> </p>
gitでThe requested URL returned error: 500 (Internal Server Error)

gitは、macでsourcetreeを使っています。

仕事で使う時は、会社のgitサーバーにリモートアクセスしてますが、一度、ユーザーID/パスワードで認証してあれば、2回目以降は通常入力する必要はありません。

が、たぶんmacOSをバージョンアップしたため、データは移行したんですが、プルしようとしたら、パスワードの入力を催促され、下記エラーがウィンドウに表示されました。
(サーバー名、gitリポジトリ名は書き換えてます)

```
git --no-optional-locks -c color.branch=false -c color.diff=false -c color.status=false -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree fetch origin 
fatal: unable to access 'https://example.com/gitrepos/xxxxx.git/': The requested URL returned error: 500
Completed with errors, see above
```

自分は更新してないブランチのプルなので通常エラーにならないはずの操作です。他の操作でもローカルでのコミットはできますが、サーバーにアクセスする操作だと同じエラーになります。

ググってもいまいちそれらしきのが見つからず。
知り合いに聞いたのを参考に試した結果、原因がわかりました。

##原因

パスワードを間違えていました。

自分でメモしてたパスワードが間違っていて、いくつか試して、正しいパスワードを入力したらうまくいきました。

何かしらキーチェーンがおかしくなっている場合もあるようです。
その場合の修正方法は次の通り。

##パスワード修正方法

一度間違ったパスワードを入力してしまうと、デフォルトでキーチェーンにパスワードを登録するチェックがついているので、そのまま間違ったパスワードで実行され、パスワード入力欄が出てきません。
（キーチェーンに登録してなければ、再度パスワード入力欄がでてきます）

その場合は、ユーティリティ→キーチェーンを起動して、gitリポジトリ名（サーバー名）で検索し、キーチェーンデータを削除します。

そして再度、sourcetreeでプルするとパスワード入力欄が出てきますので、正しいパスワードを入力します。
正しいパスワードを忘れてしまって、何度か試したい時は、キーチェーンに登録するチェックをはずして入力、実行します。
地域メッシュコードを緯度経度に変換するPythonコード

<font color="Red">【追記2021/01/21】1/2メッシュ以降のコードに誤りがあったので訂正しました。</font>

# はじめに

位置が地域メッシュコードで提供されているビッグデータを扱う機会があり、プログラムで扱いやすい緯度経度の形に変換する関数を作成したので共有します。

# 参考にしたサイト
この記事は、[こちらのブログ](https://www.gis-py.com/entry/py-mesh)に掲載されている第三次メッシュまでの変換コードを8分の1地域メッシュにまで対応させたものです。

# 地域メッシュコードとは

[Wikipedia](https://ja.wikipedia.org/wiki/%E5%9C%B0%E5%9F%9F%E3%83%A1%E3%83%83%E3%82%B7%E3%83%A5)の記事によると、

```
地域メッシュ（ちいきメッシュ）とは、統計に利用するために、緯度・経度に基づいて地域をほぼ同じ大きさの網の目（メッシュ）に分けたものである。メッシュを識別するためのコードを地域メッシュコードと言う。

地図の製作や提供においては、地域メッシュごとに紙地図を用意し、あるいはデジタル的な地図データファイルを用意することが行われる。
```

とされており、JIS X 0410で規格化されています。[Esriジャパン](https://www.esrij.com/gis-guide/gis-other/mesh/)のサイトにわかりやすくまとまっています。

# 実行環境

* [docker-anaconda](https://hub.docker.com/r/continuumio/anaconda3)イメージ
* Python 3.8.5

# メッシュコードから緯度経度に変換する関数

```python
def get_latlon(meshCode):

    # 文字列に変換
    meshCode = str(meshCode)

    # 1次メッシュ用計算
    code_first_two = meshCode[0:2]
    code_last_two = meshCode[2:4]
    code_first_two = int(code_first_two)
    code_last_two = int(code_last_two)
    lat  = code_first_two * 2 / 3
    lon = code_last_two + 100

    if len(meshCode) > 4:
        # 2次メッシュ用計算
        if len(meshCode) >= 6:
            code_fifth = meshCode[4:5]
            code_sixth = meshCode[5:6]
            code_fifth = int(code_fifth)
            code_sixth = int(code_sixth)
            lat += code_fifth * 2 / 3 / 8
            lon += code_sixth / 8

        # 3次メッシュ用計算
        if len(meshCode) >= 8:
            code_seventh = meshCode[6:7]
            code_eighth = meshCode[7:8]
            code_seventh = int(code_seventh)
            code_eighth = int(code_eighth)
            lat += code_seventh * 2 / 3 / 8 / 10
            lon += code_eighth / 8 / 10
            
       # 1/2メッシュ用計算
        if len(meshCode) >= 9:
            code_nineth = meshCode[8:9]
            code_nineth = int(code_nineth)
            if code_nineth % 2 == 0:
                lon += 0.01250000 / 2
            if code_nineth > 2:
                lat += 0.00833333 / 2
                
        # 1/4メッシュ用計算
        if len(meshCode) >= 10:
            code_tenth = meshCode[9:10]
            code_tenth = int(code_tenth)
            if code_tenth % 2 == 0:
                lon += 0.01250000 / 2 / 2
            if code_tenth > 2:
                lat += 0.00833333 / 2 / 2
        
        # 1/8メッシュ用計算
        if len(meshCode) >= 11:
            code_eleventh = meshCode[10:11]
            code_eleventh = int(code_eleventh)
            if code_eleventh % 2 == 0:
                lon += 0.01250000 / 2 / 2 / 2
            if code_eleventh > 2:
                lat += 0.00833333 / 2 / 2 / 2

    return lat, lon
```

## 関数の使い方
Pythonに詳しい方でしたら見ればわかると思いますが、

```python
lat,lon =  get_latlon(60413212422)
```
のようにすると、`lat`に緯度が、`lon`に経度が代入されます。