OmniAICreator/Qiita-1.07M huggingface dataset:
Nextcloud デスクトップ クライアント 2.5 リリース

この記事は、以下のNextcloud社のブログを基に記載しています。
Nextcloud desktop client 2.5 is out with End-to-End Encryption, new login flow and much more – Nextcloud
https://nextcloud.com/blog/nextcloud-desktop-client-2.5-is-out-with-end-to-end-encryption-new-login-flow-and-much-more/

Nextcloud デスクトップ クライアント 2.5 がリリースされました。2.5には端末側ファイル暗号化機能がデスクトップクライアントにも搭載されました。

## 1. 端末側ファイル暗号化機能とは？
このリリースで端末側ファイル暗号化機能が iOS、Android等の Nextcloud モバイル端末以外にもデスクトップクライアントでも使えるようになりました。デスクトップでは、Windows、LinuxとMacで利用できます。端末側ファイル暗号化機能は、サーバー上ではファイルを盗み見たり、侵入された場合にはファイルが見られてしまうという問題を解消し、データが安全にまもられるようにする為に作りました。

![https://nextcloud.com/endtoend](https://qiita-image-store.s3.amazonaws.com/0/15176/6af95a45-e0c5-a54b-39e1-bf30585386e1.png)


その場合、ブラウザーからはそのデータを共有、アクセスできなくなります。ブラウザーは、サーバーから取得するスクリプトを実行する為、そのコードを利用してブラウザー内のデータを複合化するのはセキュリティーの高いものではありません。サーバーが信用できないのにサーバーからのスクリプトに対してパスワード鍵を与えてはいけません。これについては、[encryption in Nextcloud in general](https://nextcloud.com/blog/encryption-in-nextcloud/) にある、[end-to-end encryption](https://nextcloud.com/endtoend) を参照してください。

一般的な端末側ファイル暗号ソリューションと違い、当社の端末側ファイル暗号をデータの一部に保存するものとして考えています。つまり、暗号化されているフォルダーとそうでないフォルダーをそれぞれ持つことができて、暗号化されていないデータはブラウザーからこれまで通り利用して、簡単に共有、オンライン編集も可能です。というのも、ファイルの同期時には一つ一つのファイルにおいてサーバー上でのロックが重要なポイントなポイントですが、E2E（End to End Encryption）では大きなオーバーヘッドがある為、複数のファイルを大量に暗号化するには向きません。

フィードバックがあれば、いつでも歓迎しております。次のリリースでもE2EEをさらに改良したいと思っています。

## 2. ユーザービリティの向上

クライアントをもっと違和感のない洗練されたものにしようとしています。ユーザー毎のサーバー側のアクティビティを統合して、通知を簡単に開けて、かつ、アクションも可能になります。この機能では例えば、通知を使った 2要素認証などの機能があります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/b10a07f8-712d-78cf-9097-cf4caaa6cf2b.png)

シングルサインオンの取り扱いと2要素認証を使った新しいログインを簡単にする新しいフローを統合しました。必要に応じて、デスクトップクライアントへブラウザーから簡単にアクセスを制御できるようになりました。

その他の改良点:

- [libcloudproviders](https://gitlab.gnome.org/World/libcloudproviders) を使ったGNOMEファイルマネージャーのサイドバーへのシームレスに統合されました。
- Webとモバイルの画面でのより詳細に設定できるダイアログへと改修されました。
- システムトレイのコンテキストメニューからNextcloudアプリを直接開くことができるようになりました。
- 通知が整理されました。ファイルの変更の通知はなくなり、重要なサーバーメッセージと同期の問題だけになりました。
- プラットフォーム毎の様々な改修がありました。

## 3. 簡単サインアップ

Nextcloudにアカウントがない、もしくは、サーバーもまだないのであれば、デスクトップクライアントから信頼のおけるプロバイダーに直接アカウント作成することができるようになります！ 下のグラフで赤いバーが増えてきているように思います。
簡単にサインアップする仕組みについては過去のブログを参照していただくとして、集中管理ではない分散されているプライベートクラウドを簡単なパッケージで提供する方法についてよくご存じないなら、Nextcloud Conferenceでのアナウンスを見てください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/dd7734b7-6848-4cc6-0875-f7ccbecbf58c.png)
Nextcloud users signing up via Simple Signup

## 4. 同期の改善

同期をもっとスピードアップして、信頼性を高め、ユーザーにもっと使い方の管理を与える為の沢山の作業をしてきました。無視リストを編集でき、クライアントアプリ上で容量での空き領域を確認することができます。コンフリクトの改善がされて、コンフリクトされたファイルにユーザー名が追加されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/77c30e4f-8f6c-24e2-1785-9935f4d3fa03.png)
どれぐらいの容量を使っているか、残りがどれぐらいか表示

![image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/1e012f1f-ce12-4068-98ff-48aa806d526e.png)
どのファイルを同期しないかリストアップ

# 今から使い始めましょう！

総括すると、今回のリリースはデスクトップクライアントの為の大きなリリースです。2.5.0 バージョンは既に[ダウンロード](https://nextcloud.com/install/#install-clients)できるようになっています。Nextcloudのアカウントがない場合でも問題ありません。シンプルサインアップが使えるようになります！
世紀末秋葉原日記　Ver. 0.1 前夜

いい加減煮詰まっていた。

仕事は、人に言わせれば面白い仕事ではあるんだが、自分の立場では到底マーケットにリーチ出来ない状況となると、評価もそれほど芳しくない。
無駄なプライドだけが俺をただ焦らせていた。
今にして思えば思い上がりも甚だしい。単に俺に実力が伴っていないだけ。
バブルも超えて、まったくうだつの上がらない自分の環境と地位、彼女いない歴=年齢なのはもう素質なので仕方ないとしても、このまま電機メーカーの子会社にいても先は見えないとしか思えないほど煮詰まっていた。

俺は学生時代、秋葉原のZ80やら6800やら6502のシングルボードやパーツ類と取り扱う某店で、なんと月180時間もアルバイトに入るという生活をしていて、卒業後もそのまま秋葉原に居つく気だった。
ただ、田舎の両親のことを考えると、山口の田舎から4年も関東の大学に居させてくれたという恩も無視できず、結局は最終年度の年明けに秋葉原以外のどこかに就職することに決め、さらにいい時代だったのか、その時期でも冠企業に入社できてしまったという、大馬鹿ものでもあった。

その悪運をすっぱり捨てようかと、そんな思いが心を支配し始めた時だった。

IBM-PC互換機の台頭、そしてUnix Cloneの時代。
世の中は、386BSDとLinuxがQICテープやFDで配布されていた時代だった。

古巣の親父はいつのまにか新しい会社を立ち上げ、昔の仲間も徐々に秋葉原に集まっており、俺もしばらくぶりに秋葉原に舞い戻った、まさに舞い戻った親不孝息子の一人だった。

(つづく)
DNSレコード

| レコード種別      |       詳細|    意味    |
|:-----------------:|:------------------:|:------------------|
| SOA | Start of Authority| 権威DNSサーバがで使う対応表（ゾーンファイル）の中身で、ゾーン（管理する範囲）に関する情報あれこれが書かれている行のこと。|
|NS　| Name Server |「このドメインのことはこっちで聞いてね」他のネームサーバを指定して対応を委ねる。サブドメインの問合せ用。<br>(例) apple.com. NS ns.apple.com.　|
|A　| Address |「このドメイン名はこのIPアドレスだよ」<br>(例) apple.com. A 17.149.160.49　|
|PTR　|Pointer  |「このIPアドレスはこのドメインだよ」Aの逆。<br>(例) aaa.bbb.ccc.ddd.in-addr.arpa. 86400 IN PTR ns.example.com.　|
|CNAME　| Canonical NAME |「このドメイン名とこのドメイン名は同じだよ」と教えてあげる書き方。<br>(例) www.apple.com. CNAME apple.com.　|
|MX　| Mail exchange |メール用。「このメルアド（「＠」より後を書く）のサーバはコレだよ」<br>(例) apple.com. MX(10) mail.apple.com. <br>メールサーバが複数あるなら優先度を設定。MX後のかっこ内は優先度↑　20、30と増えるほど優先度が下がる、注意：「MXレコード」は「Aレコード」とセットで設定。単独ではNG。　|
|TXT　| text strings |SPFレコード(Sender Policy Framework)とかSenderIDとも呼ばれ「なりすましメール」を防ぐのに使われる。「IN TXT」でTXTレコード宣言をして “” 内にサーバ情報などを書く。<br>(例) IN TXT “v=spf1 a:example.com ~all”　|
|AAAA　|クワッドエーレコード  |IPv6アドレス用のAレコード。　|
XLPagerTabStripでタブの切り替えを無効化する

# はじめに

Swiftの[XLPagerTabStrip](https://github.com/xmartlabs/XLPagerTabStrip)というライブラリで、タップによるタブの切り替えをさせたくない場合の実装方法が特に記載されていないようだったので、メモとして書きます。

# 導入方法

XLPagerTabStripの導入方法は[こちら](https://medium.com/michaeladeyeri/how-to-implement-android-like-tab-layouts-in-ios-using-swift-3-578516c3aa9)やQiitaでも様々な方が書かれているので省略します。

# 無効化

スライドによる無効化は、親ビュー内で下記のように記載すると無効化されます。[参考](https://github.com/xmartlabs/XLPagerTabStrip/issues/504)
これはスライドによる切り替えのみが無効化されるので、タップでのタブ切り替えは可能です。

```swift
containerView.isScrollEnabled = false
```

タップによる無効化は、ButtonBarPagerTabStripViewController内に設置されているbuttonBarView（UICollectionViewを継承したクラスButtonBarView）のタップを無効化することで可能です。

```swift
buttonBarView.isUserInteractionEnabled = false

// swiftのバージョンによっては下記の書き方になると思います
buttonBarView.userInteractionEnabled = false
```

有効化（無効化の解除）をする際はtrueを指定し直してあげると戻ります。
Fungusでスクリプトから会話イベントを発生させる方法

#デモ
今回作った[サンプル](https://drive.google.com/open?id=1TatxlA4ATSUO4J7Y5Kta7uFshpnqgx9R)はこんな感じです。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Fungusでスクリプトから会話イベントを発生させるサンプルを作ってみた <a href="https://t.co/EOEKBeedK9">pic.twitter.com/EOEKBeedK9</a></p>&mdash; 大川恭平 (@kyonpeis) <a href="https://twitter.com/kyonpeis/status/1062876342134308864?ref_src=twsrc%5Etfw">2018年11月15日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ユニティちゃんがウニに触れると会話イベントが発生します。

#環境
Windows10
Unity 2017.3.1f1
Fungus 3.9.1
[ユニティちゃん2D](http://unity-chan.com/download/releaseNote.php?id=UnityChan2D)

#分からなかったこと
FungusのFlowchartのブロックが始まるイベント(Execute On Event)をCollision2Dに指定したとき、
どういう条件で呼ばれるのか公式ドキュメントを見てもよく分からなかった...

なので今回の方法は接触したとき以外でも幅広く使えるだろうサンプルを作ってみました。

#解説
![画像1E.png](https://qiita-image-store.s3.amazonaws.com/0/188476/45a79826-e477-8408-3a38-6c3e79e37824.png)

Flowchartの最初のブロックのExecute On EventをMessage Receivedに設定します。
今回はサンプルなのでMessage名は"test"に設定しておきます。

次にスクリプトです。
今回は接触したときに会話イベントを発生させるため、UnityChan2DControllerの中に直接記述しました。

```UnityChan2DController.cs
    private void OnCollisionEnter2D(UnityEngine.Collision2D collision)
    {
        //Uniタグがつけられたオブジェクトと接触したとき
        if(collision.collider.CompareTag("Uni"))
        {
            //シーン中のFlowchartのExecuteOnEventに設定されたMessageReceivedを取得する
            MessageReceived[] receivers = GameObject.FindObjectsOfType<Fungus.MessageReceived>();
            //取得できた場合
            if (receivers != null)
            {
                //すべてのMessageReceivedに"test"イベントを送信する
                foreach (var receiver in receivers)
                {
                    receiver.OnSendFungusMessage("test");
                }
            }
        }
    }
```

こんな感じにFlowchartにメッセージを送信して会話イベントを発生させました。
FungusのSendMessage.csにメッセージを送る処理が書かれていたのでそこを参考にしました。

#最後に
Fungusを知ったとき、こんな便利なアセットがあるんだなと思いました。
ゲームジャムでノベルゲームなどを作る機会があったら使ってみたいなと感じました。
Fungusの詳しい使い方はまだよくわかっていないので、ほかの方の記事を参考にしてみてください。

宣伝になりますがAppStoreにCocos2d-x,Unity,OpenGLESで作ったゲームをリリースしているのでぜひ遊んでみてください！
→[AppStore](https://itunes.apple.com/jp/developer/kyohei-okawa/id1209907691)

#ライセンス

<div><img src="http://unity-chan.com/images/imageLicenseLogo.png" alt="ユニティちゃんライセンス"><p>この作品は<a href="http://unity-chan.com/contents/license_jp/" target="_blank">ユニティちゃんライセンス条項</a>の元に提供されています</p></div>
NLogでencoding="utf-8"が効かない

## 訂正とお詫び
コメントでご指摘いただきましたがBOMがないことでエディターが、SJISとUTF-8を判別できないことによることが原因でした。
以下の記事は間違いでwriteBom=trueとしなくてもUTF-8で出力可能です。

## 環境
NLog 4.5.11

## encodingの指定
以下のようにencoding="utf-8"とすればログファイルはutf-8になるはずだが、SJISで出力される。

```xml
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd">
  <targets>
    <target name="event"
            xsi:type="File"
            encoding="utf-8"
            layout="${longdate} ${message}"
            fileName="${basedir}/logs/event.log" />
  </targets>
  <rules>
    <logger name="*" levels="Info,Warn" writeTo="event" />
  </rules>
</nlog>
```

## 対処

writeBom="true"を指定したらutf-8で出力されるようになりました。
writeBom="false"では変わらずSJISで出力されます。

```xml
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd">
  <targets>
    <target name="event"
            xsi:type="File"
            encoding="utf-8"
            writeBom="true"
            layout="${longdate} ${message}"
            fileName="${basedir}/logs/event.log" />
  </targets>
  <rules>
    <logger name="*" levels="Info,Warn" writeTo="event" />
  </rules>
</nlog>
```
GitHub上でブランチ名からプルリクを検索する方法

ローカルブランチで作業していた内容に関して、ふと、「あれ？このブランチってプルリクエスト出してたかな・・・？」なんて思う事ありませんか？ありますよね？そうですよね。

複数端末で作業していると、僕は尚更よく思います。

僕は今まで、こういう場合は自分の「Pull requests」を開いて探していたんです。
「あれ？何処かに作ったような・・・」みたいに。

ただこれ、実際はもっとマシな方法があったわけです。

## ブランチ名からプルリクを探すまで

### プルリクがあると想定されるリポジトリを開く

pushしてると想定されるリポジトリをWEBブラウザで開きます。

### ブランチ一覧を開く

該当リポジトリが表示されたら、以下のような表示の中からbranchesを選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/198321/fc5c5810-41fd-75d0-036c-c1b20b5df172.png)

### ブランチ名を検索する

画面右上に、こんな感じのブランチ検索窓が表示されていると思います。ここに探しているブランチ名を入力して検索を実行します。
目的のブランチが検索でヒットしたら、さらに表示されたブランチ名のリンクを選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/198321/8af30166-babc-644a-5e86-5801e5cd46fd.png)

検索でブランチ名が見つからなかった場合、検索するブランチ名が間違っているか、まだローカルで作成したブランチをpushしていない事でしょう。

「でも、なんかこのコードこの前も書いた気がするな・・・でもブランチ無いな・・・」

なんて時は、何度もブランチを検索せずにリファクタリングが必要か調査するか、何か特殊な能力を潜在させている可能性が高いので専門のカウンセリングを受ける必要があるかも知れません。

### ブランチ名表記の右側のViewを開く

ブランチを開いた際、既にプルリクが立っていれば、ブランチ名表記の右側にView #xxxと表示されますのでこれを選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/198321/d564d188-a4d6-ab3d-f6a1-5bc015b014e4.png)

#### プルリクが未作成の場合

プルリクがまだ作成されていない場合は、以下のように「New pull request」と表示されます。このボタンを押すと新規のプルリクが起案されるわけです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/198321/264be07b-6c0f-01e2-4021-b6f9c88877ae.png)

### 目的のプルリクにたどり着く

これで無事、目的のプルリクにたどり着く事が出来ました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/198321/30ab2e0c-4624-d290-d938-38a05772710e.png)

この記事が、誰かのお役に立てますように。
INSERT文に（SELECT結果＋入力結果）を入れる

INSERT文でデータを入れようとすると、データの取得方法によって書き方を間違えてしまうので軽くまとめてみました。大きくまとめると３パターン

# 全て手入力でINSERT
これは指定した要素数に合わせた数を書けば良いだけ

```sql:パターン１
INSERT INTO `テーブル名` (col1, col2, ... )
  VALUES (col1, col2, ...)
```

# SELECT結果をINSERT
ここを書く時にいつも間違えてVALUESを使おうとしてエラーを出してしまいます。

```sql:エラー
INSERT INTO `テーブル名１` (col1, col2, ...)
  VALUES (SELECT col1, col2, ... FROM テーブル名２)
```

<br>
正しくはVALUESを使わずにINSERTします。

```sql:正解
INSERT INTO `テーブル名１` (col1, col2, ...)
  SELECT col1, col2, ... FROM `テーブル名２`
```

# SELECT結果＋手入力
要素を足せば良いのでこの書き方で行けそうな気がしますがこれもエラーになります。

```sql:エラー
INSERT INTO `テーブル名１` (col1,col2)
  VALUES (SELECT col1 FROM `テーブル名２`, "col2")
```

<br>
正しくは又してもVALUESを使わずに、該当箇所に直書きします。

```sql:正解
INSERT INTO `テーブル名１` (col1, col2)
  SELECT col1, "col2に入れたいデータ" FROM `テーブル名２`
```

例えば、データベースに登録されていない商品をIDが重複しないように、データを追加したい場合だとこんな感じに書きます。

```sql:例
INSERT INTO `テーブル名` (id,item_name)
  SELECT MAX(id)+1,"商品名" FROM `テーブル名`
```
【Unity(C#)】シーンをスクリプトから操作する方法


　　
　　
　　

この記事は

**『プログラミング完全未経験からUnityでの開発現場に迎え入れてもらえた世界一の幸せ者』**

の記事です。そのつもりでお読みください。
　　


##シーンをスクリプトから操作する方法
  

名前空間が必要です。
`using UnityEngine.SceneManagement;`

```C#
 void JumpToScene() //シーンの切り替え
    {
        SceneManager.LoadScene("OtherScene");
    }
```

ただ、このまま `JumpToScene();`と呼び出すと前触れもなく
瞬間的にシーンが変わるのでワープの演出でもない限りナンセンスだと思います。

なので`Invoke("JumpToScene", 2.0f);`みたいな感じで秒数指定して呼び出すといいかもしれません。

フェードアウトの機能を実装して"画面が真っ暗になったらシーンが切り替わる"
みたいなのもそれっぽい雰囲気出ていい感じです。

フェードイン、フェードアウトも今度まとめます。

---
まとめました。
[3Dのフェードイン、フェードアウト](https://qiita.com/OKsaiyowa/items/474dc86173d74b49edfd)
[VRの酔い軽減トンネルフェード](https://qiita.com/OKsaiyowa/items/9d26a2a86013f08d5914)
[SteamVR Pluginを利用したフェード](https://qiita.com/OKsaiyowa/items/201b6a0582934143e4c8)
[SteamVR Pluginを使わないフェード](https://qiita.com/OKsaiyowa/items/413c9da869f23f6b44d1)
Flask 体験記 vol.1 ~下準備~

# はじめに
Python を独学中の筆者が, 手あたり次第いろんなことにチャレンジしてみる活動のひとつです. [Flask](https://ja.wikipedia.org/wiki/Flask) という Python Flamework を使うことで, 小規模な Web アプリを作れるとのことだったの, 触ってみようと思います.


# 日誌の内容
自分の作業記録, 作業メモとして, 残しておきたいことをつらつらと記します. 不定期です. 

# 活動予定

* Paiza の「[Flask入門講座](https://paiza.jp/works/search_courses/2115)」を受講する.
* 書籍で学習する
    * [ゼロからFlaskがよくわかる本](https://www.amazon.co.jp/ゼロからFlaskがよくわかる本-本田崇智-ebook/dp/B07F2X9GRQ)をやってみる
    * [PythonでWebサービスを作る 1](https://www.amazon.co.jp/PythonでWebサービスを作る-Python3-Flaskで作るWebアプリケーション開発入門-中野-仁-ebook/dp/B07B2LFGH2/ref=pd_sim_351_1?_encoding=UTF8&pd_rd_i=B07B2LFGH2&pd_rd_r=6b1f6575-e874-11e8-bac0-4528c1c3ea39&pd_rd_w=pLGSb&pd_rd_wg=NY8RL&pf_rd_i=desktop-dp-sims&pf_rd_m=AN1VRQENFRJN5&pf_rd_p=b79503b3-46ea-4244-8b06-2f14c40a97b1&pf_rd_r=G4W1P8DXXQ3N72RHRK4H&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=G4W1P8DXXQ3N72RHRK4H)をやってみる
    * [PythonでWebサービスを作る 2](https://www.amazon.co.jp/PythonでWebサービスを作る-Python3-Flaskで作るWebアプリケーション開発入門-中野-仁-ebook/dp/B07C8KT3FS/ref=pd_sim_351_1?_encoding=UTF8&pd_rd_i=B07C8KT3FS&pd_rd_r=6fbc1ebb-e874-11e8-8f15-4353527dc78c&pd_rd_w=3NP81&pd_rd_wg=c1ORS&pf_rd_i=desktop-dp-sims&pf_rd_m=AN1VRQENFRJN5&pf_rd_p=b79503b3-46ea-4244-8b06-2f14c40a97b1&pf_rd_r=6AXHJBZYTYS3ZD9118ZW&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=6AXHJBZYTYS3ZD9118ZW)をやってみる
    * [PythonでWebサービスを作る 3](https://www.amazon.co.jp/PythonでWebサービスを作る-Python3-Flaskで作るWebアプリケーション開発入門-中野-仁-ebook/dp/B07BPBNH27/ref=pd_sim_351_2?_encoding=UTF8&pd_rd_i=B07BPBNH27&pd_rd_r=8da9b65b-e874-11e8-9351-635a7a6b78d5&pd_rd_w=9XGz4&pd_rd_wg=QHhvu&pf_rd_i=desktop-dp-sims&pf_rd_m=AN1VRQENFRJN5&pf_rd_p=b79503b3-46ea-4244-8b06-2f14c40a97b1&pf_rd_r=JHBAZ5ABR287DX9M6F04&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=JHBAZ5ABR287DX9M6F04)をやってみる
* 書籍で学習しつつ, 思い立ったら何かしらの Web アプリを作ってみる.

# 今日のおはなし

# 結論
下準備をした.

### 下準備1: Flask をインストールした.
https://code.visualstudio.com/docs/python/tutorial-flask を軽く読んだ結果, ターミナルで ``pip --install flask`` すればよさそうです. 私は VSCode のターミナルで実行したら, 普通にイケました.

VSCode のインストール方法, Python のインストール方法, pip（python 用のパッケージ管理ツール）のインストール方法はググったらすぐ出てくるので割愛します.

### 下準備2: GitHub にレポジトリを作った.
https://github.com/4no3/FlaskSamples というレポジトリを作りました. 

[これ](https://www.bing.com/search?q=VScode+Git&qs=n&form=QBRE&sp=-1&pq=vscode+git&sc=8-10&sk=&cvid=F341A87028A34D69A9EA120D156B935F)とか, [このあたり](https://www.micknabewata.com/entry/github/vscode-sync)を見ればすぐできます. GitHub のアカウント作成方法は割愛します.

# むすび
環境が準備できました. のびのびやっていきます.  たのしみだ.
既存のVueプロジェクトに一つのコマンドでeslintを設定する

以下のコマンドを入力するだけ

```sh
vue add @vue/eslint
```
[@vue/cli-plugin-eslint](https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint)

上記のコマンドを入力するためには、[@vue/cli](https://github.com/vuejs/vue-cli)が必要です。
入力すると、以下のように選択できるので後はお好みで。

```sh
✔  Successfully installed plugin: @vue/cli-plugin-eslint

? Pick an ESLint config: (Use arrow keys)
❯ Error prevention only
  Airbnb
  Standard
  Prettier
```
CVPR workshop paper "Cross-domain fashion image retrieval" 要約

# 0. Abstract
cross-domainな画像検索はとてもチャレンジングなタスクである。ユーザの撮影した画像が不安定な環境下で撮影されるのに対し、ショップの撮影する画像はハイクオリティである。
この課題に取り組むとき、テストデータと訓練データで別のアイテムを使用する。
> We stress the importance of proper training of simple architecture, as well as adapting general models to the specific task.

この研究ではシンプルな構造を正しく訓練することの、一般的なモデルを特定のタスクに適応させることの重要性を強調している。

# 1. Introduction
ファッション領域の研究は近年注目を集めている。我々が取り組むファッションの画像検索は典型的な画像検索の課題でありつつも、クエリ画像とターゲット画像の性質が異なるという複雑さがある。
>The approach that we will use is an adversarial learning methodology based on positive and negative stimuli applying a Siamese network architecture, trained using triplet loss

我々が用いるアプローチはSiameseネットワークに応用した正と負の刺激に基づく敵対(関係)学習手法であり、Triplet lossを用いて訓練した。

# 2. Method
このタスクに対してTriplet-lossを利用する。3つのSiameseNetworkを利用し、その一つ一つの構造はResNET50 network, max-pooling layer, fully connected layer, l2-normalizationとなる。全結合層の重みを共有する。

```math
L(Iq , Ip , In ) = max(0, m + d(q, p) − d(q, n))
```
三つのSiameseNetworkはクラス分類タスクで事前学習した重みで初期化し、全結合層はランダムに初期化する。
クエリ画像はランダムに選択し、同じクラスからの画像はrelevant画像とし、クエリとnon-relevantな画像の中でクエリにもっとも近い25個の画像に含まれるものを選ぶ<-どう計算する？
> This baseline has been trained using SGD opti- mizer, with initial learning rate 10−3, which is decayed by 0.5 each 1024 iterations

拡張版としてよりクロスドメインのタスクに適応させると、shopドメインであるrelevantとnon-relevant画像のネットワークの重みを共有。
> We have separated the streams for each do- main, meaning that our new query stream does not share the weights with the gallery stream, which we use for extract- ing representations of relevant and non-relevant images

実験設定
We have used SGD optimizer, with starting learning rate 5 · 10−4 and decayed it after each epoch for one half.

テストの時にはuser streamのネットワークを利用する。gallery用のネットワークはsecond streamとする。l2-normalizeされているので類似度は単純に内積で計算できる。評価のためにはtop-K指標を用いる。


# 3 Results
## 3.1 Datasets
この論文ではDARN/DeepFashionの公開データセットに含まれる画像とID情報のみを利用する。

## 3.2 Quantitative results
我々のモデルではDARNデータセットに対するSOTAモデルより40%、DeepFashionに対するSOTAモデルより25%上回る検索性能を示した。モデルの評価にはtop-k(主に20)を利用している。

## 3.3 Qualitative results
> It is clear that our model is able to understand the type of the item, without implicit training for that task, and that failure cases are appearing when the query image contains item in a low resolution or when the light are causing low quality of the query image.

我々のモデルはアイテムのタイプを、明示的にそのタスク（カテゴリ分類）用に訓練することなく、理解することができると言える。失敗するケースは、クエリ画像が解像度の低いアイテムを含むか、光の状態によってクエリ画像の質が低下している場合である。

# 4. Conclusion
>we have shown the importance of training simple models correctly, using pre-training for a simpler task, proper triplet mining and careful learning rate decay. 

我々はシンプルなモデルを、より単純なタスクへの事前学習、正しいTripletへのマイニング、注意深い　learning rate decayを使うことによって正しく訓練することの重要性を示した。

> we have proposed extension of the simple architecture, in terms of using a model which is more appropriate to the specific cross-domain problem. 

我々はシンプルな構造の拡張を、よりcross-domainのタスクに特化したモデル(Ours-SS)を使うという観点から提案した。
Macがフリーズした時、どうする？

#Macが活動を停止した時のメモ
どうせリモートでしか仕事しないから…とタカを括ってMacbookproを廉価版にした挙句、ちょと重たいアプリを試しに動かしてみたりするとあっさり固まってしまうんですよね、このOS。そんな時にどうしましょう？というメモでございます。
##はじめにやること
とりあえず
**Command + Option + Esc**
が機能するかみてみます。これが動くならOSは無事です！止まったと思われるアプリケーションだけForce Quitしましょう。
<img width="338" alt="Screen Shot 2018-11-15 at 0.19.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/165373/2813fa10-6cb4-6c84-6b46-2d1a3550b733.png">
これが動けば万歳。ダメならOS自体がアプリに巻き込まれてフリーズしてしまっている可能性が高いですが色々コマンドを試してみましょう！
##再起動できそう？
次に試すのは
**Control + 電源ボタン**
<img width="457" alt="Screen Shot 2018-11-15 at 0.32.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/165373/f21a0087-6d1d-4306-05ef-d91093b501de.png">
もしこの画面が出れば、安全に再起動することができます。でもForce Quitが動かない場合はこちらもダメな場合が多いかも？
##強制再起動
お待たせしました。上記の方法がダメなら、強制再起動を試みてみましょう。
**Control + Command + 電源ボタン**
で強制再起動です。アプリケーションのデータは基本的には保存されません。（PowerpointやChromeの様に一定時間ごとに自動的にオートセーブするアプリ以外のデータは無くなります！仕方ないね！）
##強制終了
強制再起動もできなければ強制終了です。。
**電源ボタンを長押し**
しましょう。ちなみにアップルさんは<img width="668" alt="Screen Shot 2018-11-15 at 0.41.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/165373/5bf20a45-4ddf-a451-bec5-917d624483c8.png">
Force Quitが動かなければ、結構あっさり電源長押しを勧めてきます。まぁ強制再起動も強制終了もメモリに乗っかったデータは全て消えるので、一緒だということでしょうか。
Linuxだと有名なR-E-I-S-U-Bでの再起動は同じLinuxベースでもOSXだと使えないそうで、電源ボタンにREISUB同等の処理が組み込まれていることを祈る他ありません。（この辺はまだ調べられてないので、もしご存知の方がいらっしゃいましたらご教授いただけると嬉しいです！）

次の記事はLinuxの強制再起動にしようかと思います。それでは。
UI/UXデザイン論。ユーザーによる独自利用をサービス化する？しない？ ノーガード戦法のススメ。

# たとえば「下書き機能」はメモ帳・ネタ帳として使われるかもしれない。

たまに聞く話。

- 「下書き機能でメモを取る」
- 「下書き機能にネタ帳を書く」

など。

# サービス化する？

- 「メモ機能をサービス化」するのはコストが大きすぎる。
- 本当に必要なユーザーは、別のアプリケーションに「メモ帳」「ネタ帳」を持っているはず。
- 結論。何もしなくて良い。

# たとえば、公開記事がメモ帳・ネタ帳に使われるかもしれない。

- まさに僕がそれをしたい。
- 下書きのままだと検索性が悪すぎる。自分用の「書きたいことメモ」をググれるようにしておきたい。
- 他に同じ使い方をしている人を見かけたことはない。ごくニッチなニーズ。

# 運用ルールを作る？

- エッジケースすぎる。
- 記事削除などで対応するにしても、既存ルールでカバーできそう。
- 結論、何も対応しない。


# 教訓

- ユーザーの独自利用を止めることは出来ない。
- 放置プレイ、ノーガード戦法が一番良いという場合は多いと思う。
- 独自利用するユーザーが極めて多いときは潜在的なニーズ、もしくは既存のインターフェイスに大きな問題があると考えよう。
  - この時にはじめて、サービス化や、運用ルール制定などを考えてみよう。
  - ごく当たり前の結論だが、開発や運用の中に「はまり込んで」いると見えなくなりがち。


# あわせて読みたい？

- [ui ux yumainaura - Google Search](https://www.google.co.jp/search?q=ui+ux+yumainaura&oq=ui+ux+yumainaura&aqs=chrome..69i57j69i60l3.2966j0j7&sourceid=chrome&ie=UTF-8)


# ということで

本題はこれだ。

## Qiitaに書きたいことのネタ帳 ( @YumaInaura )

# UI/UXデザイン

- ユーザー名のリンク先など、驚きのない遷移先を用意する

# Github

- 日本語が苦手なエンジニアのための Github の Desdription の書き方講座

# Slack

- 絵文字で視認性を上げる人に優しいSlack術

# TIPS

編集用URLを GoogleChrome のブックマークに名前をつけて、アドレスバーから一瞬でアクセスできるようにしておく。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/44437a9d-8d03-a19d-afe0-feeb9b897baa.png)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
MonacaクラウドIDEを（勝手に）デスクトップアプリにしてみた


# はじめに
（内容薄くてすみません！）

Monacaを開発するのにとっても重宝する、MonacaクラウドIDE。皆さん使っていますでしょうか？
![MonacaIDE](https://docs.monaca.io/images/monaca_ide/manual/1.png)

でも、これってブラウザで開くため、IDEを開いているのを忘れて、うっかり別のタブでググってたりした後ブラウザを閉じてしまい、「あっ。。！」ってなること、ありませんか？
私はよくありますｗ

最近はなんでもかんでもブラウザでWebアプリなパターンが増えてきましたね。
中にはデスクトップ版も提供しているサービスもありますが、残念ながらMonacaクラウドIDEは提供されていないようです。

では、デスクトップ版を提供しているWebサービスは、ネイティブでアプリを作っているのかというと、どうもElectronを使ってWebアプリをデスクトップアプリにパッケージングしているパターンが多いようです。

ならば！ということで、MonacaクラウドIDEもデスクトップ版にパッケージングして、ブラウザから切り離して使えるようにしてみちゃいましょう！

# nativefier を使う
ElectronはNode.jsをベースとしており、Chromiumエンジン上で動くWebアプリをウィンドウに表示するフレームワークです。
一から作ってもよいのですが、特にネイティブ機能と連携するような追加機能を作るわけではありませんので、今回は特定のURLを表示するだけのElectronのWebViewを構築してくれる**[nativefier](https://github.com/jiahaog/nativefier)**を使ってみます。

## nodeパッケージのインストール

下記のコマンドでnativefierをインストールします。

```
npm install nativefier -g
```

## アイコンを入手する

以下のURLからfaviconをゲットしておきましょう！
**https://ja.monaca.io/img/favicon.ico**

## nativefier で MonacaクラウドIDE をデスクトップアプリ化する

下記のコマンドを実行するだけです！

```
nativefier --name "Monaca IDE" --app-copyright "Asial Corporation" --icon favicon.ico "https://monaca.mobi/ja/dashboard"
```

こんな感じでファイルが出来上がりました。
<img width="805" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/2a32be35-46d2-7008-472b-0f9009124fd5.png">

## 起動する

EXEファイルを実行してみます。
<img width="957" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/125e92f0-1ef9-f1d5-e731-f1bcbff04112.png">

お、きれいに表示されますね！
ログインしてみます。

<img width="958" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/3a03cd3a-7de1-e051-4e71-2cb3012ac68b.png">

いい感じです！
・・若干インデントの線がずれている気がしますが気にしない！

# まとめ
ブラウザで開くWebアプリと、普通のブラウジングが同じウィンドウに表示されていると、あれどのタブだったかなと、手間取ることもしばしばです。
デスクトップアプリにしておけば、タスクバーやAlt+Tabで切り替えることができるため、普通のアプリ感覚で使えるようになるので、是非チャレンジしてみてください。

~~そのうち、アシアルさんの中の人にもそれとなしに、「提供したら？」と伝えてみますｗ~~
PowerBIのデータについて調べてみた

# はじめに
エンジニア？アナリスト？サイエンティスト？歴5ヶ月めの新卒社員が最近学んだことをちょっとずつまとめてみたもの。今回は第6弾です。そう、なぜこんなに短いスパンで投稿しているのかというと、ただいまひとりAdvent Calendar期間なのです。よかったら今までの記事も読んでみてくださいね^^
ちなみに、そんな自分の直近3回の投稿はこちら↓
[第3弾](https://qiita.com/icchy_sh33p/items/358f71ce13248c7d1a9d)
[第4弾](https://qiita.com/icchy_sh33p/items/dcaa650f57687c9bbaec)
[第5弾](https://qiita.com/icchy_sh33p/items/c9dccc1bffcdbf7f5c8c)

# テーブル（今後も調査の余地あり）
テーブルは2種類に分類することができ、用途に合わせてどちらで作成するかを決定する。
## テーブルの作成種類
- 分類パターン等の設定として作成
    - Agegroup（年代）、FP（勤務形態）、Gender（性別）など
 - 個々のデータを登録、管理するテーブルとして作成
    - Employee（従業員）、Customer（顧客）をはじめとする個人情報など

## テーブルとテーブルを紐付けしてリレーションシップを作成したい
- PowerBI DeskTop画面左側「リレーションシップ」から、共通のカラムを選択、紐付けしたいテーブルの該当カラムにドラッグすることで作成可能
※先述した分類パターン等の設定として作成したテーブルと個々のデータを登録、管理するテーブルの間にリレーションシップを作成することでjoinが可能、表示の仕方を別のテーブルから引っ張ってくるなどができるように
![](https://i.imgur.com/wAraDY1.png)
※網掛け部分が個々のデータを登録、管理するテーブル。網掛けがかかっていない白いテーブルが分類パターン等の設定をするテーブル
- 現段階でリレーションシップを作成する上での問題点
    - 完全にカラムの中身のそれぞれ対応するものが一致しなければ、リレーションシップが作成できないため、PowerBIにデータを入れる前の出力段階で一致させるように出力しなければならない（ただし、日付や文字列などはデータ型を揃えたり、関数で中身を調整することで一致させれば大丈夫？）
    - 反対にカラムの中身のそれぞれ対応するものが一致していれば、自動でリレーションシップが生成されるため、一度リレーションシップを取り消したい場合は手動で取消する作業が必要に
- リレーションシップの種類
    - 多対一（*:1）・・・ひとつのテーブル内の列は値のインスタンスを複数持つことができ、関連するもうひとつのテーブル（多くの場合ルックアップテーブルとして知られる）は値のインスタンスをひとつだけ持つことができる
    - 一対一（1：1）・・・ひとつのテーブル内の列は特定の値のインスタンスをひとつだけ持ち、関連するもうひとつのテーブルも特定の値のインスタンスをひとつだけ持つ

# カラム
## カラムの中身の関数による設定ができる
- 例：Month = Format([Date], "MMM")
- 出力結果：カラム名が黄色い部分
    ![](https://i.imgur.com/hrCyZgw.png)
## 計算式による新しいカラムの作成ができる（メジャーと計算列の設定）
- メジャー・・・集計したレポートのデータを特定の関数で計算するフィールド（あくまで列ではない）
    - ￼アイコン→　![](https://i.imgur.com/nWZzaFs.jpg)
    - メジャーで取り扱う特定の関数
        - SUM・・・合計を算出
        - AVERAGE・・・平均を算出
        - MINIMUM・・・最小値を算出
        - MAXIMUM・・最大値を算出
        - COUNT・・・カウント数を算出
        - STANDARD DEVIATION・・・標準偏差を算出
        - VARIANCE・・・平方和を算出
        - MEDIAN・・・中央値を算出
        - ほか、独自のメジャーも作成可能
- 計算列・・・テーブル内に新しいデータとしてDAX関数で値を定義して作成された列（数値に限らず作成可能）
    - アイコンによって、データ型が異なるため注意
        - ![](https://i.imgur.com/3HVlp0u.png) →数値型（固定小数点型、10進数型、整数型など）のデータ
        - ![](https://i.imgur.com/A3LFVSw.png) →テキスト型のデータ
## その他、カラムについて（アイコンごとで情報整理）
- ![](https://i.imgur.com/WcG5Kz5.jpg) →データが数値型（主に固定小数点型）になっている
    - データのカラム一覧表示にこのアイコンがついているときはデフォによる計算がされている（合計、カウントなど）。メジャーの場合は特定の関数を指定（あるいは独自の関数を作成）する必要がある
        - メジャーと共通して、データ型が数値型（主に固定小数点型）
- ![](https://i.imgur.com/y6AwbOo.jpg) →名前（ラベル）として設定、使用されているカラム
- ![](https://i.imgur.com/Evco96C.jpg) →データカテゴリが地理系のものになっている（詳細は以下）。このアイコンがついているカラムについては、地図を使用した視覚化ツールが使用可能
    - 地理系のデータカテゴリは以下の8種類。
        - 住所
        - 市区町村
        - 大陸
        - 国／地域
        - 群
        - 緯度
        - 経度
        - 場所
        - 郵便番号
        - 都道府県

# 今後、さらに調査していきたいこと（暫定）
- 使用頻度の高いDAX関数の調査、まとめ作業
- KPIの作成方法、データとしての使用方法
- リレーションシップとマージの使い分け

# 感想
昨日に引き続き、PowerBIについて調べたことをまとめてみました。前回、今回はMicrosoftの方で準備していたチュートリアルを触りながら調査していったのですが、データについては、実際に触っていくうちになんとなく気になっていたことだったり、調べても前は『対処法がわからない！！』となっていたことがわかったり、わかっていない部分があったとしても、確実に答えには近づいているなっていう実感があったので、チュートリアルでテンプレを触って勉強をしていくって改めて大事なんだな、と再認識しました^^

最近、自分らしからぬ真面目でカタイ感想になってきたので、ここももう少しバリエーションに富んだ感じにしていきたいなぁ（学習内容よりもコラム系ガチ勢）。ではまた
私の技術者人生に貢献した技術書

年代順に、私の技術者人生に影響を与えた書籍をならべます
私は書籍をほとんど読まない　コードみればいいじゃんって人間なので
ほとんどプログラムの本は読まないのですが
その中でのセレクションです


#[はじめて読む8086](https://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E8%AA%AD%E3%82%808086%E2%80%9516%E3%83%93%E3%83%83%E3%83%88%E3%83%BB%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%92%E3%82%84%E3%81%95%E3%81%97%E3%81%8F%E8%AA%9E%E3%82%8B-%E3%82%A2%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%96%E3%83%83%E3%82%AF%E3%82%B9-%E8%92%B2%E5%9C%B0-%E8%BC%9D%E5%B0%9A/dp/4871482456/ref=sr_1_1?ie=UTF8&qid=1543703603&sr=8-1&keywords=%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%80%808086)
いきなりアセンブラです！
でもこの本をおすすめするのは、アセンブラ知識だけではありません
その後のシリーズの 80386の本など　プロテクトモードについても書いてあり
OSのプロテクトモードに対する理解に役立ちます


#[詳解 Linuxカーネル 第三版](https://www.amazon.co.jp/%E8%A9%B3%E8%A7%A3-Linux%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB-%E7%AC%AC3%E7%89%88-Daniel-Bovet/dp/487311313X/ref=sr_1_1?ie=UTF8&qid=1543703673&sr=8-1&keywords=Linux+Kernel)
人生のバイブルとも言うべき本で、ずっと枕にして寝ていました
私は低い枕が好きなので　章ごとに分解して　３cmずつの厚さにしてました
電車で読むには　この分厚さの本は無理なのです
そして　会社用にもう1冊書いて　そちらは分解せず置いていました
もちろん　十年たち今はカーネルはもっと複雑になっていますが
カーネルの基礎を勉強するには　最適な一冊
ほんと　死ぬ時は　この本と一緒に燃やしてもらう予定です


#[Inside COM](https://www.amazon.co.jp/Inside-COM%E2%80%95Microsoft%E2%80%99s-Component-Microsoft-programming/dp/4756121764/ref=sr_1_1?s=books&ie=UTF8&qid=1543704634&sr=1-1&keywords=inside+com)
MicrosoftのCOM本です
OLE、ActiveX、COM、DCOM、.net とMicrosoftのコア技術は進化していく中で
これらの思想は本当にすごいと思いました
10年は先にいってるなと感じていた
COMの思想は本当にすごかった

#[DNS&BIND　オライリー](https://www.amazon.co.jp/DNS-BIND-%E7%AC%AC5%E7%89%88-Cricket-Liu/dp/4873113903/ref=sr_1_1?ie=UTF8&qid=1543704480&sr=8-1&keywords=DNS+%E3%82%AA%E3%83%A9%E3%82%A4%E3%83%AA%E3%83%BC)
なぜDNSの本？　ってあるけど何故かいがいと読んだ
人生に影響を与えた程ではないけど、Sendmail、Apache、Bindという　Webサーバ御三家でも  
Qmail、Nginxのような対抗馬があまり出なかったサーバ  
ってのに興味をもってBindのコードを読むときに参考になった  
でも　人生への影響は少ないな・・  


#[DirectX9　シェーダープログラミングブック](https://www.amazon.co.jp/DirectX-9-%E3%82%B7%E3%82%A7%E3%83%BC%E3%83%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%96%E3%83%83%E3%82%AF-%E4%BB%8A%E7%B5%A6%E9%BB%8E-%E9%9A%86/dp/4839912475/ref=sr_1_fkmr0_3?ie=UTF8&qid=1543704544&sr=8-3-fkmr0&keywords=DirectX8%E3%80%80)
今現在は　ゲームの開発、３Dエンジンの作成が主な家業になってるが、その基礎を作った本  
当時はPS2互換機で３Dライブラリ（というかカーネル）を作る仕事をもらい
この本を読みながら色々な技術を移植していた  
その後の３Dアバターレンダリングサービスや今にもつながる
影響の多い本


#その後
あんま本よんでないので
そろそろ　いい本を探したい
php-master-changes 2018-11-14

今日は $this アクセスまわりの最適化、リクエストごとのシグナルハンドラ再初期化を避けられるようなフラグ追加、opcache の最適化バグの回避、preloadig の PR マージ、iconv_mime_decode_headers() のバグ修正があった！

# 2018-11-14
## dstogov: Replace getThis() by EX(This), when additional check is not necessary.
- https://github.com/php/php-src/commit/c6ad0b92b7d8e66a07cf75ed4abc39fe3e13e00d
- チェックが不要な箇所では getThis() を単純な EX(This) の参照に置き換え
- getThis() は オブジェクトであるかどうかのチェックを[行いつつ](https://github.com/php/php-src/blob/c6ad0b92b7d8e66a07cf75ed4abc39fe3e13e00d/Zend/zend_API.h#L360) EX(This) へアクセスするマクロ
- EX(This) は実行中コードでの $this を持つ [zend_execute_data](https://phpinternals.net/docs/zend_execute_data) のメンバ

## dstogov: Replace zend_parse_method_parameters() by zend_parse_parameters() and avoid useless checks.
- https://github.com/php/php-src/commit/54a7d03934d7b4b1b8fbc025579d275dea2bb8c2
- zend_parse_method_parameters() を zend_parse_parameters() へ置き換え、不要なチェックをなくした

## dstogov: Eliminate useless $this related checks
- https://github.com/php/php-src/commit/5ebefa74cfcb52b068caf8493f6187c9825aec2f
- 不要な getThis() をもっと置き換え

## dstogov: Eliminate useless $this related check
- https://github.com/php/php-src/commit/8bda22592e4a3b1c1735c6ca25d7f0404d511e53
- 不要な getThis() をもっともっと置き換え

## dstogov: Added possiblity to avoid signal handlers reinitialization on each request.
- https://github.com/php/php-src/commit/53ea09e84dcc5eb199f732c7621633a8f34ce3e7
- リクエストごとのシグナルハンドラ再初期化を避けられるよう [zend_signal_globals_t](https://github.com/php/php-src/blob/53ea09e84dcc5eb199f732c7621633a8f34ce3e7/Zend/zend_signal.h#L56) へメンバ追加
- 拡張なんかから触る想定？

## dstogov: Fixed issues related to optimization and persitence of classes linked with interfaces, traits or internal classes.
- https://github.com/php/php-src/commit/ba99aa133c907b9d46e0f18e1461a3a89c17d4f1
- ext/opcache で、interface、trait、内部クラスとリンクされるクラスの最適化とコード保存の問題を修正
- NULL チェックをいくらか追加
- あと op_array が trait からの複製であるかを示す ZEND_ACC_TRAIT_CLONE のフラグが追加され、一部最適化の対象から除外するのに使ってるみたい

## dstogov: Implemented preloading RFC: https://wiki.php.net/rfc/preload.
- https://github.com/php/php-src/commit/f6d227ed4f5d4c0276eb720806e808baceb37f10
- 7.4 向けに投票で可決された preloading の RFC の実装、[PR:3538](https://github.com/php/php-src/pull/3538) のマージ
- [PHPで簡単に永続プリロードできるようになる](https://qiita.com/rana_kualu/items/afe544b0f5680e81fabc)にどういうものかはまとまってる
- 実装については先行してマージされた [immutable クラス/関数](https://qiita.com/sj-i/items/00df29fe32367eea3502#dstogov-immutable-clases-and-op_arrays) がわりと大きい
- 共有メモリ上で不変の状態でリンクまで済ませてコードを持てるので、プロセスごとのメモリへのコピーが不要
- preloading は zend_post_startup のタイミングのケツの方で行われ、指定スクリプトを読み込んで実行した後にリンク処理が走る

## cmb69: Fix [#77147](https://bugs.php.net/bug.php?id=77147): Fix for [60494](https://bugs.php.net/bug.php?id=60494) ignores ICONV_MIME_DECODE_CONTINUE_ON_ERROR
- https://github.com/php/php-src/commit/a56cdd0a824d439920548aaeae757cb2341bd4ec
- [7.1~]
- ext/iconv で、[iconv_mime_decode_headers()](http://php.net/manual/ja/function.iconv-mime-decode-headers.php) が ICONV_MIME_DECODE_CONTINUE_ON_ERROR を無視する問題の修正
- [8 月の修正](https://qiita.com/sj-i/items/bea18544f72a528c7d24#cmb69-fix-60494-iconv_mime_decode-does-ignore-special-characters) で入ったバグ
Flask + jQueryでテーブルの入力フォームに入力があるたびに値を取得

Flask + jQueryでテーブルの入力フォームに入力があるたびに値を取得して、コンソール(F12で表示)にログをはき続ける。

忘れそうなのでメモ

jQueryでポストする際の基本


サーバー側

```python:server.py
from flask import Flask
from flask import render_template
from flask import request
from flask import jsonify
from flask_bootstrap import Bootstrap


(略)

@app.route('/complete', methods=['POST'])
def complete():
    json_data = request.json
    return jsonify({'value': json_data})
```

クライアント側

```javascript:index.html
$(function ($){
    // テーブルの入力フォームにインプットした際に発動
    $('td input').on('input',function () {
    // name属性と入力フォームの値を取得
      var inp = {name: $(this).attr('name'),
                  value: $(this).val()};
      console.log(inp);  // 入力をjavascriptでコンソールに表示
        inp = JSON.stringify(inp);

    $.post({
      url: '{{ url_for('complete') }}',  // server.py complete()に渡す
      data: inp,
      dataType: 'json',
      contentType: 'application/json;charset=UTF-8',
    }).done(function(data){
      console.log(data);  // 入力をserver.pyを通して表示
    }).fail(function(){
      console.log('fail');
    });
  });
});
```

456
456あ
と入力した結果
日本語も問題なく受け取れる。
入力するたびなので、「4,45,456,456あ」すべてがコンソールに表示されてウザイ。

![jquery_flask.PNG](https://qiita-image-store.s3.amazonaws.com/0/113494/32840ddf-6679-ad80-0e46-f6519bc1c74f.png)

1,3つめの塊がJavaScriptのconsole.log
2,4つめの塊がserver.pyを通しての表示。
Pythonで加工してから表示できる。
AmazonからCorretto(JDK)が出た！

James GoslingのTwitterを見て、「えっもうJDK移行プランの見積もりだしちゃったよ」とか、「あー修正が必要」と感じたSEは多いと思います。これは夢ではなく、現実で検討しなければいけない緊急重要ニュースです。

私も実はいろいろとJDKについて[調べていました](https://qiita.com/arimas/items/7bbba7dbf7e8068da79c)が、これは紹介の2番目ぐらいに持ってくる重要な勢力登場です。

見積もりの出し直しも含めて、知っておかなければならないネタなのでザクッとぐぐって重要コメントと考察かきました。ただ、まだいまのところWolrdWide含めて、ニュースしかなかったのであまり紹介できませんがなにか参考になれば。（訳ちがってたらごめんなさい）

https://aws.amazon.com/jp/blogs/opensource/amazon-corretto-no-cost-distribution-openjdk-long-term-support/

`Amazon has a long and deep history with Java. I'm thrilled to see the work of our internal mission-critical Java team being made available to the rest of the world" — James Gosling`

AmazonはJavaについて深く長い関わりを持ってきた。我々のJavaチームが作った作品が広く利用されることにわくわくしているージェームズ・ゴスリング

`In case any upstreaming efforts for such patches is not successful, delayed, or not appropriate for OpenJDK project, we will provide them to our customers for as long as they add value.`
(Amazon Corretoは)パッチが提供されない、遅れているまたはOpenJDKプロジェクトにとって適切でないような場合においても、我々は顧客に価値があるのならパッチを提供する予定だ。

`We're making these available to customers with no-cost, long-term support, with quarterly updates including bug fixes and security patches. AWS will also provide urgent fixes to customers outside of the quarterly schedule`
(重要なシステムを利用する)顧客に対して、費用ゼロ、LTS付き、四半期毎のバグフィックス、セキュリティティパッチを提供する予定だ。そして、緊急時にはそれ以外でも提供する。

## 考察
Amazonは私達が「これ一択でいいじゃん」と思考停止に陥るようなJDKの救済策をだしてきたのかもしれない。額面通りに受け取れば。
ただし、上記コメントの通り、OriginalのOpenJDKとの乖離*が予想されるので、後から他のJDKにやっぱり乗り換えしたいと思ったときはつらいので、利用するAPIはきちんと疎結合を考えて、クラスを差し替えられるような設計が求められますね。
※OpenJDKビルドからCorrettoへはAmazonもできるかぎり保証していくようだが、その逆は不明という意味。Oracle Javaのsunパッケージような扱いがあって、それを利用していると沼。

DocomoからSoftbankに乗り換えるように簡単には行かないので、見積もりの特記事項には十分気をつけてください。
Java11からのJDK戦国時代はJavaエンジニアにOpenJDKを利用する上での設計考慮を突きつけられている。
Link > draw.io > Google Collaborative Editing End Of Life > 対処中 (2018年11月15日現在)

### 関連

- [draw.io > Google Drive: Realtime API廃止 (2018-11-18)後 > 使えるようだ](https://qiita.com/7of9/items/b34ab5aa3306416fd7d3)

### リンク

draw.ioを使っている時「Important Notice」のような通知が来た。
そのリンク先は以下だった。

https://desk.draw.io/support/solutions/articles/16000087215

> We were hoping to have a replacement system up and running in time, however, production tests have shown issues remaining with a number of key areas. We will continue to work on ...

問題の対処中とのことのようだ。
(10月後半のメール回答はいったい。。。）

> At 9am UTC November 12th 2018 all draw.io files saved in Google Drive will switch away from using Google's RT system. External changes will be detected and a dialog will be shown to overwrite the changes or save a copy of the file:

ダイアログが表示されるようになる、とのこと。
Make a CopyとOverwriteの違いについては記載はみあたらず。

リンク先下の方にFAQsがある。

### 関連?

2018年11月現在、draw.ioで保存しても進捗を示す回転状況がいつまでも終わらない。これが上記と関係あるのかは不明。
(ブラウザリロードで対処している）。
戻り値ってなんぞ

【戻り値について】
戻り値を返したい場合は最後に変数名を1行書けば済みます。
rubyでは　メソッド内で最後に実行された式の値が戻り値となります。

```rb

def triangle(base, height)
  result = base * height / 2.0
  result
end


area = triangle 11, 9
puts "面積は、#{area}です。"

# 結果　　面積は49.5です。
```

最後の式の値が戻り値になるので、以下のように書いても同じ

```rb

def triangle(base, height)
  base * height / 2.0
end
```
Twitterに学ぶUI/UXデザイン – ユーザーの空白入力・未入力時にアクションを分岐させる

# Twitter Web UI の例


## 何か入力があると「引用リツイート」になる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/59e11226-dea4-5949-c5b8-bfc0cefa7d9d.png)

### 結果

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/1427b2c1-0c0f-2c91-0cfb-e03ddac127d7.png)


## コメントが未入力だと普通のリツイートになる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/6919e70d-e82e-1e24-ef53-108c8cc0bd24.png)

# シンプルでいいね！

前は余計なステップがあった気もする。

# 教訓

- 「ユーザー未入力」もアクション分岐の候補に入れてみよう。
- ユーザーアクションを最低ステップ数に抑えよう。
- ただし、ユーザーの意図を正しく反映しよう。

# あわせて読みたい？

- [UI/UX論 (Google検索結果)](https://www.google.co.jp/search?q=yumainaura+ui+ux&oq=yumainaura+ui+ux)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
不要テーブルの削除手順

#手動でモデルファイルを削除
https://qiita.com/Kuragasaki/items/7d98cf29341611fb189a　
上記を参考にしたが
```rails destroy model <モデル名>　```コマンドだと
***マイグレーションファイル削除まで実行される***ので、あかんですね。
なので***モデルファイルは手動で削除***します。

下記URLを参考
https://qiita.com/seisonshi/items/dbc7e8ef08e4ebe9a1f1

#テーブル削除用のマイグレーションファイルを作成
$rails generate migration <マイグレーションファイル名>
マイグレーションファイル名は、削除用なので***drop_users***みたいな削除用とわかる名前にすると良い。

#作成したマイグレーションファイル内に、削除コードを追記
changeメソッド内に
　```drop_table :テーブル名```　を追記。

#rake db:migrateコマンドを実行
これでテーブルが削除されます。

テーブルを作成したマイグレーションファイル（createの名前やつ）は削除しない事が大事です。
Trelloに学ぶUI/UXデザイン – OSを超える独自アクションの提供。右クリックなどの超重要ユーザーアクションを上書きする。

# アイテムを右クリックすると、Trello独自のアクションが選べる。

Web版の場合

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/f629f597-dc7b-82a9-c123-6f6fc24b1dc6.png)

# OSのデフォルトアクションはこんな感じ

Macの場合

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/882f2c6f-1b3c-6342-5e79-daedb17115f8.png)

# ポイント

- OSレベルのインターフェイスを「確実に上回れる」と思った時にやろう。
  - 相当な自信が必要。生半可な覚悟では失敗する。
  - OSのアクションをうまく使うのが基本。

# Github Gistの失敗例

Control + F ( Command + F ) のブラウザ検索を上書きしてしまって、本当に使いづらいやつ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/ea95078f-e6d1-d34c-899e-722d9290e8cc.png)


# あわせて読みたい？

- [TrelloのUI/UX論 (Google検索結果)](https://www.google.co.jp/search?q=yumainaura+ui+ux&oq=yumainaura+ui+ux)
- [UI/UX論 (Google検索結果)](https://www.google.co.jp/search?q=yumainaura+ui+ux&oq=yumainaura+ui+ux)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Qiitaで自分記事への「あわせて読みたい」はGoogle検索結果へのリンクにすると良いかも知れない。


# Google任せで管理コストを最小限にしよう

自分で色々探してリンクしなくて良い。

QiitaとGoogleが続く限り、永遠に「関連記事」を自動管理してくれる。

#  Qiita以外のサイトもヒットする

GithubGistとか。Mediumとか。はてなブログとか。WordPressとか。

色んなサイトに書いている人には良いかも。

# 各サービスでの名前や、アカウント名は統一しておくのが良い

[「自分ググラビリティ」を上げて「情報アウトプット富豪」になろう。Github Qiita Twitter などのアカウント名を統一すべき理由。横断的検索性、スケーラビリティを確保しよう。 - Qiita](https://qiita.com/YumaInaura/items/191eef45306150458fbc)

# Google検索結果URLの管理は？

MacならAlfredのスニペット機能、クリップボード履歴などが便利。

いちどでもクリップボードに入れたら、その履歴からキーワード検索できる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/a2146046-8de2-755f-16b5-d25ff1b85de1.png)


# あわせて読みたい？

- [あわせて読みたい yumainaura - Google Search](https://www.google.co.jp/search?q=%E3%81%82%E3%82%8F%E3%81%9B%E3%81%A6%E8%AA%AD%E3%81%BF%E3%81%9F%E3%81%84+yumainaura&oq=%E3%81%82%E3%82%8F%E3%81%9B%E3%81%A6%E8%AA%AD%E3%81%BF%E3%81%9F%E3%81%84+yumainaura&aqs=chrome..69i57.5385j0j7&sourceid=chrome&ie=UTF-8)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
vimで飛び回りたい（ctagsを使用して定義元にジャンプしたい）

## 概要
クラスや関数、定数などの定義元にジャンプできるようにする
※**exuberant-ctags**ではなく**universal-ctags**を使用しています。設定ファイルの場所が異なりますので注意。

## ctagsのインストールはこちらから
[exuberant-ctagsじゃなくて、universal-ctagsをインストールしたい](https://qiita.com/crarrry/items/846323efdfbbdf46e677)


## ctagsの設定ファイル

`~/.ctags.d/<名前任意>.ctags`に設定を書けば、読み込んでくれる
（exuberant-ctags を使用している場合は`~/.ctags`に設定）

```bash:~/.ctags.d/config.ctags
--php-kinds=cdfin
```

上記は、「PHPのタグファイルを作成する際、クラス・定数・関数・インタフェース・ネームスペースのタグを作ってね」という設定

念のためコマンドたたいて確認してみる

```bash

ctags --list-kinds=php
```

指定したもの以外は[off]になっているのが分かります。

```bash:出力
c  classes
d  constant definitions
f  functions
i  interfaces
l  local variables [off]
n  namespaces
t  traits [off]
v  variables [off]
a  aliases [off]

```

## タグファイル作成
プロジェクトのルートディレクトリで

```bash
ctags -R --languages=php
```
今回はPHPのファイルのみに対して作成するため `--languages=php` のオプションを指定。
`tags`というファイルが作成される（ファイル名を指定したい場合は、`-f`オプションで指定可能）

## .vimrcに設定を記載
#### タグファイルのパス指定
* `tags`ではなく`./tags`と指定すると、カレントディレクトリではなく開いているファイルのディレクトリからtagsファイルを探してくれる
* `;$HOME`とすることで、ホームディレクトリまで遡ってtagsファイルを探してくれる

```.vim:.vimrc
set tags=./tags;$HOME
```

#### 候補が複数ある場合は一覧表示
```.vim:.vimrc
nnoremap <C-]> g<C-]>
inoremap <C-]> <ESC>g<C-]>

```



## レッツジャンプ


| キー | 動作 |
|-----------|------------|
| Ctrl + ] | 宣言元へジャンプ |
| Ctrl + t （または Ctrl + o ）| 戻る |

便利です～～～～。

## 参考
[CtagsでVimにタグジャンプ機能を追加する - Qiita](https://qiita.com/aratana_tamutomo/items/59fb4c377863a385e032)
[ctagsをちゃんと使う - Qiita](https://qiita.com/soramugi/items/7014c866b705e2cd0b95)
Trelloに学ぶUI/UXデザイン – 「新規作成アクション後の状態遷移」は超重要。連続的なアイテム作成の例。

# 新規アイテムを作成すると

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/151d2fd1-08b9-bad2-d96b-84a75a624cc5.png)

# すぐに次の「アイテム作成モード」になる

入力フィールドもフォーカス状態になり、一瞬で新しいアイテム作成を始められる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/a8f209bb-ce8f-b995-9a2a-a06571283b97.png)

# 連続的にアイテムが作成できる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/be9e20ae-8e58-c402-6dac-d61846d24ab4.png)

# なぜこのUI？

- Trelloは「壁に貼るカード」だから。
- 詳細は重要ではなく「タイトルが全てを言い表す」というコンセプト。
- 次々にアイテムを作成していく、フットワークの軽さが重要。


# 他の選択肢

- 新規作成すると、詳細入力に遷移する
  - GoogleCalenderなど、カレンダー系など
- 新規作成すると、アイテム一覧に遷移する
  - Trelloの場合はUI的に、これも兼ね合わせている

# あわせて読みたい？

- [TrelloのUI/UX論 (Google検索結果)](https://www.google.co.jp/search?q=yumainaura+ui+ux&oq=yumainaura+ui+ux)
- [UI/UX論 (Google検索結果)](https://www.google.co.jp/search?q=yumainaura+ui+ux&oq=yumainaura+ui+ux)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Amazon Corretto（プレビュー）をとりあえずインストール

うおおおおおお！LTS付きAWS先生からのお年玉！

https://dev.classmethod.jp/cloud/aws/amazon-corretto/

ということで、GAを2019/1とした無償のJavaが登場するそうです。

Javaから離れて久しいけど、心はJavaから離れてないからテンション上がった。
原文原文ー！

https://aws.amazon.com/jp/corretto/

https://aws.amazon.com/jp/blogs/opensource/amazon-corretto-no-cost-distribution-openjdk-long-term-support/

と、よく読むとGAは2019/1じゃなくて2019のQ1、第一四半期ですね。クラスメソッドさんもきっと速報でテンション上がったんだw
気分的にはお年玉で大差ないのでおk。

<img width="619" alt="スクリーンショット 2018-11-15 7.05.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/80905/c7cc53c4-7f39-ea90-0d4d-846c2d24e940.png">

とりあえずおうちのMacにインストール。うん、普通や。

```bash
$ java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (build 1.8.0_192-amazon-corretto-preview-b12)
OpenJDK 64-Bit Server VM (build 25.192-b12, mixed mode)
```

うん、普通や。

ライセンスも当然OpenJDKと同じ[GPLv2 with CPE](https://openjdk.java.net/legal/gplv2+ce.html)。

普通に使える素晴らしさ、、！

会社行ったら昔作った小さいサービスで入れ替えテストしてみよう＾＾
[rospy] ctrl-cで綺麗に終わるようにする

# ワーニングメッセージ
ROSのノードをctrl-cで終了させた時、そのノードと通信している他のノードで次のようなメッセージが出ることがあった。

```.sh
[WARN] [1542224645.663897]: Inbound TCP/IP connection failed: connection from sender terminated before handshake header received. 0 bytes were received. Please check sender for additional details.
```

これはPythonでノードを動かしている場合、ctrl-cが裏で動いているスレッドを途中で止めてしまう事に原因があるように思われる。下記のプログラムテンプレートでは省略しているがsubscribeでコールバックがある場合もその処理は別スレッドなので同様の問題が発生する。
これを解決するにはctrl-cの処理をrospyにまかせずに自前で綺麗に書けば良い。

# プログラムテンプレート

```the_node.py
#!/usr/bin/env python

import signal
import rospy

cont = True

def handler(signal, frame):
    global cont
    cont = False

def the_node():
    global cont

    rospy.init_node('the_node', disable_signals = True)

    rate = rospy.Rate(40)
    while cont:
        ~~~
        rate.sleep()

    rospy.signal_shutdown('finish')
    rospy.spin()

if __name__ == '__main__':
    signal.signal(signal.SIGINT, handler)
    the_node()
```

- 開始時:
init_nodeでdisable_signals = Trueとしてrospyにctrl-cの処理をさせないようにする。
- 終了時:
signal_shutdownでrospyにshutdownを司令してspinでshutdownするまで待つ。
- 全般:
contはグローバル変数で別スレッドからもちゃんと読めるように各defでglobal contと宣言する必要がある。

# シリアル通信
特にシリアル通信をしている場合、ROSをctrl-cでshutdownさせると通信途中で処理が中断してしまう確率が高い。そんなケースでもこの方法は有効だ。シリアル通信している部分を

```.py
try:
    sp.write(~)
    sp.flush()
except KeyboardInterrupt:
    cont = False
```

みたいにし、rospy.signal_shutdown('finish')の前に

```.py
sp.close()
```

すれば綺麗にシリアルポートを終了でき、次にちゃんとopenできる。
AWS Lambda(Python)上でのFFmpeg呼び出しの注意

AWS Lambda 上で FFmpeg でエンコードしようとしてはまりました。
Lambda上で不可解な動きが起きると、調査が非常に困難ですね。

## 環境
- AWS Lambda (Python3.6)
- FFmpeg4.1

## 問題と調査、対策
Windows環境、Linux環境、どちらでも正常に動作するエンコードスクリプトなのですが、Lambdaで実行するとAACのデコードで失敗してしまいます。
コーデックかFFmpegのバージョンの問題かといろいろ探ったのですが、バージョンを3系にしても、AACのコーデックを変えても問題が出てしまいました。

いろいろ試した結果、Pythonからsubprocessを使ってLambda上でFFmpegを実行するときは、標準入力をDEVNULLでつぶさないと、親プロセスのハンドルを引き継いでしまい、問題が起こるということの様です。

対策としては、こんな感じで`subprocess.run`実行時の`stdin`に設定するだけです。

```python
import subprocess
cmd = ['ffmpeg', '-i', 'input.mp4', '-t', '30', '-b:a', '128k', 'output.mp4']
subprocess.run(cmd, stdin=subprocess.DEVNULL)
```

## 類似ケースがありました
Stack Overflow の[投稿](https://stackoverflow.com/questions/52007992/ffmpeg-transcoding-on-lambda-results-in-unusable-static-audio)にまさに今回のケースがありました。
この投稿にも紹介されている動画、[AWS re:Invent 2017: Building a Serverless Pipeline to Transcode a Two-Hour Video in (SRV314)]
(https://www.youtube.com/watch?v=lleCVR2Mupw)の16分くらいのところで説明されていました。
フォーム作成のために作った5つのファイル

先日、PHPとMySQLを用いて簡単なデータベース連携フォームを作成しました。
今回は、その時に作ったファイルをそれぞれ説明していきたいと思います。


###使用ファイル
使用したファイルは全部で5つです。

#####definision.php
フォームに入力してもらう項目を定数として扱うように定義します。
このように、変更することが無い値やプログラムのどこからでも呼び出したい値は、定数とすると便利です。
このファイルは任意です。

#####index.php
最初のページです。
このページでは、フォームで登録したデータを全て閲覧できるようにしました。
そのために、MySQLのデータをweb上に取り出すためのSQLコードを書きました。
また、フォームに飛ぶためのリンクも設置しました。


#####input.php
情報を入力するフォームがあるページです。
確認ボタンを押すと、フォームに入力した情報をconfirm.phpに送ることができます。
このフォームで入力した情報を複数の画面で使いまわせるように、SESSIONを用いて、サーバー側に一時的にデータを保存できるようにしました。


#####confirm.php
先ほどフォームで入力した情報を閲覧する確認ページです。
戻るボタンと登録ボタンがあります。
また、フォームに未入力欄があった場合、フォームに戻るように仕向けるバリーデーション機能を実装しました。


#####complete.php
確認ページで登録ボタンを押すとこのページに遷移します。
フォームで入力した情報を表示して、登録完了したことをお知らせするページです。
しかし、システム上はこのページに遷移したと同時にデータベース上に情報を登録します。
そのために、MySQLに接続してデータをINSERTするためのSQLコードを書きました。
また、最初のindex.phpのページに飛ぶためのリンクも設置しました。



今回は、PHPとMySQLを用いたフォーム作成のために作ったファイルをご紹介しました。