OmniAICreator/Qiita-1.07M huggingface dataset:
php-master-changes 2019-02-10

今日は PHP TestFest 2017 で追加された各種テストの取り込みと修正があった！

# 2019-02-10
## flow-control: Added basic test for ZipArchive::unchangeIndex()
- https://github.com/php/php-src/commit/ec814c3a624f38157f110de3ebaaa1917c2e6315
- [7.4~]
- ext/zip で、[ZipArchive::unchangeIndex()](http://php.net/manual/ja/ziparchive.unchangeindex.php) のテストを追加
- [PHP TestFest 2017](https://phptestfest.org/groups/2017/) で追加された奴の取り込み

## flow-control: Added basic test for ZipArchive::unchangeName()
- https://github.com/php/php-src/commit/1227284fb5fdf31fa1ff654434a0bf50918f009c
- [7.4~]
- ext/zip で、[ZipArchive::unchangeName()](http://php.net/manual/ja/ziparchive.unchangename.php) のテストを追加
- PHP TestFest 2017 で追加された奴の取り込み

## mbniebergall: Add test for date_time_immutable invalid arguments
- https://github.com/php/php-src/commit/1253a689260daca646d4f0de432a9da633db7dfd
- [7.4~]
- ext/date で、[date_create_immutable()](http://php.net/manual/ja/function.date-create-immutable.php) の無効引数のテストを追加
- PHP TestFest 2017 で追加された奴の取り込み

## MarkBaker: Tests for __set_state magic method
- https://github.com/php/php-src/commit/31b2dcb26ccf00e1e3300f98892c62f3913ce651
- [7.4~]
- ext/date で、 [DateTime](http://php.net/manual/ja/class.datetime.php)、 [DateTimeImmutable](http://php.net/manual/ja/class.datetimeimmutable.php)、[DateTimeZone](http://php.net/manual/ja/class.datetimezone.php)、[DatePeriod](http://php.net/manual/ja/class.dateperiod.php) の __set_state() マジックメソッドのテストを追加
- PHP TestFest 2017 で追加された奴の取り込み

## petk: Fix failing readline() basic test
- https://github.com/php/php-src/commit/4ae5691a60a4aaae86776205b3e938a8fecc66a7
- [7.4~]
- ext/readline で、[昨日足したテスト](https://qiita.com/sj-i/items/5bb9a7e7d8fe4228da60#joelclermont-readline---add-basic-test)の期待出力を修正
- 環境によって結果が異なっていたみたい

## petk: Fix failing tests
- https://github.com/php/php-src/commit/650a217b0ca609119ba8f6dae501c3e8eae8bd35
- [7.4~]
- [ZipArchive::unchangeIndex()](https://qiita.com/drafts/51b2af73a5b43bd796b6/edit#flow-control-added-basic-test-for-ziparchiveunchangeindex) と [ZipArchive::unchangeName()](https://qiita.com/drafts/51b2af73a5b43bd796b6/edit#flow-control-added-basic-test-for-ziparchiveunchangename) のテストがこけていたのを修正
- 一時ファイルの削除処理を CLEAN へ移動してる

## guilliamxavier: Delete duplicate test file
- https://github.com/php/php-src/commit/3dd2abe3e61a266f80f477f93261b4528edcdffa
- [7.4~]
- 重複するテストを削除
Powershell Regular Expression 返信~改行の連続を切る正規表現 ^title ...Enter multiple

#前提
以下の文字列を返信～改行ごとに切る
返信先は含まれる
Dドライブのルートにテキストファイルで出力する

```powershell
$str = @"
返信  1/23(水) 12:24
返信先:

ice

返信 1/23(水) 12:24
返信先:教えて
おじちゃん \CE@a

返信  1/23(水)  12:24
返信先:@t 無い
T☮️@mo

返信 
返信先:@_A他1人 そういうことをには

か@Yk

返信 1/23(水)  12:24
返信先:@t べき
い@b

"@
$rex = New-Object regex "^返信[^先].*\s.*?[\s.*?]{1,}\s.*?\s\s$",("Multiline","IgnoreCase")
$ret=$rex.Matches($str);$ret.Count;$ret[0].Groups.Count
$ret[0].Value -replace("\<.*?\>","")
if($ret.Count -gt 0 ){
$sFullPath = (Join-path $folder ((Get-Date -f s) -replace '[-T:]','')) ;
$sFullPath =$sFullPath + '.txt'
$ret | foreach{ $_.value  | Out-File $sFullPath -Append -Encoding "utf8"}}
```
#ポイント
##MultilineオプションはNew-Objectでつける
そうでないとエラーになるらしい
##改行が複数ある場合は繰り返し記号が効かない部分が出る
`[.*?\s.*?\s]{1,}`は冗長性を確保する
そうしないと
```
返信 
返信先:@_A他1人 そういうことをには

か@Yk
```
こういう場合が完全に拾えない。

#このロジックは
ある文字から始まるが、同様の文字では切らず、末尾が若干揺れていても吸収する、ということになる正規表現である。

#参考
[Windows PowerShell　初心者プログラミング](http://excel.wp.xdomain.jp/?p=88)
`Select-String`を使って行単位で取得する。しかし今回は複数行なので使えない。

[regexのMatchメソッド落とし穴 PowerShell Scripting Weblog 2008/02/03](http://winscript.jp/powershell/139)
>うむ…別なオーバーロードにキャストしようとして失敗してるな。どうすればいいんだろう？
>とりあえずオプション使いたかったらコンストラクタ指定ですかねー。

[オンラインで正規表現をテスト](https://qiita.com/ken1ma/items/85d9a35e9a4f18587eeb)
の
https://regex101.com/
wemosでmml

#概要

wemosでmml鳴らしてみた。

#配線

出力は、D9を、そのまま。
パソコン用スピーカーで鳴らす。

#写真

![2019-02-11 08.51.13.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/d0866d7a-579c-8455-7363-d81573c2e66b.jpeg)

#波形

![gg.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/cc032557-e942-1649-0eb9-aedde45d3e88.jpeg)

#利用したライブラリー

tiny mml parser

#サンプルコード

```
#include "mml.h"

const byte SND_OUT = 2;

MML mml;
MML_OPTION mmlopt;
char * text = "t110 l8 r4rcf4.ffedcd4.ccr>a<cd4dddfde>a2 r4a<cd4dfg4fef4edd4rcd4rddafg2. r4rcf4.ffedcd4.ccr>a<cd4dddfde>a2 r4a<cd4dfg4fef4edd4rcd4rddafg2.";

const int notes[] = {
	0, 9, 9, 10, 10, 11,  12, 12, 13, 14, 15, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 28, 29, 31,
	33, 35, 37, 39, 41, 44, 46, 49, 52, 55, 58, 62, 65, 69, 73, 78, 82, 87, 93, 98, 104, 110, 117, 124,
	131, 139, 147, 156, 165, 175, 185, 196, 208, 220, 233, 247, 262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494,
	523, 554, 587, 622, 659, 699, 740, 784, 831, 880, 932, 988, 1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976,
	2093, 2218, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951,
	4186, 4435, 4699, 4978, 5274, 5587, 5920, 6272, 6645, 7040, 7459, 7902,
	8372, 8870, 9397, 9956, 10548, 11175, 11840, 12544
};

static void mml_callback(MML_INFO * p, void * extobj)
{
	switch (p->type)
	{
	case MML_TYPE_NOTE:
	{
		MML_ARGS_NOTE * args = &(p->args.note);
		snd(notes[args->number], args->ticks * 2);
	}
	break;
	case MML_TYPE_REST:
	{
		MML_ARGS_REST * args = &(p->args.rest);
		delay(args->ticks);
	}
	break;
	}
}
void snd(int hz, int ms)
{
	int len = ms / 4 * 3;
	tone(SND_OUT, hz, len);
	delay(ms);
}
void setup()
{
	Serial.begin(115200);
	mml_init(&mml, mml_callback, 0);
	MML_OPTION_INITIALIZER_DEFAULT(&mmlopt);
	Serial.println("start");
}
void loop()
{
	mml_setup(&mml, &mmlopt, text);
	while (mml_fetch(&mml) == MML_RESULT_OK);
}

```

#動画


https://www.youtube.com/watch?v=E_mPKwX2clw

以上。
Java開発者に送るKotlinのスコープ関数

# スコープ関数とは
Kotlinの標準ライブラリに定義されているジェネリック関数。
ジェネリック関数なので、どんな型にも適用できる関数です。
スコープ関数を使うことで、よりKotlinらしいコードが書けます。

## letとrun
Streamのmap関数のようなイメージです。

```kotlin
val str: String = "5963"

// 変数strをIntに変換する
// letを使った場合
val i: Int = str.let { it.toInt() }

// 変数strをIntに変換する
// runを使った場合
val i2: Int = str.run { this.toInt() }
```

`let`に続くラムダ式は引数が1つです。この引数は`str`への参照です。
`run`に続くラムダ式は引数がありません。代わりに、このラムダ式内のthis参照は`str`です。
ラムダ式の結果が`let`、`run`の戻り値となります。

また、今回の例の変数`str`のような、関数の呼び出されるオブジェクトを**レイシーバーオブジェクト**といいます。

使いどころ

```kotlin
fun getName(): String? = ""
fun makeGreeting(name: String) = "Hello, $name"

fun greet(): String? {
    val name = getName()
    if (name == null) {
        return null
    }

    return makeGreeting(name)
}
```
`greet()`関数では
`getName()`の結果を、`makeGreeting()`関数に渡し、
その結果が`greet()`関数の戻り値となります。

ただし、`getName()`の戻り値はnull許容型なので、一度nullチェックが必要です。
これを、`let`を使って書き換えてみます。

```kotlin
fun greet(): String? {
    return getName()?.let { makeGreeting(it) }
}
```

`getName()`の結果を安全呼び出しを使い、letを呼び出します。
こうすると、かなりスッキリ書けます。
安全呼び出しや、安全キャストの結果を関数の引数に渡す場合に便利です。
(もちろん、それ以外の場合にもよく使われます。)

## applyとalso

letとrunに似ていますが、戻り値は常にレシーバーオブジェクトです。

```kotlin
val str: String = "5963"

// 変数strを標準出力
// alsoを使った場合
val str2: String = str.also { print(it) }

// 変数strを標準出力
// applyを使った場合
val str3: String = str.apply { print(this) }
```

使いどころ

```kotlin
class Person {
    var firstName: String? = null
    var middleName: String? = null
    var lastName: String? = null
}

fun registerNewPerson() : Person {
    val person = Person()
    person.firstName = "久美子"
    person.middleName = "スーザン"
    person.lastName = "山本"
    return person
}
```

`registerNewPerson`関数では、`Person`のインスタンスを新たに作って返します。
`Person`を初期化するだけですが、一旦変数に置かなければなりません。

`also`を使ってみましょう。

```kotlin
fun registerNewPerson() : Person {
    return Person().also {
        it.firstName = "久美子"
        it.middleName = "スーザン"
        it.lastName = "山本"
    }
}
```

`Person`の一時変数を作らずに実装できます。
Builderパターンでは無いオブジェクトを扱う場合などに、
そのオブジェクトの初期化処理がスコープ関数の中にまとまるので、可読性向上につながります。

## with

withはちょっと変わりダネです。
レシーバーオブジェクトを引数で渡す`run` っといったところです。

```kotlin
val str = "5963"
val i: Int = with(str) { this.toInt() }
```

使いどころ

```kotlin
class Greeter {
    fun greet(): String = "Hello, world"
}

fun greet(greeter: Greeter) = with(greeter) { 
    greet()
}
```

withを使って単一式関数にします。
this参照が変わり違った文脈で記述できるようになります。
テンプレートの型推論についてメモしておく

# はじめに
いつものパターンでテンプレートの型推論について何回も忘れるのでメモする。
参考書籍は[Effective Modern C++](https://www.oreilly.co.jp/books/9784873117362/)。

# パターン分け
テンプレートの型推論について、下記関数テンプレートの擬似コードを用いて３パターンに分類。

```C++
template<typename T>
void f(ParamType param);

f(expr); // 実引数exprからTとParamTypeを推論
```

1. ParamTypeが参照 or ポインタ (ユニバーサル参照ではない）
2. ParamTypeがユニバーサル参照
3. ParamTypeが参照でもポインタでもない

## パターン１： ParamTypeが参照 or ポインタ (ユニバーサル参照ではない)
下記条件に従って推論する。

1. exprの参照性は無視される
2. exprの型をParamTypeとパターンマッチングし、Tを決定

```C++
template<typename T>
void f(T& param); // ParamType: T&

int x = 27;
const int cx = x;
const int& rx = x;

f(x);  // f(int& param)      : Tはint
f(cx); // f(const int& param): Tはconst int
f(rx); // f(const int& param): Tはconst int
```

```C++
template<typename T>
void f(const T& param); // ParamType: const T&

int x = 27;
const int cx = x;
const int& rx = x;

f(x);  // f(const int& param): Tはint
f(cx); // f(const int& param): Tはint
f(rx); // f(const int& param): Tはint
```

```C++
template<typename T>
void f(T* param); // ParamType: T*

int x = 27;
const int* px = &x;

f(&x); // f(int* param)      : Tはint
f(px); // f(const int* param): Tはconst int
```

## パターン２： ParamTypがユニバーサル参照
下記条件に従って推論する。

1. exprが左辺値の場合、TもParamTypeは**左辺値参照**と推論
2. exprが右辺値の場合、パターン１の規則を適用

```C++
template<typename T>
void f(T&& param); // ParamType: T&&

int x = 27;
const int cx = x;
const int& rx = x;

f(x);  // f(int& && param) -> f(int& param): 参照の圧縮
       // f(int& param)      : Tはint&

f(cx); // f(const int& && param) -> f(const int& param): 参照の圧縮
       // f(const int& param): Tはconst int&

f(rx); // f(const int& && param) -> f(const int& param): 参照の圧縮
       // f(const int& param): Tはconst int&

f(27); // f(int&& param): Tはint
```

## パターン３： ParamTypeが参照でもポインタでもない
下記条件に従って推論する。

1. exprの参照性は無視される
2. cv型修飾子(const, volatile)も無視される

```C++
template<typename T>
void f(T param); // ParamType: T

int x = 27;
const int cx = x;
const int& rx = x;

f(x);  // f(int param): Tはint
f(cx); // f(int param): Tはint (paramは実引数のコピーなのでconstは付かない)
f(rx); // f(int param): Tはint

const char* const ptr = "const pointer";
f(ptr); // f(const char* param): Tはconst char*
```

実引数が配列の場合はポインタに成り下がる(decay)ので注意。

```C++
template<typename T>
void f(T param); // ParamType: T

const char ary[] = "char array";
f(ary); // f(const char* param): Tはconst char*
```

ただし、ParamTypeが参照の場合は成り下がらない。

```C++
template<typename T>
void f(T& param); // ParamType: T

const char ary[] = "char array";
f(ary); // f(const char (&)[11] param): Tはconst char [11]
```
Windows 10 & WSLで、oh-my-zshが文字化けするとき

# 状況
Windows 10 & WSL環境で、oh-my-zshの左の→などが文字化けするときの対処法

# 手順

- [この記事に](https://medium.com/@slmeng/how-to-install-powerline-fonts-in-windows-b2eedecace58)にしたがって[Powerline fonts](https://github.com/powerline/fonts)をインストールする
- Ubuntuのタイトルバーを右クリックしてPropertiesを選択
- FontでDejaVu Sans Mono for Powerlineを選択

# 参考
https://github.com/Microsoft/WSL/issues/1517#issuecomment-267881827
https://medium.com/@slmeng/how-to-install-powerline-fonts-in-windows-b2eedecace58
#Twitter #API でタイムラインから、メディアの画像URLつきの #Json を得る #python スクリプトの例

#Twitter #API でタイムラインから、メディアの画像URLつきの #Json を得る #python スクリプトの例

# ツイッタランドの森の奥深く‥

画像URLは奥深くに隠されている。
ツイートのURLを与えると、Twitterが勝手に画像を展開する仕様。
画像直接のURLはなか見当たらない。
HTMLソース見てもmedia id さえ見当たらない。なんかJsとかで展開させてるはず。

# ありがとうStackoverflow

>Are you adding tweet_mode=extended on your API call to get the new extended Tweet format?

[No media_url in reslt of statuses/user_timeline for some statuses - REST API - Twitter Developers](https://twittercommunity.com/t/no-media-url-in-reslt-of-statuses-user-timeline-for-some-statuses/74736)

# Script

これで解決！！！！！！

```
  'tweet_mode' : 'extended'
```

```py
import json, config #標準のjsonモジュールとconfig.pyの読み込み
from requests_oauthlib import OAuth1Session #OAuthのライブラリの読み込み

CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS) #認証処理

url = "https://api.twitter.com/1.1/statuses/user_timeline.json" #タイムライン取得エンドポイント

params ={
  'count' : 5,
  'exclude_replies' : True,
  'tweet_mode' : 'extended'

}
res = twitter.get(url, params = params)

if res.status_code == 200: #正常通信出来た場合
    timelines = json.loads(res.text) #レスポンスからタイムラインリストを取得
    for line in timelines: #タイムラインリストをループ処理
        print(line)
else: #正常通信出来なかった場合
    print("Failed: %d" % res.status_code)
```

# とれたよ！

![image](https://user-images.githubusercontent.com/13635059/52542515-c1936800-2de3-11e9-9a58-44ba1b426dd4.png)

# 実物

https://pbs.twimg.com/media/DzCn594U0AAP7-v.jpg

![image](https://user-images.githubusercontent.com/13635059/52542529-fd2e3200-2de3-11e9-8f58-68392e616e5c.png)

# Ref

[PythonでTwitter API を利用していろいろ遊んでみる - Qiita](https://qiita.com/bakira/items/00743d10ec42993f85eb)

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/574








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
関数型アルゴリズムとデータ構造をElmでたのしく学ぼう！

こんにちは！皆さんはアルゴリズムとデータ構造はお好きですか？私は好きになりたいのになれないタイプの人間です・・・。手続き型でアルゴリズムを組んでいると頭がこんがらがりますし競技プログラミングの問題は少し難しくて、ストイックではない自分には厳しい世界です(もちろんハマれる方はどっぷりハマれて、とても楽しそうに見えます！)。

そこで私は**Elm**のチカラを借りてエディタ(ビューワ)を作り可視化することで、たのしくアルゴリズムとデータ構造を学ぶことにしました！今回のテーマは二分探索木」。エディタづくりに入る前はTDDでたのしく[テストコード](https://gist.github.com/ababup1192/09b793c22da3ab972b5b95fd9765e215)を書いたりもしていました。ちょっと工夫した点は、*Search*や*Insert*時にどのようなステップを踏んだかをアニメーションで可視化したり、乱数でツリーを作るということをしてます。以下のリンクで公開しているので是非楽しんでみてください。

https://binary-tree-elm.netlify.com/

![binary-tree.gif](https://qiita-image-store.s3.amazonaws.com/0/48687/b3003729-6ff2-2f3a-d2ae-8820849eade2.gif)

今回のソースコードは[こちら](https://github.com/ababup1192/binary-tree-elm)になります。

是非参考にしてElmでアルゴリズムライフを楽しんでみてください。デザインやアルゴリズム改善のPRも楽しみに待ってます。これからもいろんなデータ構造を可視化していきたいですね！
PCをプロキシにしてオフライン環境のサーバーでapt-getする

インターネットに繋がらないオフライン環境のサーバーと、その環境に接続する作業用のインターネットに繋がるPCがあるときに、PCをフォワードプロキシにしてオフライン環境のサーバーで`apt-get`をする方法のメモ。

## Nginxでフォワードプロキシ

（追記）
Nginxは`CONNECT`をサポートしておらず、HTTPSのプロキシができないっぽかったので、Squidに変更。後述。

HomebrewでNginxをインストールする。

```shell
brew install nginx
```

設定ファイルを編集して、`3128`ポートをプロキシとしてListenさせる。

```nginx:/usr/local/etc/nginx/nginx.conf
（省略）
    server {
        listen       3128;
        resolver     8.8.8.8;

        location / {
            proxy_pass $scheme://$http_host$request_uri;
        }
    }
（省略）
```

Nginxを起動する。

```shell
# サービスとして起動する場合
brew services start nginx
# 普通に起動する場合
nginx
```

## Squidでフォワードプロキシ

HomebrewでSquidをインストールする。

```shell
brew install squid
```

設定ファイルは`/usr/local/etc/squid.conf`だがデフォルトのままでよい。

Squidを起動する。

```shell
# サービスとして起動する場合
brew services start squid
# 普通に起動する場合
squid
```

## SSHポートフォワード

リモートサーバーに接続し、SSHポートフォワーディングでリモートの`3128`ポートをローカルの`3128`ポートに転送する。

```shell
ssh -R 3128:localhost:3128 user@remote
```

`apt-get`の場合は、環境変数でプロキシを有効にできる。

```shell
export http_proxy="http://localhost:3128/"
export https_proxy=$http_proxy
```

以上でオフライン環境からプロキシを使って`apt-get`が可能。

```shell-session
# apt-get update
Hit:1 https://download.docker.com/linux/ubuntu xenial InRelease
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Hit:3 http://archive.ubuntu.com/ubuntu xenial InRelease
Get:4 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
Get:5 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
Fetched 325 kB in 2s (150 kB/s)
Reading package lists... Done
#
```

## 補足

`sudo`で`apt-get`を実行する場合は環境変数が引き継がれないので、環境変数を引き継ぐように`sudo`のオプションで`-E`を使う。

`apt-get`ではなく`apt`の場合は環境変数ではなく、`/etc/apt/apt.conf`にプロキシ設定をする。

```
Acquire::http::Proxy "http://localhost:3128/";
Acquire::https::Proxy "http://localhost:3128/";
```

## 参考

- [てるブログ—MacBook に nginx でフォワードプロキシを立てておくと何かと便利](https://blog.kteru.net/mac-nginx-forwardproxy/)
- [proxy環境下の設定（ubuntu 14.04)](https://qiita.com/showsuzu/items/9ee031208d38ff8ac889)
- [sshポートフォワーディング](https://qiita.com/mechamogera/items/b1bb9130273deb9426f5)
- [3分で Mac OS X に squid プロキシをたてる ](http://tofu.hatenadiary.com/entry/2017/03/14/squid-on-mac-osx)
Ubuntu 18.04 DesktopのGUIでブリッジを作る

# ブリッジを作るGUIが無い
画面右上のネットワークアイコンから設定しようと思ったら、簡略化されたGUIになっており、複雑な設定ができない。

# nm-connection-editor
[こちら](https://askubuntu.com/questions/1098193/network-manager-gui-missing-in-ubuntu-18-04)によると、`nm-connection-editor`というのがある。
実行したらグレーアウトばかりで編集できなかったので、

```
$ sudo nm-connection-editor
```

したら、複雑な設定もできた。

# 宿題
`nmcli`で、CLIによる設定もできるようだ。
ブロックチェーンのトランザクション

ブロックチェーンを理解する前にブロックに含まれるトランザクション（Tx）について、理解する必要がある。
技術としてはラップされているので知らなくてもブロックチェーンプラットフォームは利用できるが、
分かっていたほうがどのようにブロックが積まれていくか、
ブロックの中に何が入っているか分かるのでPoCしやすい
今回はビットコインを例にトランザクションを理解する

## 前提知識
公開鍵暗号化方式をある程度知っていること
（参考）https://qiita.com/nkmk1215/items/f45ecf7c27520cbff673


## トランザクションについて
取引情報のこと。
1つのブロックに複数含まれている。
既にブロックに格納されている取引情報の参照情報と誰にいくら送金するかの情報から成り立つ。

主な取引データの構成は以下
![トランザクション.png](https://qiita-image-store.s3.amazonaws.com/0/242897/a0e57208-26d5-4c1f-b3d1-1be6b2265a52.png)

### インプット情報
#### 前Txのダイジェスト
新しいTxを生成するにあたり、元となるUTXO（unspent transaction output）をハッシュ化した値
※UTXO：承認されたTx（ブロックに格納されたTx）のうち、後続のTxがまだ存在しないTx
#### Tx生成者の公開鍵
Tx生成者が公開している鍵（≒ウォレット）
#### 仮Txの署名
「前Txのダイジェスト」「送金額」「送金先の公開鍵ダイジェスト」の情報を
ハッシュ化した値にTx生成者の秘密鍵で暗号化した値

### アウトプット情報
#### 送金額
Tx生成者がUTXOの送金額未満で設定する値
UTXOとの差額が取引手数料となる

#### 出金先ユーザーの公開鍵ダイジェスト
UTXOを受け取る相手の公開鍵をハッシュ化した値

### 生成方法
生成の流れは以下
![トランザクション生成.png](https://qiita-image-store.s3.amazonaws.com/0/242897/aba4a9d5-e9c8-8924-51b3-2ef4b794f4ac.png)


1. 前Txのダイジェストを仮Txにセット
2. Tx生成者の公開鍵ダイジェストを仮Txにセット
3. 出金額を仮Txにセット
4. 送金先の公開鍵ダイジェストを仮Txにセット
5. 仮Txをダブルハッシュ化
6. ダブルハッシュ化した値にTx生成者の秘密鍵で暗号化し、仮Txの署名を生成
7. 仮Txの署名を含めた5つをTxとして、ネットワークに流す

### Txの検証方法
#### Txが改ざんされていないことを確認
![トランザクション検証①.png](https://qiita-image-store.s3.amazonaws.com/0/242897/5480da8c-5cd2-9af8-59a0-b983b737d0cc.png)

1-1. Tx生成者の公開鍵をハッシュ化し、仮Txを生成する
1-2. 生成した仮Txのダブルハッシュ化した値と署名から復号したハッシュ値を比較し同値であることを確認する

⇒Tx生成者が署名した時点とTxの内容に差異はない＝改ざんされていないと言える

#### 前Txの所有者がTxを生成していることを確認する
![トランザクション検証②.png](https://qiita-image-store.s3.amazonaws.com/0/242897/d12e2922-0a50-9d71-a994-ea7cb53a7ced.png)

2-1. Tx生成者の公開鍵をハッシュ化し、ダイジェスト化
2-2. 前Txのダイジェストから前Txを特定し、出金先ユーザーの公開鍵ダイジェストと比較し、同値であることを確認する

⇒Tx生成者の公開鍵は前Txで送金先に指定された公開鍵と同じ＝Tx生成者と前Txの所有者は同じ

※検証内容は他にもある。

## まとめ
ブロックの中身については別途まとめたい。
My Ergo42 Towel Keymap


昨年末に自作キーボードブームに触発されてErgo42Towelを購入・組立しました。しばらくはdefaultレイアウトで使っていたのですが、やはりもっと親指側にキーを集めて小指の負担を減らしたいなと思うようになり、Keymapを作成しました。

# TL;DR :page_facing_up:
- Ergo42用のkeymap考えたよ
    - https://github.com/yo-C-ta/Ergo42Keymap
- Firmware buildはWinよりもMacでやったほうが楽だよ
- 101/102 keyboard 設定はWin7でやるとレジストリ編集が必要だよ


# ぼくのかんがえた~~さいきょうの~~Keymap :keyboard:

## 基本レイヤー
アルファベットと ; , . / あたり（左右ともに中央５列３行）はすんなりと決まりました。左手最左列も市販キーボードと同じ（1つ足りない気もしますが）。右手最右列はbackspaceとdeleteを両方置きたかったのでこの形にしました。Editor上でマルチカーソル選択して各行頭にprefixを付けたりすることがままあるのでワンキーで移動できるHome / Endもよく使います。

最下行は暫定で、より使うキーが出てきたら差し替えます。Winでrenameすることが多いのでF2がいます。

![べーすレイヤー](https://raw.githubusercontent.com/yo-C-ta/Ergo42Keymap/master/layoutimg/base.png)

## メタレイヤー

これまでテンキー付のキーボードを使用していたこともあり、数字の配列にこだわりました。職番や数値の入力に重宝しています。一方でfunctionキーたちが押し出されてしまいなかなか慣れません…

![めたレイヤー](https://raw.githubusercontent.com/yo-C-ta/Ergo42Keymap/master/layoutimg/meta.png)

## シンボルレイヤー

「記号を効率よく使えるのは101/102キーボード配列だよ」とゴーストが囁くので、最上列の記号はMETA + SHIFTキー押下時と同じにしました。単にJIS配列の ( ) の位置が気に入らなかっただけです。
後は " ' ` あたりを集めてwinには欠かせない \ を一等地に置きました。

![しんぼるレイヤー](https://raw.githubusercontent.com/yo-C-ta/Ergo42Keymap/master/layoutimg/symb.png)

# Firmware ビルドと書き込み :tools:

Winの場合、MSYS2が必要になります。
また、インストール時にいろいろと聞かれるので面倒でした。
僕の場合、ビルドはできるようになりましたが、書き込み時のリセットボタンを検知できず書き込めませんでした…

Macでは、下記を参考にさせていただきました。
特に何も聞かれることなくビルドまででき、無事にリセットボタンを検知・書き込みもできました。
http://www.urong-answer.org/2018/08/changed-keymap-for-mint60/


# Win7での101/102キーボード認識 :frowning2:

ggrとまずヒットするのがデバイスマネージャでドライバを変更する方法ですが、結果ドライバが適合せず効果なし。
おそらく既製品であればうまくいくでしょう。
最終的に行き着いたのがレジストリを変更する方法でした。
http://blog.heiichi.com/?eid=792239
簡単には戻せないし不便ですね…

# Win10での101/102キーボード認識 :blush:

ここに記載の方法で特に何の問題もなく変更できたように思います。
https://qiita.com/shimizu14/items/000cceb9e72a492b9176
特にレジストリ等の変更も不要でした。

# かな/英数切り替え :a:

上記レイアウトで察しがつくかと思いますが、MacのJISキーボードのように、変換/無変換でこれをやろうと考えていました。
が、101/102キーボードには変換/無変換キーが存在しません。
キーがあれば認識するだろうくらいに考えていたのですが、現実はそんなに甘くないのです。

しばらく英数字のみを駆使してネットの海をで漂い、下記の記事にたどり着きました。
https://qiita.com/euxn23/items/c78c40869e4870690910
ページ下部で紹介されている
https://github.com/euxn23/ahk-henk-mhen
神ツールですね！

やっぱり先人は偉大でした。

# keymapお絵かきツール :paintbrush: 

上記画像の作成に
http://www.keyboard-layout-editor.com/
を使用しました。
簡単にきれいなレイアウト画像が作れて楽しい。

# まとめ :coffee:

セパレートキーボードを使い始めてからいろいろな"癖"に気づきました。もともと左手が利き手なこともあり、結構広い範囲を左手でカバーしていたようです。右手の仕事が増えて左脳が活性化したような気がしなくもないですが、右手は今でも攣りそうになります。

このKeymapで使い始めてまだひと月もたっていないため、まだまだ不満が出てくると思います。どんどん使いこんで「ぼくのかんがえたさいきょうのきーまっぷ」をみつけようとおもいます。打ち消し線をだすためのチルダがどこかわからないようではまだまだ道のりは遠い…
vscode上でtypescriptのeslintを有効にする

VSCode の Eslint プラグインはデフォルトの状態だと`.js`,`.jsx`ファイルにしか反応しない。

いざ`typescript`を導入すると、cli上ではうまく動くが、エディタ上で赤く表示されないのでどこにエラーが起きているかがわかりにくい。

なので、eslintの設定で`.ts`,`.tsx`も表示してくれる様に設定を変更する必要がある。

以下の設定をVSCodeの設定に追加する。

```.vscode/settings.json
{
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    { "language": "typescript", "autoFix": true },
    { "language": "typescriptreact", "autoFix": true }
  ]
}
```

デフォルトでは `["javascript","javascriptreact"]`となっている。
`typescript`を追加すれば`.ts`ファイル、`typescriptreact`を追加すれば`.tsx`ファイルにVSCodeのEslintが反応するようになる。
`autoFix`を true にすれば自動整形も効くようになる。

VSCodeをリロードすれば、Eslintが真っ赤に怒ってくれる。

![Screenshot 2019-02-11 08.49.05.png](https://qiita-image-store.s3.amazonaws.com/0/167299/6f7766eb-f8c4-f89e-ae10-b69baa82066e.png)
WebPに関する10の誤解〜5分で学ぶWebP

「WebPって聞いたことはあるけど…」という方に向けてまとめてみました！

# 1. ウェブピーと読む → ✖️

標準的な発音は**ウェッピー (Weppy)**とされています。

# 2. Googleの商用技術である → ✖️

BSDライセンスに基づくオープンソースプロジェクトです。
https://github.com/webmproject/libwebp

# 3. Chromeしか対応していない → ✖️

2018年の後半から2019年にかけてMicrosoft EdgeとFirefoxが新たに対応しました。

![Can_I_use____Support_tables_for_HTML5__CSS3__etc.png](https://qiita-image-store.s3.amazonaws.com/0/35178/a8e90420-9295-66f2-2c23-e968356c91c6.png)
https://caniuse.com/#feat=webp (2019年2月)

Androidももちろん対応済みです。4.2からの正式対応なので、いま出回っている端末はほぼすべてWebPを表示できます。

あとは**Safari(iPhone含む)のみ対応待ち**という状況です。
ちなみにIEは非対応で、Operaは以前から対応しています。

# 4. まだ普及していない → △

**世界的には約72%**のユーザーがWebPを閲覧できるとされています(2019年2月現在)。
一方、**日本国内では約35%**に留まっています。これは日本でのiPhoneシェアの高さによるものです。
![Can_I_use____Support_tables_for_HTML5__CSS3__etc.png](https://qiita-image-store.s3.amazonaws.com/0/35178/3e81d90d-8169-1464-5529-e62add8936b7.png)
https://caniuse.com/#feat=webp

ウェブサイト側として[楽天市場](https://www.rakuten.co.jp/)や[GAP](https://www.gap.co.jp/)、[ディノス](https://www.dinos.co.jp/)でWebPの利用が見られます。
まだ対応の必要なしと思うか、**A/Bテストのチャンス**と思うかはあなた次第！

# 5. SEOには無関係である → △

WebP対応と検索順位との関係はわかりませんが、**[PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/)のスコアが高い確率で上がり**ます。
自社のサイトは上がりました。

これはPageSpeed insightsの内部ロジックである[Lighthouse](https://developers.google.com/web/tools/lighthouse/)にの**次世代画像フォーマットへの対応(Serve images in next-gen formats)**という監査項目があるためです。

例えばWebP対応済みの[GAP](https://www.gap.co.jp/)はこの項目に合格しており、非対応の[UNIQLO]()では指摘を受けています。
![GAP_Japan_Official_Online_Store｜公式ギャップ通販サイト___Gap.png](https://qiita-image-store.s3.amazonaws.com/0/35178/d17beba3-82c4-4bfb-065f-2400eae32481.png)
![UNIQLO｜ユニクロ公式オンラインストア.png](https://qiita-image-store.s3.amazonaws.com/0/35178/727bd6bb-1580-d3ee-2108-fcc2aa6c2155.png)


# 6. Jpegに代わるフォーマットである → ✖️

**ロスレス(可逆)圧縮モード**があり、**PNGとGIFの代わり**に利用することもできます。
256色のインデックスカラーやアルファチャンネル、アニメーションもサポートしているため、**主流のWeb画像はすべてWebPに置き換え可能**です。

PNGやGIFと比べても高い圧縮性能を持っています。

Webページ上の画像をWebPに変換するとどうなるか、拙作のシミュレータがあるのでお試しください。
**ファイルサイズが半分以下**になるケースも多いです。

WebP導入シミュレータ
https://sim.lightfile.net/webp/

# 7. Jpegより優れたフォーマットである → △

圧縮性能はJpegより高いのですが、表現力には弱点もあります。

* サブサンプリングが4:2:0のみ。**キリッとした輪郭の表現が苦手**
* 解像度の上限が16383×16383
* CMYKカラーモデルに非対応

個人的に[苦手な表現の例](https://qiita.com/miyanaga/items/3e2e581d6d580ca08187)も見つけました。

Web以外にも広く使われているJpegに対し、**Webでの配信に特化して軽量化されたフォーマット**という理解がしっくりきます。
PNGとGIFのロスレス変換では、表現上の弱点はないという認識です。

# 8. 非対応のブラウザは切り捨てないとダメ → ✖️

従来のJpeg、PNG、GIFを基本的には用意しつつ、それらを対応ブラウザにはWebPで配信する**プログレッシブ・エンハンスメント**が可能です。

HTML5のコーディングや、Webサーバーの設定で対応ブラウザと非対応ブラウザへの正確な出し分けができます。
HTML5では`picture`タグ、Webサーバーの設定ではリクエストヘッダ`Accept`を利用します。

# 9. 特別なソフトウェアや高額なサービスが必要 → ✖️

オープンソースの`cwebp`コマンドを使えば、お使いのPCやWebサーバー上でWebPへの変換を行うことができます。
WordPress向けの[EWWW Image Optimizer](https://ja.wordpress.org/plugins/ewww-image-optimizer/)のような無料プラグインもあります。

ApacheやNginxも簡単な設定でWebPの出し分けが可能です。

# 10. WebPに対応するとデザイナーの仕事が増える → ✖️

WebPファイルを手作業で作成するのはあまり現実的ではありません。
CDNの画像プロキシ、アセットパイプライン、バッチ処理、CMSのプラグインなどで自動変換することを強くお勧めします。

picture要素を手書きすることになったらそれは手間かもしれません。CMSなどで自動化しましょう。

---
以上です。

WebP対応は意外と簡単で安全、自動化して手離れがよく、着実な成果を期待できます。
ぜひ使ってみましょう！
ARアプリのCamera Permission取得テンプレート


### はじめに

最近ARKitを使った[AR Cake Divider](https://itunes.apple.com/us/app/ar-cake-divider/id1450383292)というアプリをリリースしました。しかし、初回のリリース時に[Apple Human Interface GuidelinesのResuesting Permission](https://developer.apple.com/design/human-interface-guidelines/ios/app-architecture/requesting-permission/)(以下AHIG)に準拠していないという事でリジェクトを受けました。ARアプリを作る上でCamera Permissionは必須になりますが、XcodeのデフォルトARプロジェクトではAHIGに準拠した形のパーミッション要求を出してくれません。
アプリ作成の度に修正をするのは面倒なので[テンプレートプロジェクト](https://github.com/nob3rise/ARCameraPermissionTemplate)を作成してGitHubで公開しました。

### AHIGのResuesting Permissionの要点

1. アプリは位置情報や連絡先などの情報へのアクセスを、ユーザーがコントロールできる様にするべき
- 情報へのアクセス要求はユーザにとって、明らかにアプリがその情報が必要だとわかるときに行うべき
- アクセス要求時にシステムから表示されるダイアログには、短く明快になぜアプリはその情報が必要なのか書くべき

この中でどれも重要なのですが、2番目は「アプリがその情報にアクセスできなければ動作できないのであれば、ちゃんと要求を出さなければいけない」ということも意味しています。

具体的には、例えばあるカメラアプリが起動時にカメラを起動させるとして、起動前にパーミッション要求を行ったとします。
一度ユーザが「許可しない」を選択したとして、その後アプリを再起動させました。
そのときアプリは一度パーミッション取得できなかったため、再び要求を出さずそのまま状態だったとします。

これはアプリがその情報が必要なときに要求を行っていないとみなされます。アプリがその情報にアクセスできなければ動作できないのであれば、再度要求を出すことが求められます。

### テンプレートプロジェクトのポイント

以上の点を踏まえてテンプレートプロジェクトでは次の機能を実装しています。

1. アプリは初回起動時に自分がCamera Permissionを持っているか確認する  
   ⇨``` let cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: .video) ```

2. 初回起動時の判定に基づいて、アプリがForegroundになったタイミングで
	- Camera Permissionを持っていなければ要求を出す⇨  ``` requestCameraPermission() ```
	- Camera Permissionをユーザに断られていたら、アプリの動作に必要な旨のダイアログを表示し、設定アプリへ誘導する⇨ ```alertCameraAccessNeeded() ```


   そのために、UIApplication.willEnterForegroundNotificationを監視する。
   ⇨```NotificationCenter.default.addObserver(self, selector: #selector(checkPermission), name: UIApplication.willEnterForegroundNotification, object: nil)```
   

3. ユーザが理解し易い様にダイアログのメッセージは国際化する  
    ⇨ InfoPlist.strings、Localizable.strings

### スクリーンショット
初回起動時のダイアログ
![B.png](https://qiita-image-store.s3.amazonaws.com/0/200963/861abe2d-c8e3-8392-cacb-8a785b214184.png "B.png")

「許可しない」を選択した後に再起動した時のダイアログ
![A.png](https://qiita-image-store.s3.amazonaws.com/0/200963/9203986f-d7d0-b29e-c642-18c848209e72.png "A.png")
Python + Djangoで開発環境構築して、vscodeでimportできることを確認することまで出来たのでメモ（python3.7.2 + Django2.1.5）

メモ程度なのであしからず

【環境】
macOS Mojava 10.14.2
※ubuntu18.04LTSをマウントした仮想サーバーで実施しているので、使用してるパソコンはwindowsでもあまり変わらないかと。

【前提】
pyenv, virtualenvをインストール済み かつ 使用方法をわかっていること。

■virtualenvで仮想環境を作成
`pyenv virtualenv 3.7.2 python_test`
`pyenv versions` で仮想環境「python_test」が作成されていることを確認

<img width="570" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/357470/38de871f-c745-e165-17a3-53128d8463be.png">

■仮想環境を適用するフォルダを作成
・まず、適当にフォルダを作成します。（任意の場所に作成してください）
<img width="570" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/357470/eda066e1-80e4-0847-9b12-7792d122f0ce.png">

・作成したフォルダに移動して、さきほど作成した仮想環境を適用する
`pyenv local python_test`
<img width="570" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/357470/eab59519-bb49-8ad9-f26a-06c95a623ea2.png">
※先頭に（仮想環境名）がついていれば、適用されてます。

■仮想環境にDjangoをインストールする
・まずDjangoがインストールされていないことを確認
`pip freeze -l`
<img width="570" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/357470/66013160-9ac3-72bf-0f92-d002ad753b57.png">
※何も表示されてないので、まだDjangoはインストールされていません。

・Djangoをインストールする（最新のバージョンは各自調べてください。とりあえず2.1.5でいきます）
`pip install django==2.1.5`
<img width="570" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/357470/dbea1bbb-c52b-1abb-e58b-e7c9937d4381.png">

・もう一度`pip freeze -l`で確認してみます
<img width="570" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/357470/eb464e27-5c2b-6490-1a53-1a36aa051e4b.png">

仮想環境にDjango2.1.5をインストールできました。

■プロジェクトを作成
・`django-admin startproject test_django_app`
※「test_django_app」の部分は任意の文字列で構いません。
<img width="570" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/357470/c6c6edfe-e28f-842a-21d9-5a326d75553a.png">

■vscodeで適当に.pyファイルを作成してDjangoをimportできることを確認する
・vscode → 「File」 → 「Open Folder」で仮想環境を適用したフォルダを開く
（私の場合、「test_project」）
<img width="764" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/357470/bb161bb8-fb38-de2d-4405-ddfd72098e7e.png">
 
・「New File」で適当にファイルを作成（「test_project.py」としました。）
<img width="764" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/357470/b1ea7d6e-eb26-540c-bbfc-a0a3d9ff4a7d.png">

・Djangoをimport
<img width="764" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/357470/cd862c15-1fd5-c48c-93bd-9cb0cc34e46f.png">


以上です。
No.031【Python】文字列の分割②

![python-logo-master-v3-TM-flattened.png](https://qiita-image-store.s3.amazonaws.com/0/336067/8fb9f6aa-57f7-dc4b-b4bf-a648969d315c.png)

####[前回に引き続き](https://qiita.com/You-Tarin/items/1bafb38f5c0757a7061a)、「文字列の分割」について少し書いていきます。
&emsp;I'll write about the split of strings in python" on this page a little.

###■ 文字列リストの連結
&emsp;Link between sting lists

```
>>> # 文字列のリストを一つの文字列へ連結：文字列メソッドjoin()
>>> # 1.'挿入する文字列'でjoin()メソッドを呼び出す
>>> # 2. 連結する文字列のリストを引数として渡す
>>> 
>>> l = ["one", "two","three"]
>>> 
>>> print(",".join(l))
one,two,three
>>> 
>>> print("\n".join(l))
one
two
three
>>> 
>>> print(" ".join(l))
one two three
>>> 
>>> 
>>> # joinを使わなくても同じ表示結果となる
>>> 
>>> l = ["one", "two","three"]
>>> print(*l, sep=',')
one,two,three
>>> print(*l, sep='\n')
one
two
three
>>> print(*l)
one two three
```

####■ 文字数による分割:スライス
&emsp;Division by the number of characters: Slice


```
>>> # 文字数による分割の場合は、Sliceを使用する
>>> 
>>> s = 'abcdefg'
>>> 
>>> print(s[:3])
abc
>>> 
>>> print(s[3:])
defg
```
```
>>> # タプルとして取得、また変数に代入も可能
>>> 
>>> s_tuple = s[:3], s[3:]
>>> 
>>> print(s_tuple)
('abc', 'defg')
>>> 
>>> print(type(s_tuple))
<class 'tuple'>
>>> 
>>> s_first, s_last = s[:3], s[3:]
>>> 
>>> print(s_first)
abc
>>> 
>>> print(s_last)
defg
```
```
>>> # ３分割することの可能
>>> 
>>> s = 'abcdefghij'
>>> 
>>> s_first, s_second, s_last = s[:3], s[3:6],s[6:]
>>> 
>>> print(s_first)
abc
>>> print(s_second)
def
>>> print(s_last)
ghij
```

```
>>> # 文字数は、組み込み関数len()で取得可能、半分ずつに分割可能
>>> 
>>> s = 'abcdefghij'
>>> 
>>> half = len(s) // 2
>>> 
>>> print(half)
5
>>> 
>>> s_first, s_last = s[:half], s[half:]
>>> 
>>> print(s_first)
abcde
>>> 
>>> print(s_last)
fghij
```

```
>>> # +演算子にて連結が可能
>>> 
>>> s = 'abcdefghij'
>>> 
>>> print(half)
5
>>> s_first, s_last = s[:half], s[half:]
>>> 
>>> print(s_first + s_last)
abcdefghij
```


```
>>> # 負数や大きな数を指定した場合
>>> 
>>> "abcdefg"[-3:]
'efg'
>>> "abcdefg"[-99:]
'abcdefg'
>>> "abcdefg"[99:]
''
>>> "abcdefg"[:99]
'abcdefg'
>>> 
>>> 
>>> # スキップ指定の場合
>>> 
>>> "abcdefg"[::2]
'aceg'
>>> "abcdefg"[1::2]
'bdf'

```

いかがでしたでしょうか？
How was my post?

本記事は、随時に更新していきますので、<br>定期的な購読をよろしくお願いします。
I'll update my blogs at all times.
So, please subscribe my blogs from now on.

本記事について、<br>何か要望等ありましたら、気軽にメッセージをください！
If you have some requests, please leave some messages! by You-Tarin

また、「Qiita」へ投稿した内容は、随時ブログへ移動して行きたいと思いますので、よろしくお願いします。
AIZU ONLINE JUDGEで自分の過去の回答を確認する

My Statusから、
<img width="916" alt="スクリーンショット 2019-02-11 3.22.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/220908/0e877c45-c5d6-8c73-4018-6140e84a2454.png">
統計情報の
<img width="277" alt="スクリーンショット 2019-02-11 3.22.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/220908/fd12e329-22a6-0474-3564-a8b8681b5772.png">
一番下にある表から過去の回答に飛べます。
<img width="607" alt="スクリーンショット 2019-02-11 3.23.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/220908/30fcfeb4-704e-7efa-ddc2-8139bf20cdb7.png">
pigpioのrubyバインディングを作った。

# 置き場
 https://github.com/nak1114/ruby-extension-pigpio
## ドキュメント
 https://nak1114.github.io/ruby-extension-pigpio/Pigpio/IF.html

はい。FileとThread以外の関数をバインドしたところで力尽きました。
今後は暇を見てはrubyらしい使い方が出来るようにラッピングクラス(Pigpio)を作っていきます。（Pigpioって打ちにくいですよね。）
後、Rspecも書かないといけないです。ダミーのpigpioライブラリを作ってラズパイが無くてもRspec出来るように環境を整えたので、あとは120個近い関数のテストを書くだけ。

# きっかけ
rubyの拡張ライブラリの書き方を勉強する必要があったので、どうせならばと実用性のあるブツで勉強しようとつくりました。
おかげさまで、ほぼほぼ習得できたと思います。なので私の習得方法を書いてみたいと思います。

## 習得方法
拡張ライブラリ作成に必要な事は全て [extension_ja](https://docs.ruby-lang.org/en/2.4.0/extension_ja_rdoc.html) に書いてありますが、何も知らない人がここを見ても理解できないと思います。
なので、理解できないなりに流し読みした後、適当にググったサイトを2つ、3つ写経して2時間くらいすると悟りがひらけます。悟りの中身は「ruby本体のCソースを読むべし」です。
悟りがひらけるころには[extension_ja](https://docs.ruby-lang.org/en/2.4.0/extension_ja_rdoc.html)を読んで中身を理解することができるので、これを読みながら自分なりに小さなライブラリを作るのを4時間くらい。
だいたい5，6時間もあれば拡張ライブラリをマスターできると思います。

## 習得できなかったこと
### GCのトリガ
結局`ruby.h`に記載されたどの関数がGCトリガになるのか、最後まで不明でした。深くソースを追うのはちょっと躊躇われるので、ここは雰囲気で作ってます。多分、`RB_GC_GUARD`は多めに入っていると思います。

### Moduleの特異メソッドの第一引数にVALUE selfが必要な理由
クラスメソッドはincludeでクラスのクラスメソッドになるからselfが必要と納得。
特異メソッドはどこにもくっつかないので、selfが参照されることは無い・・・はず。
これは多分全てをオブジェクトとして扱えて言語仕様が美しいという美的感覚かな？。

# さいごに
当初の目的の勉強は達成したので、pigpioのバインディングの方はあまり進捗がなくなります。
なので、使いたいという人は自由に改変してください。PRくれたらコミットします。
config.i18n.fallbacksのメッセージについて

rails 5.2.2をインストールしたら標準出力の最後に以下のメッセージが表示された。

```
HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.

Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.

For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0
```

最近i18nがバージョンアップしたから表示されるようになったのかなと思いきや、現在のバージョンは1.5.3だった。今までずっとメッセージが表示されていたのかな・・・ずっと無視してた・・・。まあ、日本オンリーの私には関係なさそうだし。。。

訳してみる。

```
HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.
```

「注意してね。i18n 1.1でデフォルトロケールを除外するようにフォールバックを変更したよ。」
「だけどその変更が君のアプリをエラーで落とすかもしれないよ。」

うーん。意味がわからない。「除外する」とか、よくわからない。「But」も逆接で訳すと何かおかしい感じ。
とにかく、危ない問題ということだけはわかった。

```
Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.
```

「君のRailsアプリの'config.i18n.fallbacks = true'という設定をチェックしてね。」
「もしI18n (>= 1.1.0) かつ Rails (< 5.2.2) を使っているなら、'config.i18n.fallbacks = [I18n.default_locale]'という設定に変更してね。」
「もし使っていないのなら、君のアプリのフォールバックはI18n 1.1.x（1.1.0以上という意味かな）によってエラーになるよ。」

うーむ。このように訳すと、今回のようにI18n 1.5.3 (>= 1.1.0) かつ Rails 5.2.2 (>= 5.2.2)を使った場合は設定変更するという手段は取れず、エラーを回避できないってことなのかな。それとも5.2.2以上は問題ないのかな。

今まで日本語サイトしか作ってこなかったし、今後も作る予定もないから、個人的にはどうでもいい問題ではある。。。

```
For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0
```

「詳細はこのURLを見てね」
実際に見て見ると、タイトルは以下となっていた。

```
v1.1.0
BREAKING CHANGE: Fallbacks
```

v1.1.0 のリリースノートなのかな。「フォールバックについて、互換性のない変更がある」ということかな。書いてあることはgemインストール時に表示されたものとほぼ同じっぽい。

結局、意味がわからなかったので、[RailsGuide 5.2.2](https://guides.rubyonrails.org/v5.2.2/configuring.html#configuring-i18n) を見てみる。すると、'config.i18n.fallbacks'の書き方として３つあるようだ。

```ruby
# You can set the option to true for using default locale as fallback, like so:
config.i18n.fallbacks = true
# Or you can set an array of locales as fallback, like so:
config.i18n.fallbacks = [:tr, :en]
# Or you can set different fallbacks for locales individually. For example, if you want to use :tr for :az and :de, :en for :da as fallbacks, you can do it, like so:
config.i18n.fallbacks = { az: :tr, da: [:de, :en] }
# or
config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
```

なるほど。I18n (>= 1.1.0)からは１つ目の書き方ができないってことかな。だから２つ目の書き方をしろと。あーそういうことか。以下のメッセージの意味がわかった。。。（再掲）

```
HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
```

「注意してね。i18n 1.1で、デフォルトロケールを設定するという設定は除外されるようにフォールバックを変更したよ。」

でも、結論として、Rails 5.2.2からは問題なく使えるんだよね？ Rails 5.2.2で作成した場合でも、デフォルトで以下のように設定されているから。

```ruby
 72   # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
 73   # the I18n.default_locale when a translation cannot be found).
 74   config.i18n.fallbacks = true
```

ということで、あとで実機確認をしなくては。これまでは全て机上です。
Pythonチートシート

# メソッドが定義されている場所を調べる

```python
import inspect
inspect.getsource(method)
```

from: https://www.lifewithpython.com/2015/10/python-check-functions-source.html


# 実行中に一時停止してオブジェクトの中身を見たい

`pdb`を使う。

```python
import pdb; pdb.set_trace()
```

https://docs.python.org/ja/3/library/pdb.html
【Unity】キャラクターを弾ませる（ARKit）

■環境
⭐️Mac OS Mojave バージョン10.14
⭐️Unity 2018.2.15f1
⭐️Mac Book

<font color="Magenta">キャラクターを弾ませる（ARKit）</font>

実際に動かした動画はこちら↓↓
https://twitter.com/nonnonkapibara/status/1094640606683385856
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">🌻Unity ARKit🌻<br>床を（shadowPlaneMaterialを使って）透明に設定して、<br>🍄ARKit🍄で弾ませてみたよぉ<br>（●＾o＾●）ｖ<br>赤いボールと青いボールはマテリアルの🌟メタリック🌟設定にしてみた。<a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://twitter.com/hashtag/Unity3d?src=hash&amp;ref_src=twsrc%5Etfw">#Unity3d</a> <a href="https://twitter.com/hashtag/ARKit?src=hash&amp;ref_src=twsrc%5Etfw">#ARKit</a> <a href="https://t.co/IL9CDNU6If">pic.twitter.com/IL9CDNU6If</a></p>&mdash; non (@nonnonkapibara) <a href="https://twitter.com/nonnonkapibara/status/1094640606683385856?ref_src=twsrc%5Etfw">2019年2月10日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



<img width="1118" alt="スクリーンショット 2019-02-10 0.56.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/ecb64a94-fee9-511c-e341-8d4d9cd35201.png">

<font color="Magenta">画像が多いとQiitaの容量オーバーで画像が貼り付けられなくなるので</font>
詳細は、「はてなブログ」に記載してます↓
[かぴばらさんの覚書ブログ nonkapibara](https://nonkapibara.hatenablog.com/entry/2019/02/11/024601)

</br>
</br>
非線形関数の最小二乗法の計算方法

ベクトルの微分の計算方法（紙と鉛筆で）を前回書いたので、ここでは、本来の目的であった、最小二乗法の整理について書いてみる。

# 関数の最小化（復習）

ベクトル$x$に対して実数を出力する関数$F(x)$を考える。この関数を最小化したいとする。また、この関数は$x$に関して下に凸であるとする。このとき、ある$x_0$の周りで、

```math
F(\boldsymbol{x}_0+d\boldsymbol{x}) = F(\boldsymbol{x}_0) +  dx^t \boldsymbol{d} + \frac{1}{2} d\boldsymbol{x}^t \boldsymbol{H}(x_0) d\boldsymbol{x} + o(|d\boldsymbol{x}|^2)
```
ここで

```math
\boldsymbol{d}(x) = \frac{d}{dx} F(x) |_{x_0} \\
\boldsymbol{H}(x) = \frac{d}{dx^t}\frac{d}{dx} F(x) |_{x_0}
```
ここで$dx$について傾きが０になるところを探す。$\frac{d}{d(dx)} F(x_0+dx) = 0$より

```math
\boldsymbol{d}+\boldsymbol{H} dx = \boldsymbol{0} 
```
より$d\boldsymbol{x}=-\boldsymbol{H}^{-1}\boldsymbol{d}$であるので、

```math
\boldsymbol{x} \leftarrow \boldsymbol{x} - \boldsymbol{H}^{-1}\boldsymbol{d}
```
を繰り返せばよい。

- 確認

とりあえず例として $f(x)=\sum_{n=1}^N |y_n - x|^2$を考えてみよう。

```math
d(x)=\frac{d}{dx} f(x) = -2\sum_n (y_n - x)\\
H(x)=\frac{d^2}{dxdx} f(x) = 2\sum_n I_N
```

より$x_0$からの更新式は

```math
\boldsymbol{x} \leftarrow \boldsymbol{x}_0 - \frac{1}{2N}\boldsymbol{I} \cdot (-2)\sum_n (\boldsymbol{y}_n - \boldsymbol{x}_0) = \frac{1}{N} \sum_n \boldsymbol{y}_n
```

確かに合っていそう。

# 非線形関数の最小二乗法

そこでベクトルを実数に変換する非線形関数$y=f(x|\theta)$の最小二乗法を考えてみる。今、$l_n (\boldsymbol{\theta})= y_n - f(x_n|\boldsymbol{\theta})$と置き、


```math
F(\boldsymbol{\theta}) = \sum_n l_n^2
```
と置くと

```math
\boldsymbol{d}(\boldsymbol{\theta}) = \sum_n l_n \frac{\partial l_n}{\partial \boldsymbol{\theta}} \\
```

```math
\boldsymbol{H}(\boldsymbol{\theta}) = \sum_n \left[ \left(\frac{\partial l_n}{\partial \boldsymbol{\theta}}\right)^t \left(\frac{\partial l_n}{\partial \boldsymbol{\theta}}\right) + l_n \left(\frac{\partial^2 l_n}{\partial \boldsymbol{\theta}^2}\right) \right]
```
何度も出てくるこの部分は$\frac{\partial}{\partial \theta} l_n = - \frac{\partial}{\partial \theta} f(x_n|\theta)$である。

- １次元で$y_n=x_n+\theta$

    -　$\frac{\partial}{\partial \theta} l_n = -1$である。

- n次元で $y_n = |\boldsymbol{x}_n - \boldsymbol{\theta}|$の場合

    - $\frac{\partial}{\partial \theta} l_n = \frac{\boldsymbol{x}_n - \boldsymbol{\theta}}{|\boldsymbol{x}_n - \boldsymbol{\theta}|}$という単位ベクトルになる。$\boldsymbol{H}$も計算できる。

- n次元ベクトルで $y_n = |\boldsymbol{x}_n - \boldsymbol{\theta}|^2$の場合

　　- も計算できる。

計算できるものはいずれも手元のノートにあるが、書くのが面倒なので省略。
最も素直な定式化だと思うのだが、対応する参考ページでよいものが見つからなかった。orz
インスタンス変数を変更する時は、メソッドの先頭か最後に変更した方がいい

## インスタンス変数の変更は関数の途中でしてはいけない
<pre>
class Xxxx {
    var m_hoge; // 状態を表すメソッドだったりする
    ・・・
    function(){
        m_hoge = a;
        ～いろんな処理～
        m_hoge = xx1;
        ～いろんな処理～
        m_hoge = xx2;
    }
    ・・・
}
</pre>
インスタンス変数がメソッドの「先頭と途中」もしくは「途中と最後」に
変更している処理を見たことはありませんか？

結構経験値が多いプログラマでも普通にやっている事が多い処理なんですが、
このようなコードはバグを呼びやすい、完成度が落ちるコードです

__推奨されないコードパターン__というやつですね

## 変数の意味が不正確になる
<pre>
function(){
    ～いろんな処理～
    xxLabel1->setText(m_nowHp); // ※1
    ～いろんな処理～
    m_nowHp = a; // ※3
    ～いろんな処理～
    xxLabel2->setText(m_nowHp); // ※2
}
</pre>
このように変数名を書けば分かりやすいと思う

1と2の行だけを見れば、
どちらも同じように
「“nowHp(現在のＨＰ)”をテキスト描画する」処理と読めるはずです

しかし3のところでnowHp(現在のＨＰ)を書き換えている処理が存在しているということは、
__1の現在のＨＰと3の現在のＨＰは、同一ではない__ということになります

これは、
__3の処理を読み飛ばしてしまうと__
__1と3の違いに気が付けない__
という現象が発生するということ
ここから高い確率で新しいバグが発生してきます

## 厳密に正しい変数名を
<pre>
function(){
    var preHp = m_nowHp;
    m_nowHp = a;
    ～いろんな処理～
    xxLabel1->setText(m_nowHp);
    ～いろんな処理～
    ～いろんな処理～
    xxLabel2->setText(m_nowHp);
}
</pre>
インスタンス変数は__関数の先頭か最後__でのみ書き換え、関数内のメイン処理中は意味が変わらないようにする
上記以外のタイミングでクラス変数を書き換えると、厳密に正しい変数名ではなくなる
それでも値が欲しいなら、
__一時変数に値をコピー__しておくことで__厳密に正しい変数名を維持__すべきである
Git - originとmasterとは何か(初心者向け)

#originとmasterとは何か

##はじめに

この方の記事が非常に参考になったので試しにやっていたところ

https://qiita.com/fukubaka0825/items/c7710b4e87d478c8ba3b

前々から気になっていたoriginとmasterの部分が引っかかった。

```
git push origin ブランチ名

git pull origin master
```

とは厳密にはどういう意味なのか調べてみました。

理解に間違い等あるかもしれないので、もしあるようでしたらご指摘いただけると嬉しいです

##結論

 - **origin:** デフォルトのリポジトリの場所(URL)の別名
   - イメージ的に分かりやすく言えばgithubのコードの置いてある場 所、
つまりリモートリポジトリ

 - **master:** デフォルトのブランチの名前。メインのブランチ

##概要
gitにはリモートリポジトリと、ローカルリポジトリがあり、それぞれにブランチがある。

つまり、

 - リモートリポジトリ(ブランチA.ブランチB.ブランチC)

 - ローカルリポジトリ(ブランチA.ブランチB.ブランチC)

みたいな関係です。


開発する時にローカルに開発用ブランチを作って、開発者AさんがローカルブランチA、開発者BさんがローカルブランチBで開発するとします。

ローカルリポジトリのブランチの場所はgit checkoutで指定するわけですが、

pushやpullする時は、どのリモートリポジトリのどのブランチなのか対象を指定してあげる必要があるわけです。

つまり

```
git push origin 'ブランチC'
```

は、ローカルリポジトリの今いるブランチの変更を、リモートリポジトリのブランチCにpushするよ！　という意味になり

```
git pull origin master
```

リモートリポジトリのmasterブランチの内容を、ローカルリポジトリの今いるブランチにpullするよ！

という意味になります。


ちなみにoriginもmasterもデフォルトなので、

```
git  pull origin master
git  pull
```
上の２つは同じになります

#### 宣伝
関係ありませんが、個人的な技術ブログ書いてますので興味があればぜひ。
https://k9876.hatenablog.com/
Google ColabでのTPU使い方メモ

各ライブラリで実装する前に, Google Colab のランタイムで TPU を選択する必要があります. 事前に Google Colab メニューバーの Runtime > Change runtime type から Notebook settings を開き,　Hardware accelerator を TPU に変更してください．

以下のサンプルコードでは，簡単な掛け算を TPU を使って実行します．

### Tensorflow

```python
import os

import tensorflow as tf

X = tf.placeholder(tf.int32, [5, ])
Y = tf.placeholder(tf.int32, [5, ])

tpu_ops = tf.contrib.tpu.rewrite(tf.multiply, [X, Y])
tpu_address = "grpc://" + os.environ['COLAB_TPU_ADDR']

with tf.Session(tpu_address) as session:
    try:
        session.run(tf.contrib.tpu.initialize_system())
        result = session.run(tpu_ops, {
            X: [1, 2, 3, 4, 5],
            Y: [2, 3, 4, 5, 6]
        })
        # 結果を出力
        print(result)
    finally:
        session.run(tf.contrib.tpu.shutdown_system())
```



### Keras

```python
import os

import numpy as np
import tensorflow as tf

X = tf.keras.Input([5, ])
Y = tf.keras.Input([5, ])

outputs = tf.keras.layers.Multiply()([X, Y])
model = tf.keras.Model([X, Y], outputs)

tpu_address = "grpc://" + os.environ['COLAB_TPU_ADDR']
storategy = tf.contrib.tpu.TPUDistributionStrategy(
    tf.contrib.cluster_resolver.TPUClusterResolver(tpu_address))

tpu_model = tf.contrib.tpu.keras_to_tpu_model(model, storategy)
result = tpu_model.call([
    np.array([1, 2, 3, 4, 5]),
    np.array([2, 3, 4, 5, 6])
])
# 結果を出力
print(result)

tf.contrib.tpu.shutdown_system()
```
【Unity】キャラクターを弾ませる

環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️Unity 2018.2.15f1

<font color="Magenta">キャラクターを弾ませる</font>

実際に動かした動画はこちら↓↓
https://twitter.com/nonnonkapibara/status/1094639157761036288
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">BlenderからUnityへキャラクターを取り込んで<br>❤️マテリアル🧡をいろいろ変更してみたよぉ。<br>そしてUnityで✨弾ませてみた✨<br>（=＾0＾=）ｖ<a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://twitter.com/hashtag/Unity3d?src=hash&amp;ref_src=twsrc%5Etfw">#Unity3d</a> <a href="https://t.co/uPNPiD19I3">pic.twitter.com/uPNPiD19I3</a></p>&mdash; non (@nonnonkapibara) <a href="https://twitter.com/nonnonkapibara/status/1094639157761036288?ref_src=twsrc%5Etfw">2019年2月10日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<img width="1072" alt="スクリーンショット 2019-02-09 18.24.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/7c0da79e-08fd-c441-ae80-c65f21656849.png">

<font color="Magenta">画像が多いとQiitaの容量オーバーで画像が貼り付けられなくなるので</font>
詳細は、「はてなブログ」に記載してます↓
[かぴばらさんの覚書ブログ nonkapibara](https://nonkapibara.hatenablog.com/entry/2019/02/11/021107)

</br>
</br>
dockerで作った環境(nginx+php-fpm+mysql)にLaravelを入れたときの設定メモ


nignxとphp-fpmとmysqlの連携環境をdocker-composeで構築済。しかし、nginxの設定が足りていないので設定を修正する必要がある。

#前提

nginxはド素人。PHP(Laravel)の環境を作る必要があり、使ったことが無いnginxで動かしてみようという軽いノリで始めたメモ。

[(dockerで)nginxに関するメモ](https://qiita.com/niibori/items/a68e41a695fd1b1b80a1)、[(dockerで)php-fpmに関するメモ](https://qiita.com/niibori/items/79a4141d4d557897c356)、[(dockerで)mysqlに関するメモ](https://qiita.com/niibori/items/1b8df3c091fde4683388)、[(dockerで作った環境に)Laravelプロジェクトを設置したメモ](https://qiita.com/niibori/items/5629a52e6d6767476de5)。


#./docker/nginx.conf
```conf:nginx.conf(一部)
...
    location /projLaravel/public {
        try_files $uri $uri/ /projLaravel/public/index.php?$query_string;
    }
...
```

通常は **/projLaravel/public** をドキュメントルートにするんだろうけど今回は敢えてしない。重要なのは、 **Laravelのプロジェクトでは全てのアクセスを index.php(フロントコントローラ)に集めなければならない** と言うこと。 Apacheの場合は.htaccessで行っている。

この設定についてはLaravelのインストール手順を見ると載っている。
MySQLでUTF-8に/etc/my.cnfがない

# MySQLで文字コードをUTF-8にする

- MySQL　5.7

MySQLの文字コードをUTF-8にしたいとき求めていたファイルがなかったことがあったので
忘れないようにメモ程度に残しておきます。
他の方の助けになれば嬉しいです。

## UTF-8にする

`/etc/my.cnf`
がなかった時は

`/etc/mysql/my.cnf`
を編集しましょう。

``` /etc/mysq/my.cnf
[mysqld]
character-set-server=utf8 

[client]
default-character-set=utf8 
```
上記の文字を追加してください。

``` 
再起動
/etc/init.d/mysqld restart
```

## 確認する

MySQLに入ってお馴染みの確認コマンドを打ちます。

```
show variables like "chara%";
```

UTF-8になっていたら完了です。
お疲れ様でした。

## 参考

https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a


---

閲覧していただき、ありがとうございました。
【ご教示ください！】Twitter Publish で作成される投稿内容を改行する方法

# 自作のRailsアプリで投稿した内容をTwitterでシェアしたい！
現在プログラミングスクールに通っている者ですが、スクールの課題で作成したアプリにTwitterシェア機能を加えたいと考えています。

そんな中、URLをHTMLに書くだけで簡単にTwitterシェアボタンが作成できる「Twitter　Publish」なるものに出会いました。

[Twitter Publish](https://publish.twitter.com/#)

参考文献に記載している記事を拝見し、エンコードとやらも行い「いざ呟かん！」とページ内に追加されたシェアボタンをクリックすると、、、<img width="682" alt="スクリーンショット 2019-02-11 1.44.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/329934/398c8f1a-c896-44c9-b961-0ad1b8f41399.png">
ま、まぁこれを投稿してタイムラインに並ぶと改行されてるのかな？

と不安になりつつ投稿しタイムラインを確認してみると、、、<img width="516" alt="スクリーンショット 2019-02-11 1.47.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/329934/6746f714-8309-7286-2443-a91760ff11df.png">
文字列そのまま、、、
この後も改行のエンコード文字列をいくつか見つけチャレンジしましたが、結局改行は叶っておりません、、、
・&#13;&#10;
・%0a
・%0d%0a
・%0A
この辺りを試していますが結果は変わらず。

RailsのHTMLファイルに記載しているシェアボタンの記述は以下の通りです。
<img width="771" alt="スクリーンショット 2019-02-11 1.57.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/329934/cf3a1d3a-d17f-baa8-75a4-6c33435b9a25.png">

皆さんのお力をお借りし解決したいのでご協力よろしくお願いいたします！

#　参考文献
http://ganablo-games.blogspot.com/2013/11/twitterweb.html

https://whatsupguys.net/programming-school-dive-into-code-learning-71/
LLDBでアドレスからオブジェクトの内容を確認する

例えば、Xcodeの`Debugging View Hierarchies`を使ってデバッグ中に取得したアドレスから、オブジェクトのより詳細な内容を確認したいときなどがあるかと思います。
そこで、Swiftの`unsafeBitCast(_:to:)`を使えば簡単にアドレスからオブジェクトの内容を確認することができます。

LLDBでは以下のようなコマンドで確認できます。

```
(lldb) expr -l Swift -- import UIKit
(lldb) expr -l Swift -- let $label = unsafeBitCast(0x7fac81778d00, to: UILabel.self)
(lldb) expr -l Swift -- print($label.font)
Optional(<UICTFont: 0x7fac81779410> font-family: ".SFUIDisplay-Bold"; font-weight: bold; font-style: normal; font-size: 22.00pt)
```