OmniAICreator/Qiita-1.07M huggingface dataset:
東京だけがキャリア形成の場じゃない、っていう話

**「東京脱出したい」「実力試したい」エンジニアが地方で働きたい理由はさまざま**
東京で、地方移住に興味ある方向けに転職・移住支援をしているsibireといいます。
非エンジニアの立場ながら、エンジニアの皆さんの「転職」に携わっている立場で書かせてもらいます。

今回は日々都内で「地方志向」のエンジニアと対話する中で感じる、年代におけるキャリア志向の分析と、
この先もしも「東京脱出したい」「地方で働きたい」と思ったときに、身につけて置く技術（考え方？）を伝授したいと思います。

#年代別・エンジニア転職のリアル（※超個人的見解）
転職活動をするとき、年代における人生のタイミングがかなり重要になってきます。
ここでは、東京に住みながら「地方で働きたいな」と漠然と考えているエンジニアから、今すぐ地元に帰らなければ、という方まで、日々あっている私たちが感じる、年代別の所感を書かせてもらいます。

**最近のエンジニアの転職志向性分析（ざっくり）**

- 20代前半：とにかく新しいことやりたいよね。イケてる言語でおもしろいサービスをつくりたい。
- 20代後半：年収UPのための転職したい！経験積んでるからヘッドハントされたい。
- 30代前半：やりがいのある仕事がしたい。自分じゃなきゃできない仕事。勝負するラストチャンス？
- 30代後半：家族のために住む場所を検討。仕事も大事だけど、家庭（生活）も大事。
- 40代～：東京で一生働くの？地方に移住もイイかもね

簡単に言うと、地方への漠然とした憧れを抱えた若者たちは、東京で年収UPの転職をしつつ30代を過ごし、40代を迎えたら、ビジネスマンとしての「残り年数」を見つめて、移住の計画が現実化してくるような感覚があります。

##年間200人超の地方への転職希望者と会って、感じること
私たちは、地方で働きたいエンジニアに特化してサービスを展開していて、
地方で働くことに関心のある方にお会いする機会が多くあります。
でも、業界を変えずに働き続けるとなると、年代的に落ち着いてきた40代だとちょっと厳しいかもしれません。
なぜなら地方で採用活動する企業では、
「プレイヤーで活躍しながらマネジメントにも挑戦したい」層の求人ニーズが圧倒的に多く、「仕事にきちんと取り組みながら地方暮らしを楽しんで、なんなら田舎体験を情報発信してほしい（できれば若い視点で」と思う企業が、本当にたくさんあります。

おせっかいながら、もし今移住してエンジニアとして働きたいと考えている方がいれば、アドバイスさせてもらいます。

- 20代：経験者であれば、住みたい場所軸・やりたい仕事軸で地域選びができる
- 30代前半：移住希望者の最多ゾーン。キャリアを生かしたエリア選びも可能
- 30代後半：内定までに時間がかかり始めるタイミング、半年前から活動を

ということで、まとめ。
1.地方で働くことに興味があるなら（移住を伴うなら）、通常の転職の2倍の時間がかかると心得よ
2.現場から離れすぎてしまうと（マネジメントのみなど）なかなか決まりづらい・・
「いつか地方暮らししたい」と思うなら、早めに動いた方が幅広い選択ができると言えそうです。

##”地方って「地方求人」でしょ？”⇒そうでもなくなってきてます
オフショア・ニアショアという言葉は依然としてありますが、最近は、

- 東京じゃできない仕事ができる（地方ならではの文化を生かした開発）
- 東京と同程度の給与をもらいながら働ける

企業も増えている傾向にあります。
私たちが日々、地方で出会っているシビレる企業を一部紹介します

**日本酒をつくりながら開発**
[フランジアジャパン（島根県）](http://www.shimane-itworks.jp/company/580)
農業に興味がある人にはオススメ。希望者は春～秋に米作りをしながら、東京、ベトナムとともに開発業務を行う。

**高知の山奥でAI開発**
[ネクストリーマー（高知県）](http://www.sibire.co.jp/recruit/nextremer)
自然言語処理技術/画像認識技術を取り入れた対話システムを開発するベンチャー企業。
東京とインドに拠点をもち、高知では研究開発を行う。

**牛の発情・疾病検知を人工知能で管理**
[ファームノート（北海道）](http://farmnote.jp/)
東京・高輪台に営業所をもつ、帯広の企業。エリアの特性を生かし、酪農に係りながら働ける。

**徳島県神山町。東京と同程度の給与で働ける**
[プラットイーズ（徳島県）](http://www.sibire.co.jp/offer/plat-ease)
テレビ番組や映像コンテンツの情報に関する業務運用や、放送システムの開発、放送業務運用等を幅広く行う東京・恵比寿を本社にもつ企業。
給与レベルは東京とほぼ同水準。

##おまけ
明日、エンジニアが「移住するなら・・」と選ぶ人気TOP3エリア（たぶん）の合同イベントをやります。
[「地方発IT INNOVATION」](http://www.sibire.co.jp/event/entry2)
![sibire_banner.jpg](https://qiita-image-store.s3.amazonaws.com/0/152531/6b219c03-21b1-1140-9276-f3b95eb60ffd.jpeg)
地方に移住して、エリアの課題を技術力で解決してきているエンジニア3名が、「実際移住してどうなの？」「失敗談・成功談」などを語ります。
気になる方、ぜひ見に来てください。
ディレクター職でもSQLは書けたほうがいいんでは

この記事は[WanoグループAdventCalendar2016](http://qiita.com/advent-calendar/2016/wano-group)の7日目の記事になります。

EDOCODE株式会社では運用しているサービスで蓄積されたデータを活用して日々サービスの質的向上を目指していますが、それを設計する側の人たち（ディレクター職）がSQLを書けるようになると、勉強に費やすコスト以上にメリットがあると考え、エンジニアを先生役に週一回一時間の勉強会を２ヶ月程度行いました。

なぜディレクター職がSQLを書けることにメリットがあるのかを最初に考えたので、それを書き連ねてみます。

##SQLを習得する意義
1. サービスの利用状況のさまざまな視点からの把握
	- 管理画面をいちいち作っているのではスピード感が足りなすぎる。
	- 汎用的だと思ったものは、SQLさえ書ければredashやspreadsheetを使って管理画面風なものが作れるようになる。
2. 戦略立案のための分析
	- 戦略立案には、仮説→検証の繰り返しが必要であり、そのループが自己完結するのは非常に効率的。
	- 時には1ユーザーに降りていって行動を追うといった分析も必要となり、そういったことができるようにもなる。
3. 機能設計のためのシステム把握
	- サービスがどんなデータを持っているのか、何と何はつなげることができるのか、などを把握していたり調べたりすることができれば、新しいコンテンツでも実現可否が判断できるようになる。
	- システムには必ず得手不得手、機能的な限界があるので、リレーショナルデータベースとSQLができることを知っておけば、実現可否が判断できるようになる。
4. エンジニアとのコミュニケーションが円滑化
	- 用語の統一
5. データ抽出業務のダブルチェックが可能に
	- クライアント向けのデータ抽出であれば、ダブルチェック必須にしたい。
6. 業務の効率化
	- データが増えれば増えるほど、CSV＋Excelのような運用は大変さが増していく。SQLで行った方がはるかに効率的。SQLでできることをExcelでやらないようにしていく。

##進め方
データはBigQueryに用意し、学ぶ側でSQL以外の労力はかからないようにしました。

各回は、以下のような内容で進めました。

1. SQLとは・BigQueryの使い方
2. SELECT文の基本
    - SELECT（列）FROM（テーブル）WHERE（条件）
3. WHERE
4. ORDER BYとLIMIT
5. JOIN
6. VIEW
7. 集計関数とGROUP BY
8. サブクエリ
9. キャストと日付関数

それと、毎回勉強会終了後に3問程度、データを抽出するクエリを書く宿題を用意しました。

##結果

JOINやGROUP BYを使った実践的なクエリを一通り使いこなせる人が出てくるようになりましたが、
エンジニアであれば最悪プログラムコードを見て確認する各データ項目の詳細な使い方を、
どうやって効率よく伝えるべきか、今後の課題になったように思います。
Kivy Labelの左寄せ、右寄せについて

## 普通に書くと中央に表示されるKivyのLabel
Kivyで文字を表示する際はLabelを使用します。
なんとなく左上に寄せたい場合は下みたいな感じで書くと思います。

``` test.kv
Label:
    text: root.text
    halign: 'left'
    valign: 'top'
```

実はこれだと左上に寄りません。中央に表示されます。
Labelはsize以外にtext_sizeという表示領域を決めるプロパティを持っており、
halign, valignはtext_size内の位置を決めるプロパティです。

text_sizeが小さいままだと、text_size内でどっちに寄ろうが
text_sizeそのものが中央に表示されてしまって
結局真ん中に文字が表示されます。

## text_sizeを指定しましょう
下のように`text_size: self.size`を指定するとLabelの領域全体が
文字の表示領域となります。
その中で左上に寄せますので、文字が左上に表示されます。

```
Label:
    text_size: self.size       #←追加
    text: root.text
    halign: 'left'
    valign: 'top'
```
Dockerでredisを別コンテナそれぞれ立ち上げlinkして接続してみた時のメモ 

#はじめに
lumenでRedisをつなげようとした時、うまくいかなかったので、
段階を分けて接続を試みようとした時のメモ

公式のRedisイメージ同士でやってみた
というか、公式にそってやっただけ。

#環境
Dockerはインストール済みということで。
foderaでやってます

```
cat /etc/redhat-release
->Fedora release 24 (Twenty Four)
```

#接続してみる
##server側

###起動

```
docker run --name some-redis -d -p 6379:6379 redis redis-server --appendonly yes
```

##client側

###起動

```
docker run -it --link some-redis:redis --rm redis redis-cli -h redis -p 6379
```

###setしてみる
client側をrun後、client側でcliが立ち上がるため、
試しにsetしてみる

```
set abc 123
```

んで、exitする。

##sever側確認

###シェル起動

```
docker exec -it some-redis bash
```

###getしてみる

```
redis-cli
get abc
```

123が出てきたら成功！


#docker-compose編

##とりあえずのヤムル。

```docker-compose.yml
version: '2'
services:
    cache:
        image: redis:latest
        ports:
            - "6379:6379"
        command: redis-server --appendonly yes

```

up

```
docker-compose up -d
```

##ネットワーク確認

```
docker network ls
```
##新しくつくられたやつをコピー(ここでは、redis_defaultだった。)
んで --net=新しく作られたやつを付け加えてクライアント側をrunする

```
docker run -it --net=redis_default --link redis_cache_1:redis --rm redis redis-cli -h redis -p 6379
```

##setする

```
set qqq 111
```

##サーバー側で確認

```
docker exec -it redis_cache_1 bash
redis-cli 
get qqq
```

111が出てきたら成功!


#おわりに
次はlumenチャレンジしてみる

#参考
[redis]
(https://hub.docker.com/_/redis/)
[Redis の永続化]
(http://redis-documentasion-japanese.readthedocs.io/ja/latest/topics/persistence.html)
Amazon Pinpointの日本語による解説

2016-11-30/2016-2016-12-02に行われたAWS re:Invent 2016の[Keynote Day 2で発表されたAmazon Pinpoint](https://aws.amazon.com/about-aws/whats-new/2016/12/introducing-amazon-pinpoint/)について簡単に解説します。

## Amazon Pinpoint

- https://aws.amazon.com/pinpoint/
  - 日本語の情報はなし(2016年12月現在)
- [Amazon Web Services](https://aws.amazon.com/)の1機能


### Concept

- Understand User Behavior
- Create Targeted Campaigns
- Measure Results

## 今日のモバイルユーザのエンゲージメント

- モバイルアプリCPA: 2.74USD (300円)
- リテンション維持が大変＆重要

## 何ができるか

- エンゲージメント計測
- ユーザベースのセグメント
- カスタムメッセージの作成

## PDCA大事

- セグメントとターゲット
- メッセージとエンゲージ
- 改善点の評価
- ユーザ行動の評価

## Amazon Pinpointの機能

- ターゲットされたモバイルプッシュ通知と高速配信
- スケジュールされたキャンペーンや繰り返しのキャンペーン
- キャンペーンとアプリケーション分析
- A/Bテストとホールド・アウトテスト
- Quietタイムとメッセージ制限
- リッチな通知: スタンダード通知とサイレント通知
- カスタムイベントとカスタム属性
- カスタム分析のためのS3自動エクスポート
- セグメント分析とファネル分析

## マーケッターにも優しいUI

デベロッパーだけでなく、マーケッターにも優しい。

- リッチなコンソール体験
- リッチメディア通知の作成
- 動的なユーザセグメンテーション
- A/Bテストとホールドアウトテスト

## デモ

### ユーザ側(デモではiOSアプリ)
- カスタムイベントをPinpoint側に送出できる
- ユーザ属性の設定が可能

### AWSマネジメントコンソール側

グローバルメニューから分かりやすいUIを提供。

- アナリティクス
    - ユーザエンゲージメント
        - DAU
        - ヒートマップ
    - キャンペーン
        - キャンペーンの履歴
        - A/Bテスト
        - 開封率
    - デモグラフィックデータ
        - アプリのプラットフォーム(iOS, Android)（グラフ化）
        - アプリのバージョン（グラフ化）
        - 端末のモデル（グラフ化）
        - 端末のメーカー（グラフ化）
        - カスタム属性（グラフ化）
    - イベント
        - カスタムイベントを可視化
- セグメント
    - 複雑なセグメンテーションを実行し、送信ができる
- キャンペーン
    - 全体送信 or A/Bテスト
    - 即時で送る
    - 時間指定
    - weekly/monthly
- マネジメント
    - 設定など

## スペック

- 100万通/1分間
- 1500カスタムイベント
- 40カスタム属性
- 4分間で100万件の既存データをインポート可能（他のシステムからの移行が可能）

## 価格

低価格で柔軟な価格設定

- $1.00: 100万メッセージ送信
- $1.00: 100万イベント受信
- $0.0012: 1ヶ月ごとのターゲッティッドユーザごと

## まとめ

元々AWSではこれまでも3年以上にわたり[SNS Mobile Push](https://aws.amazon.com/about-aws/whats-new/2013/08/13/amazon-sns-announces-mobile-push/)を提供していたわけですが、
Microsoft Azureでも[Mobile Notification Hubs](https://azure.microsoft.com/en-us/services/notification-hubs/)が出ていたり、Google Cloudが[Firebase](https://firebase.google.com/)を買収していたりというところで激化する中、非常に強力で魅力的なソリューションを提供してきたように思います。


## 最後に

次回のre:Inventは 2017-11-27/2017-12-01となります。忘れずに参加しましょう。

本記事は2016-12-07に行われた[AWS re:Invent 2016 Serverless Follow Up](https://aws-serverless.connpass.com/event/42950/)でのAWSJ SAの[@shimy_net](https://twitter.com/shimy_net)さんによる発表がベースとなっています。ありがとうございます。
Kivyのrootについて


## Kivyで良く使うapp, rootについて

Kivyでは良くappやrootといった変数を使用します。

- app
 - Appのインスタンスを指します
 - 対象となるインスタンスは基本ひとつです
- root
 - 対象の根っこになっているWidgetのインスタンスを指します
 - 下の例ではImageのrootはLargeImageです 

例えば、下みたいな感じで使います。

```main.kv
<LargeImage>:
    on_touch_down: app.changeScene()                   #Widget がタッチされたらMainAppのchangeeSceneを呼ぶ
    Image:
        allow_stretch: True
        source: root.path  
```

```main.py
class LargeImage(Widget):
    def __init__(self, path):
        self.path = path
        super(LargeImage, self).__init__()

class MainApp(App):
    def build(self):
        self.root = LargeImage()
        return self.root

    def changeScene(self, scene, opt = None):
        pass
```


## rootってどこのどいつよ？
例えば下のファイルが有るとして、
上のImageのrootはLargeImage、下のImageのrootはSmallImageとなります。

```main.kv
<LargeImage>:
    Image:
        source: root.path  

<SmallImage>:
    Image:
        source: root.path  
```

ここで、pythonファイル側で下のコードを実行したとします。

```main.py
l_img = LargetImage()
l_img.add_widget(SmallImage())         #LargeImageにSmallImageを追加する
```

この場合、SmallImage側ImageのrootはSmallImageのままです。
LargeImageの下に追加してもrootはLargeImageに変わりません。

SmallImage側からLargeImageにアクセスしたい場合は、
rootでは無くroot.parentを使います。

逆にLargeImage側からSmallImageにアクセスする場合は
root.children[0]でアクセスできます。
lsコマンドで単位を揃えて(メガバイト、ギガバイト単位などで)表示させる方法

## 方法

* MiB単位(2^20)

```bash
$ ls -l --block-size=M
```

* MB単位(10^6)

```bash
$ ls -l --block-size=MB
```

* GiB単位(2^30)

```bash
$ ls -l --block-size=G
```

* GB単位(10^9)

```bash
$ ls -l --block-size=GB
```

## 注意点

端数（小数点以下）は切り捨てられます。

## 参考
[How do I make `ls` show file sizes in megabytes?](http://unix.stackexchange.com/questions/64148/how-do-i-make-ls-show-file-sizes-in-megabytes/64150)
スクロールバー付き PictureBox は Dock プロパティを設定しない

# スクロールバー付き PictureBox は Dock プロパティを設定しない

[スクロールバーを付けて画像を表示する](http://dobon.net/vb/dotnet/graphics/scrollimage.html)

dobon さんの記事を見て、スクロールバー付きの PictureBox を作るとき、つい、念のために `Dock` プロパティを Fill してしまう。が、これをやるとスクロールバーは表示されなくなる。

1. `Panel.AutoScroll` を `true` に、
2. PictureBox を Panel に貼り付け、
3. `PictureBox.Location` を `(0, 0)` に設定、
4. `PictureBox.AutoSize` を `AutoSize` に設定、
5. そして `PictureBox.Dock` プロパティは `None` のまま。寝た子は起こさない、そっとしておく。

PictureBox と Form の間に何層もの Panel や SplitContainer などのコンテナが存在する場合、すべてのコンテナの `AutoScroll` プロパティを `true` にする必要があるようだ。
ImageMagick 指定領域のRGB値を列挙する

## 背景
画像を解析にて、ある領域のRGB値を抽出して列挙したいときに活用します。

## 環境
Windows 7 SP1(32bit)
ImageMagick 7.0.3-2 Q8 x86
にて確認しました。

## コード
RGB値抽出の内容については、[以前投稿した記事](http://qiita.com/hsagae/items/e9947b5a26eb3fc047d8)を参照ください。

```bat:extractColors.bat
@echo off
if "%1" == "" goto HELP

echo X, Y = R, G, B
for /L %%Y in (%3, 1, %5) do (
for /L %%X in (%2, 1, %4) do (
magick convert %1 -crop 1x1+%%X+%%Y -format "%%X, %%Y = %%[fx:r*255], %%[fx:g*255], %%[fx:b*255]\n" info:
)
)

goto END

:HELP
echo 入力画像の指定領域のRGB値を表示します。
echo.
echo 書式
echo extractColors.bat [FileName] [X_Start] [Y_Start] [X_End] [Y_End]
echo.
echo [FileName] 入力ファイル名
echo [X_Start]  抽出開始(左上) X座標
echo [Y_Start]  抽出開始(左上) Y座標
echo [X_End]    抽出終了(右下) X座標
echo [Y_End]    抽出終了(右下) Y座標
:END
```

## 実施例
![sample.png](https://qiita-image-store.s3.amazonaws.com/0/52878/79a69175-3b03-2631-e5d9-8d8a6dde4427.png)
↑幅4x高さ2画素の画像です

```bat
c:\work>extractColors.bat sample.png 0 0 3 1
X, Y = R, G, B
0, 0 = 255, 0, 0
1, 0 = 195, 0, 255
2, 0 = 0, 107, 255
3, 0 = 0, 255, 92
0, 1 = 255, 0, 180
1, 1 = 31, 0, 255
2, 1 = 0, 255, 247
3, 1 = 33, 255, 0
```
[Unity ]簡単!スクリプトでアニメーション2 UIのScale


# 前回の続きです．
[前回](http://qiita.com/Teach/items/dc4099a881689813dd14)

# 結果
![TextAnimation.gif](https://qiita-image-store.s3.amazonaws.com/0/113504/f4de5444-38bc-fddc-156b-4ba3ba41a416.gif "TextAnimation.gif")


# 1. UIを配置

最終的にこの状態にしましょう．
![スクリーンショット 2016-12-07 19.00.02.png](https://qiita-image-store.s3.amazonaws.com/0/113504/4b9a1536-6b71-bec3-3b9b-b19c9321a7b4.png "スクリーンショット 2016-12-07 19.00.02.png")

まずはUIを作成
![スクリーンショット 2016-12-07 18.57.41.png](https://qiita-image-store.s3.amazonaws.com/0/113504/948ced15-c248-e24d-e75a-153e496b5742.png "スクリーンショット 2016-12-07 18.57.41.png")

いったん2Dにしておきましょう
![スクリーンショット 2016-12-07 18.57.58.jpg](https://qiita-image-store.s3.amazonaws.com/0/113504/6e54ce0f-c499-95ae-90d6-c1897b277f80.jpeg "スクリーンショット 2016-12-07 18.57.58.jpg")

作成したTextを選択し，RectTransformの左上のやつをクリック
![スクリーンショット 2016-12-07 18.58.31.jpg](https://qiita-image-store.s3.amazonaws.com/0/113504/28a7bac1-e251-e623-24db-0611da2a4c9a.jpeg "スクリーンショット 2016-12-07 18.58.31.jpg")

でてきたポップアップの真ん中をAltを押しながらクリック
![スクリーンショット 2016-12-07 18.58.40.jpg](https://qiita-image-store.s3.amazonaws.com/0/113504/8a56375d-4a0f-d8c8-2c4e-59b7a453e0e7.jpeg "スクリーンショット 2016-12-07 18.58.40.jpg")


ほぼ真ん中にきますので，次はサイズを調整
![スクリーンショット 2016-12-07 18.59.15-1.jpg](https://qiita-image-store.s3.amazonaws.com/0/113504/8a0970c3-c434-dea6-5963-7d1835d679c7.jpeg "スクリーンショット 2016-12-07 18.59.15-1.jpg")

フォントサイズを大きくして真ん中揃えにする．

![スクリーンショット 2016-12-07 18.59.32-1.jpg](https://qiita-image-store.s3.amazonaws.com/0/113504/6e278fae-a635-6210-79e6-0f94929f1c46.jpeg "スクリーンショット 2016-12-07 18.59.32-1.jpg")

これで完了です．

# 2. スクリプトを書く

```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening; //忘れずに!

public class TextAnimation : MonoBehaviour {

	void Start () {
		// 最初は大きさ0にする
		this.transform.localScale = Vector3.zero;
	}

	void Update(){
		// Aキー押したら
		if (Input.GetKeyDown (KeyCode.A)) {
			Show ();
		}
	}

	// アニメーションする
	public void Show(){
		// 0.3秒で大きさ1にアニメーション
		this.transform.DOScale (Vector3.one, 0.3f);
	}
}

```

このスクリプトをアニメーションさせたいテキストにはりましょう．


DOScaleは前回も使いましたね．

UIでもDOScaleが使えることが学べました！
Windows で Python + Kivy 開発

スマホアプリを Python + Kivy で作りたかったのですが、
流石にスマホ上でコーディングはしんどかったのでWindowsに環境を入れる事にしました。
意外とめんどくさかったので忘れないようにメモを残します。

## とりあえずPythonをインストール
[PythonのHP](https://www.python.org/)からインストーラーをダウンロードします。
Ver.3系は昔使いたかったモジュールが対応してなかった思い出が有るので、
ここではVer.2.7をダウンロード。

[maisutoさんの解説](http://qiita.com/maisuto/items/404e5803372a44419d60)を参考にしました。


## pip のアップデート
pipを使ってKivyをインストールするので、まずはpipをアップデートします。
コマンドプロンプトで下記コマンドを打ちます。

``` pip install --upgrade pip ```

コマンドプロンプトを管理者権限で起動しないとエラーが出ました。 


## 続いてKivyのインストール
ようやくKivyをインストールします。

``` pip install kivy ```

これで動くかと思ったら。。。
実は依存モジュールがほとんど入っていませんでした。

とりあえずpygameとCythonに依存しているそうなので、これらをpipでインストール。
 

``` pip install pygame cython ```

これでもまだ動かないため、[ここのページ](https://a2takashi.wordpress.com/2015/12/25/easy-installing-of-kivy/)を参考に
docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew をインストール。

これでようやくサンプルが動作しました。


## サンプル
Kivyをインストールした際、Python¥share¥kivy-samples以下にサンプルが入ってるので、一通り見てみると何が出来るのか分かります。
特にPython¥¥share¥kivy-samples¥demo¥showcaseは殆どのUIが見れるのでオススメです。

---
*追記 : [KivyのHP](https://kivy.org/docs/installation/installation-windows.html)に詳しい説明ありました*
Angular2で動的コンポーネントを生成する

Angular2にて動的にコンポーネントを生成するサンプルコードです。

![sample-capture-edit.png](https://qiita-image-store.s3.amazonaws.com/0/67192/da1f1719-28e5-4fec-36f0-b06b6fff9ac5.png)

# 動作確認環境
 - [Plunker (Angular-2.3.0)](http://embed.plnkr.co/YKPOyy/)


# ソースコード
```ts:app/main.ts
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { BrowserModule } from '@angular/platform-browser';
import {
  Component,
  ComponentFactoryResolver,
  EventEmitter,
  NgModule,
  OnInit,
  OnDestroy,
  ViewContainerRef
} from '@angular/core';
import { Observable } from 'rxjs/Rx'; // MEMO: plunkerの場合は'rxjs/Rx'、ローカルでangular-cliの場合は'rxjs'


/**
 * 動的に生成するサンプルコンポーネント
 */
@Component({
  selector: 'app-sample',
  template: `
    <div style="margin: 1rem; padding: 1rem; border: 1px solid #eee;">
      <button (click)="closeButton_Clicked()">CLOSE</button> No. {{_no}}
    </div>
  `,
})
export class SampleComponent implements OnInit, OnDestroy
{
  /** クローズイベント */
  private _closing = new EventEmitter<{}>();
  
  /** コンポーネント生成元から受け取るパラメータ */
  private _no: number = 0;
  
  /** クローズイベントのgetプロパティ */
  public get closing(): Observable<{}>
  {
    return this._closing;
  }
  
  /** コンポーネント生成元から受け取るパラメータのsetプロパティ */
  public set no(value: number)
  {
    this._no = value;
  }
  
  /**
   * Angular Lifecycle Hooks: OnInit
   */
  public ngOnInit(): void
  {
    console.log(`SampleComponent.ngOnInit >> no="${this._no}"`);
  }
  
  /**
   * Angular Lifecycle Hooks: OnDestroy
   */
  public ngOnDestroy(): void
  {
    console.log(`SampleComponent.ngOnDestroy >> no="${this._no}"`);
  }
  
  /**
   * CLOSEボタンのクリックイベントハンドラ
   */
  private closeButton_Clicked(): void
  {
    // クローズイベントを発行
    this._closing.emit({});
  }
}


/**
 * メインAppコンポーネント
 */
@Component({
  selector: 'my-app',
  template: `
    <div style="padding: 1rem; border: 1px solid #eee;">
      <h2>Angular2 Dynamic Component Sample</h2>
      <button (click)="createButton_Clicked()">CREATE</button>
    </div>
  `,
})
export class App
{
  public constructor(
    private _componentFactoryResolver: ComponentFactoryResolver,
    private _viewContainerRef: ViewContainerRef)
  {
  }
  
  /**
   * CREATEボタンのクリックイベントハンドラ
   */
  private createButton_Clicked(): void
  {
    // コンポーネント生成器を初期化
    const componentFactory = this._componentFactoryResolver.resolveComponentFactory(SampleComponent);
    
    // 動的にコンポーネントを生成
    const componentRef = this._viewContainerRef.createComponent(componentFactory);
    
    // 動的に生成したコンポーネントにパラメータを渡す
    componentRef.instance.no = Math.floor(Math.random() * 100); // 0～99のランダム値を渡す
    
    // closingイベントを受けたらコンポーネント破棄する
    componentRef.instance.closing.subscribe(() => {
      componentRef.destroy();
    });
  }
}


/**
 * アプリケーションモジュール
 */
@NgModule({
  imports: [ BrowserModule ],
  declarations: [ App, SampleComponent ], // 独自のcomponent/directiveをdeclarationsに指定する
  bootstrap: [ App ],
  entryComponents: [ SampleComponent ], // 動的に生成するcomponentをentryComponentsに指定する
})
export class AppModule
{
}

platformBrowserDynamic().bootstrapModule(AppModule);
```
LinuxやMacで任意のサイズの「テキスト」ファイルを作る方法

検証などの用途で、大容量のダミーファイルを作りたいことがあります。`dd`や`fallocate`では、バイナリファイルになってしまって、テキストエディタで開けません。次のコマンドで、素早く作成できます。

```bash
base64 /dev/urandom | head -c アスキー文字数(バイト数) > 作成するファイル
```

これを応用すると、決まった長さの行を繰り返すファイルや、一部の内容を固定したファイルも、簡単に作れます。

以下の例では、`THIS IS HEAD`の行で始まり、100文字の行が100個続き、`THIS IS TAIL`の行で終わる、```XXX.log```ファイルを作成しています。

```bash:createRandomFile.sh
echo 'THIS IS HEAD' > XXX.log
base64 /dev/urandom | fold -w 100 | head -100 >> XXX.log
echo 'THIS IS TAIL' >> XXX.log
```

参考:
[How to create a random .txt(Human readable text like ascii) file in linux](http://superuser.com/questions/692175/how-to-create-a-random-txthuman-readable-text-like-ascii-file-in-linux)
[コマンドラインでランダムな10文字を得る方法](http://qiita.com/tt2004d/items/0212611b6eb321ee860c)
Sassでアスペクト比固定要素を簡単に作る

プログラムどころかhtmlやcssも全く分かっていなかったグラフィックデザイナー上がりの私ですが、htmlとcssはなんとかモノにできた(ハズ)。

未だJSは勉強中。
JSで簡単にできるかもしれないこともCSSでなんとかする変なスキルも身についてきました。

htmlとcssのみでdiv要素などのアスペクト比を固定したい場合にはパディングを使う方法がありますが、いちいちパーセンテージを算出するのは面倒です。

Sassで演算させれば誰でも簡単にできますね。

子要素として画像を入れ親要素にフィットさせたい場合には、親要素にクラスを追加するだけで幅基準か高さ基準のどちらかでフィットさせるように設定しておくともっと便利です。



```HTML:html
<div class="image-ratio-1by1">
	<img src="http://sample.jpg">
</div>
```

###アスペクト比固定に関する全体的な設定

```SASS:SASS

/* アスペクト比固定の物全てに関与する指示 */
*[class*="image-ratio-"] {
	display: block;
	width: 100%;
	position: relative;
	overflow: hidden;

	&::before {
		content: "";
		display: block;
		width: 100%;
		position: relative;
	}
	
	/* 他に何もクラスを入れていないと画像は横幅合わせで100% */
	img {
		display: block;
		position: absolute;
		top: -100%;
		bottom: -100%;
		left: -100%;
		right: -100%;
		margin: auto;
		width: 100%;
		height: auto;
	}
	
	/* height-fitクラスを追加すると画像は高さ合わせで100% */
	&.height-fit　img　{
		width: auto;
		height: 100%;
	}
}
```

###比率を指定する設定

```SASS:SASS
/* 16対9の場合 */
.image-ratio-16by9::before {
	padding-top: (9/16)*100%;
}

/* 3対2の場合 */
.image-ratio-3by2::before {
	padding-top: (2/3)*100%;
}

/* 1対1の場合 */
.image-ratio-1by1::before {
	padding-top: (1/1)*100%;
}

/* 黄金比の場合 */
.image-ratio-golden::before {
	padding-top: (1/1.618)*100%;
}
```

計算式の割り算の部分に数字を入れるだけだから簡単ですね。
クリックしたら取り消し線をつけて色が薄くなるListView

Android の ListView に関する投稿です。

TextView が項目となっている ListView　を使って、「クリックしたら項目が薄くなって、取り消し線が引かれる」という機能を実装してみます。

# 目標
<img width=320 src="https://gyazo.com/e323201608fd819b47bf3671cb377573.png" />

# 実装
３つ変数を宣言します。

```MainActivity.java
    private ListView listView;
    private ArrayAdapter adapter;
    private List<String> items;
```

初期化します。
今回は凝ったデザインにはしないので、ArrayAdapter には `simple_expandable_list_item_1` を渡します。(楽)

```MainActivity.java
    listView = (ListView) findViewById(R.id.main_list);
    items = new ArrayList<>();
    adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, items);
```

## 大切な部分

ListView の子 View は今回は TextView になっています。
だから、`View view` の部分で渡されるインスタンスは `TextView` 型です。
これを利用していきます。

```MainActivity.java
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      TextView textView = (TextView) view;

      // 色を変える
      textView.setTextColor(Color.LTGRAY);

      // 取り消し線を引く
      TextPaint paint =  textView.getPaint();
      paint.setFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
      paint.setAntiAlias(true);
    }
});
```

## 全体
MainActivity.java はこんな感じになります。

```MainActivity.java
public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private ArrayAdapter adapter;
    private List<String> items;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.main_list);
        items = new ArrayList<>();
        adapter = new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1, items);

        listView.setAdapter(adapter);
        addDummyItems(items);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView textView = (TextView) view;
                textView.setTextColor(Color.LTGRAY);
                TextPaint paint =  textView.getPaint();
                paint.setFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                paint.setAntiAlias(true);
            }
        });
    }

    private void addDummyItems(List<String> items) {
        int size = 10;
        for (int i = 0; i < size; i++) {
            items.add("テキスト" + i);
        }
    }
}
```

# TextPaint強い
こんなクラスがあることを初めて知りました。
簡単な ToDo アプリとかに使えそうです。

# 参考
- [Google Android Developers: TextPaint](https://developer.android.com/reference/android/text/TextPaint.html)
- [いならの住処: [Android][TextView]TextViewに取り消し線をいれる](http://blog.inara.jp/2011/11/androidtextviewtextview.html)
認証セッションを付与してURLをロードする【Swift3.0】【Alamofire4.2.0】

アプリ内に複数またがるWebViewのセッション管理方法のひとつとしてメモしておきます。

## 前提
- **Alamofire 4.2.0**を使用

## 1. 認証セッション取得
ログイン画面などでコール

```swift

// Swift 3.0
// Alamofire 4.2.0

/**
　認証セッション（Cookie）を取得・保存する     

 - parameter authUrlString: 認証(ログイン)URL 
 - parameter authParams: 認証情報ディクショナリ
 - returns: void
*/
func getAuthSession(_ authUrlString:String,authParams:Dictionary<String,String>) {

    let storage = HTTPCookieStorage.shared

    // Cookieリセット
    for cookie in storage.cookies! {
        storage.deleteCookie(cookie)
    }
        
    var parameters:Dictionary<String,String> = [:]

    for (key, value) in authParams {
        parameters.updateValue(value, forKey: key)
    }
        
    Alamofire.request(authUrlString, method:.post, parameters:parameters ).response { response in

        let res = response.response
        let cookies = HTTPCookie.cookies(withResponseHeaderFields: res?.allHeaderFields as! [String : String], for: (res?.url!)!)

    // Cookie保存    
    for i in 0 ..< cookies.count {
        let cookie = cookies[i]
        
        HTTPCookieStorage.shared.setCookie(cookie)
    }
}
```

## 2. 認証セッション付きでURLロード
あらかじめ上記（getAuthSession）にて取得したセッションを付与してURLをロード

```swift
/**
　認証セッション付きでURLをロードする     

 - parameter urlString: URL文字列
 - parameter authUrlString: URL文字列
 - returns: void
*/
func loadRequestWithAuthSession(_ urlString:String,authUrlString:String,webView:UIWebView) {
        
    // セッション付きでロードしたいURL
    let url = URL(string: urlString)

    // 認証(ログイン)URL
    let authUrl = URL(string: authUrlString)

    var request = URLRequest(url: url! as URL)
        
    let cookies = HTTPCookieStorage.shared.cookies(for: authUrl! as URL)
    let header  = HTTPCookie.requestHeaderFields(with: cookies!)
    request.allHTTPHeaderFields = header
    
    // ロード
    webView.loadRequest(request as URLRequest)

}
```

### おおいに参考にさせていただいた記事
[【Swift】ユーザー認証APIを通した後、同一セッションとしてUIWebViewを表示する](http://qiita.com/ktanaka117/items/e4921f061f6522ed5a63)
###### ...本記事はほぼこちらのSwift/Alamofireバージョンアップ対応版のようなものです:relaxed:
PhpStorm Tip of the Day 翻訳（随時更新）

#環境
macOS Sierra
PhpStorm 2016.3

#Tip of the Day
>With a single keystroke, you can apply another code style/coloring scheme or keymap right from the editor. Just press ⌃`` ` `` (View | Quick Switch Scheme), to specify the scheme you want to change.

1 回のキーストロークで、別のコードスタイル/カラーリングスキームやキーマップを適用できます。 
^`` ` ``（View | Quick Switch Scheme）を押すだけで、変更したいスキームを指定できます。

※ JISキーボードではUSキーボードの ` に対応するキーがないため、Keymap で他のキーストローク（例えば ^\ ）に割り当てるとキーストロークで使用できます。

<img width="675" alt="スクリーンショット 2016-12-07 19.18.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/115844/ef58aff2-b0dd-e83c-1d7d-41ffb1d7319d.png">

---
>You can use Basic Completion (⌃Space) in HTML, CSS and JavaScript files, for completing attributes, parameters, tags, selectors, etc.

HTML、CSS、JavaScript ファイルで属性、パラメータ、タグ、セレクタなどを完成させる Basic Completion （^Space） を使用できます。

<img width="675" alt="スクリーンショット 2016-12-09 17.05.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/115844/7f662d43-07a6-99a1-918f-86135badb947.png">

---
> By pressing ⌃⌥R you can access the Run/Debug dropdown on the main toolbar, without the need to use your mouse.

^⌥R を押すと、マウスを使用することなく、メインツールバーの Run / Debug ドロップダウンにアクセスできます。

<img width="675" alt="スクリーンショット 2016-12-10 15.46.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/115844/68e371e5-3038-a449-1837-cc0faf8179f2.png">

---
> To quickly find a menu command or toolbar action, you do not need to look through the menus. Just press ⇧⌘A (Help | Find Action on the main menu) and start typing the name of the action. Choose the desired action from the suggestion list.

メニューコマンドまたはツールバーのアクションをすばやく見つけるには、メニューを見る必要はありません。 ⇧⌘A（メインメニューの[ヘルプ|アクションの検索]）を押して、アクションの名前を入力するだけです。 提案リストから目的のアクションを選択します。

<img width="675" alt="スクリーンショット 2016-12-15 14.54.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/115844/799362cc-6db6-96f9-2893-a1086bbf15eb.png">


---
外部ファイルをエクスプローラまたはFinderからエディタにドラッグするだけで、外部ファイルを簡単に開くことができます。

<img width="675" alt="スクリーンショット 2016-12-20 10.55.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/115844/e5a3291c-06a7-1e1d-9115-22b4ba26dec3.png">



#キーストロークの記号について
各記号には以下のキーが対応します。
(⌘) Command
(⌥) Option
(⌃) Control
(⇧) Shift
【ゲリラアドカレ】UE4ゲーム実装　進捗報告 2日目(ステージ選択画面)

【非公式】某会社設立記念ゲリラ Advent Calendar 2016 3日目の記事です。

FlashゲームをUE4で再実装するゲリラアドカレです。

ステージ選択画面作りまでをまとめました。
今回もUE4よちよち初心者レベルです。

・注意
許可を取ってないので通常業務の空いた時間を利用して作成するため、作成中のゲーム、及びアドカレは完成保証がなければ、ゲーム自体もリリースされる保証も皆無なので、あんまり期待しないでください。

#クエスト選択画面を作る
もう一つ、サクッと終わりそうなクエスト選択画面を作ります。

オリジナルはトップにクエスト選択あるのですが、ちょっとこれだと見づらいので変えます。
![ゲームトップ.png](https://qiita-image-store.s3.amazonaws.com/0/104377/b3dcdc32-32a1-d557-0525-c489e5094606.png)

現段階はこの部分に力を入れるべきではない、と言っておきながら少し凝ってしまいました。反省。

![進捗.png](https://qiita-image-store.s3.amazonaws.com/0/104377/8b107daf-434e-c2e9-7d7e-ea04911bb949.png)

進捗状況です。

#選択画面のウィジェット作成

![選択画面.png](https://qiita-image-store.s3.amazonaws.com/0/104377/87bbfd5f-05fa-4562-2615-d8b90108468e.png)
選択画面のウィジェットを作成しました。
ここのボタンからクエスト画面を今後実装する予定です。

#ボタンからクエスト選択画面表示

タイトル画面からクエスト選択を呼び出すように修正します。
ボタンを選択し、イベントのOnCleckedのボタンを押します。
![ボタン.png](https://qiita-image-store.s3.amazonaws.com/0/104377/208a31c1-04af-41da-f9af-e2cca806eebe.png)

するとブループリントにイベントが追加されるので、選択画面のウィジェットを作成して表示します。
![ボタン2.png](https://qiita-image-store.s3.amazonaws.com/0/104377/d2b67e2b-a97e-4837-53da-99a49bb22600.png)

とりあえず表示して満足したのですが、ここで「本を開くアニメーションを入れたい」という魔が差してしまったので、アニメーションを実装することにしました。

#UIアニメーション

SpriteStudioを使うのもありかなと思いましたが、今回はあえてUIアニメーションで実装しました。

左下のアニメーションタブから緑色のボタン「アニメーション」があるので、それをクリックするとアニメーションが追加されます。
![UIアニメーション.png](https://qiita-image-store.s3.amazonaws.com/0/104377/ece53fb3-1b2d-d5ed-35c5-21485dce7733.png)

タイムラインタブの緑色のボタン「+Add」をクリックするとアニメーションを付けるコンポーネントを追加できます。
![UIアニメーション2.png](https://qiita-image-store.s3.amazonaws.com/0/104377/2c939d5c-a480-3b25-d49a-ad6764db6720.png)


TrackボタンでアニメーションさせたいPropertiesを選択できます。
![UIアニメーション3.png](https://qiita-image-store.s3.amazonaws.com/0/104377/6ae5a9bd-a9eb-39c5-a53e-f721a4ad9a64.png)

キーを打つ場合は該当のプロパティの○をクリックします。
![UIアニメーション4.png](https://qiita-image-store.s3.amazonaws.com/0/104377/ea19b86d-81dc-6a5c-e3d0-dc66545cf90c.png)

アニメーションを作り終えたら最後、ブループリントで再生処理を追加します。
![UIアニメーション5.png](https://qiita-image-store.s3.amazonaws.com/0/104377/615ef052-4529-c09c-efc1-925d59777e8c.png)

AdobeのAnimationCCやAfterEffectCC等のタイムライン操作に慣れている人なら、比較的早く飲み込めると思います。

#クエスト選択画面完成

とりあえず出来ました。
GifがQiitaにあげられなかったので、Twitterを表示します。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">UE4のUIアニメーションを始めてやってみた<br>色々としんどかった　<a href="https://twitter.com/hashtag/UE4Study?src=hash">#UE4Study</a> <a href="https://t.co/cjneWSFAqe">pic.twitter.com/cjneWSFAqe</a></p>&mdash; 荻野雄季＠クルーズから出荷された豚 (@YuukiOgino) <a href="https://twitter.com/YuukiOgino/status/806448101334491136">2016年12月7日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

次はおそらく第一の難関になるであろう、クエスト画面を実装します。
何回目で終わるのかな……。軽い絶望が見えます。
arXiv.orgへの論文投稿の際のメモ（アカウント作成編）

#概要
[arXiv.org](https://arxiv.org/)とは物理・数学・計算機科学・量生物学などの論文が登録されているプレプリントサーバのことです
名のある学会などに論文を投稿しようとするとどうしても時間がかかってしまうことが多いので、取り敢えず今の自分の成果をどこかで公開してツバ付けとこう的なカンジでここに論文を置いてる研究者も多い気がする（勝手なイメージです）

さて、少し前にここに論文を投稿する機会があったのでその時の経験をここにまとめておきます(プログラミングと関係ないけど大丈夫だろうか…)
また、とりあえず今回はアカウント作成までで投稿時のことは後日まとめます

#投稿するには
主に以下を用意する必要がある.
- アカウント
- 論文のTex ファイル

アカウントは恐らく誰でも作れる
提出は Tex のソースファイル形式で行う
コンパイルはむこうで行われるので、関連ファイルを漏れ無く揃えて提出する

#アカウント作成
[ここ](https://arxiv.org/edit-user/) から行える
まず、メールアドレスとユーザーネームそれからパスワードを登録する.ユーザーネームは何でもいいが,既に登録されているものは使えないらしい

![aaa.png](https://qiita-image-store.s3.amazonaws.com/0/105988/b1899fb7-72b8-cf72-7a00-fa00f210e715.png)


 　　
次に本名や所属、専門分野を登録する. “default category” は結構選べる種類があって迷う
"homepage URL"は無記入で問題なかった
ちょっと英語がわからんところがチラホラ…特に最後の質問はイミフ(なんとなくYesにする)

![sss.png](https://qiita-image-store.s3.amazonaws.com/0/105988/7eb4298c-9d29-d9cb-9ac0-5685348268d4.png)

　　
Nextボタンを押してこの次の画面に進んだ時点で、先程登録したメールアドレスにパスコードが送られているので最後にそれを入力して終了

#まとめ
アカウントは簡単に作れた
この後、投稿時にいくつか詰まるところが出てくるのですが…それは後日まとめます
zabbix.org でzabbixソースを見てみよう

みなさん、突然ですが[Zabbix](http://www.zabbix.com/jp/)はご利用になられていますか？
Zabbixは完全オープンソースの運用監視ツールで、そのソースは全て公開されています。
Zabbix社ではソースのリビジョン管理をsvnで行っており、[サポートサイト](https://support.zabbix.com/)でも新機能はリビジョンxxxxxxでコミットしたであるとか、バグフィックスはリビジョンxxxxxxでコミットしたであるとかがわかります。

[最新バージョンのソースをZabbixサイトからダウンロード](http://www.zabbix.com/download)するのも良いですが、zabbix.orgの**Official SVN repo over WebSVN**を使用してオンラインでソースを参照・リビジョン比較を行うという手もあります。

## 何処にあるの？

https://www.zabbix.org/wiki/Main_Page にある、Official SVN repo over WebSVN をクリックしてみてください。
（´-`）.｡oO(Zabbix conference 2016のリンクもあるし、~~意外とマメに~~しっかり更新されてる)

![screen01.png](https://qiita-image-store.s3.amazonaws.com/0/47801/b9fcc08e-9e90-f83f-a0f7-1f2de606a187.png)

現在開発はzabbix.comリポジトリで行われていますので、zabbix.comを選択
![screen02.png](https://qiita-image-store.s3.amazonaws.com/0/47801/a6665fb8-9a07-3403-ee82-3ab760734e6a.png)

一般的なsubversionでの構成管理同様、トランク・ブランチ・タグとわかれてますね。
![screen03.png](https://qiita-image-store.s3.amazonaws.com/0/47801/62ca3478-67e9-2021-6617-4d60c3cb20f6.png)

試しに、trunkのzabbix_server.confを見てみましょう。最新のconfファイルが出ると思います。
そこで「詳細表示」をクリックしてみてください。
![screen07.png](https://qiita-image-store.s3.amazonaws.com/0/47801/c089c234-f1eb-97ed-2a36-39d63756ad0d.png)

過去に修正したリビジョンが表示され、左にあるリビジョンにカーソルを合わせるとコミットメッセージが表示されます。
"ZBXNEXT-XXX"等と書かれていれば、新機能追加時に記載されたものなんだろうと思って頂ければ良いです。探究心あふれる方は　[Zabbixのサポートサイト](https://support.zabbix.com/)でチケット情報を見てみましょう！

![screen04.png](https://qiita-image-store.s3.amazonaws.com/0/47801/663eb767-e665-b8a4-0fdb-e9a09b4a31e5.png)

## 中の人達の使い方

手前味噌で申し訳ないですが、Zabbix japanのサポートチームでは、このsvnを使って仲間同士で情報交換を行ったりしてます。

チャットツールとしてHipChatを使用しており、ソースの情報を交換したい場合はチャットでこんな感じにメッセージとリンクを指定して・・・

![screen05_.png](https://qiita-image-store.s3.amazonaws.com/0/47801/aad7a248-7e2b-7bf4-8bc7-e93d4dea40c1.png)

リンクを開くと変更箇所の差分が表示され、「なるほどね～」となったりするわけです。

![screen06.png](https://qiita-image-store.s3.amazonaws.com/0/47801/d00a4616-e138-4597-ebba-8523d9d0e1a7.png)

## 最後に

ご注意頂きたいのが、zabbix.org を用意しているサーバ、ドメインからラトビアのZabbix LLC本社にあるもの思われます。
「遅いなー」とか「重いなー」等と思われるかもしれませんが、リビジョンを広げすぎで検索させたりとか、あまり高負荷を与えないように可愛がってあげてください。
MacBook Pro Late 2016での最低限の初期設定

# はじめに

ようやくMBPが届いたので初期設定をしました。備忘として残しておきます。

# 環境

* MacBook Pro Late 2016
* 13inch touchbar
* macOS Sierra version 10.12.1
* US配列

# caps lock to ctrl

最初にこれを設定しないと何もできない。
システム環境設定から変更可能。

* ［Caps Lock］キーと［Control］キーを入れ替える
http://macfan.jp/guide/2014/02/12/caps_lockcontrol.html

# コンピュータ名の変更

コンピュータ名がカッコ悪いので変更する。

```
hogehogenoMBP:~ clutter$ scutil --get ComputerName
ほげほげのMacBook Pro
hogehogenoMBP:~ clutter$ scutil --get LocalHostName
hogehoge-no-MacBook-Pro
hogehogenoMBP:~ clutter$ scutil --get HostName
HostName: not set
hogehogenoMBP:~ clutter$ sudo scutil --set ComputerName NewComputerName
Password:
hogehogenoMBP:~ clutter$ sudo scutil --set LocalHostName NewComputerName
```

terminalを起動し直しても表示は変わりませんでしたが、OS再起動で反映されました。

# スクリーンロックの設定

離席時にパッとスクリーンをロックできるようにする。

```
システム環境設定→デスクトップとスクリーンセーバ→ホットコーナー
    - 四隅の好きな場所を「スクリーンセーバーを開始する」にする
```

# Finderでの拡張子の表示

拡張子が表示されないのは気持ち悪いので表示されるようにする。

```
Finder環境設定→詳細→すべてのファイル名拡張子を表示にチェック
```

# 隠しファイルの表示

`.ssh`や`.emacs.d`ディレクトリ等をFinderでも一応見えた方が嬉しいので表示できるようにする。

```
# 変更
$ defaults write com.apple.finder AppleShowAllFiles TRUE
# 設定値確認
$ defaults read com.apple.finder AppleShowAllFiles
TRUE
# Finder再起動
$ killall Finder
```

次の記事によると、この設定をしても`.DS_Store`などがFinderから見えなくなったらしい。見えない方が嬉しいのでよし。

* macOS 10.12 Sierraでは「.DS_Store」など一部の隠しファイルがFinderに表示されない状態に。
http://applech2.com/archives/macos-10-12-sierra-ds_store.html

# homebrewのインストール

macのパッケージ管理システムをインストールする。

最初にcommand line developer toolsをインストールしておく必要があるらしい。
次のコマンドでインストール。

```
$ xcode-select --install
```

homebrewの公式サイトに記載されているインストールコマンドを叩く。

* http://brew.sh/index_ja.html

```
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

これでインストール完了。

# emacsキーバインド設定

emacs以外でもemacsのキーバインドを使えるように設定する。

デフォルトの入力ソース切替が`ctrl + space`になっていてemacsのマークセットと被るので無効にしておく。

```
システム環境設定→キーボード→ショートカットタブ→入力ソース
```
で変更。ついでに`ctrl + O`で入力ソースを切り替えられるように設定すると良い（好み）。

## iTerm2のインストール

後でインストールするhammerspoonの設定ファイルを丸コピするためにiTerm2をインストールしておく。

* http://iterm2.com/

## Hammerspoonsのインストール

ito naoyaさんの記事を参考にインストールと設定ファイルを作成する。

* Karabiner 使えない対策: Hammerspoon で macOS の修飾キーつきホットキーのキーリマップを実現する
http://qiita.com/naoya@github/items/81027083aeb70b309c14

必要最低限の設定をしていらっしゃる。さすがです。

# Cheat Sheetのインストール

`command`キーを長押しでショートカットキーを教えてくれるこのアプリは必須だと思います。

https://www.mediaatelier.com/CheatSheet/

# おわりに

あとはhomebrewでgitをインストールしてgithubから自分のdotfileを落としてくれば必要最低限の設定は完了です。

まだemacsのバージョンアップとかもしないと〜
ATS対応で使用するNSAllowsArbitraryLoadsについて


ATS (App Transport Security) で使用するNSAllowsArbitraryLoadsについて調べる

##そもそもATSとは
iOS9から追加されたセキュアな通信を保証する機能のこと。
iOS9の時はとりあえず無効化して問題がなかったが2017/1以降はATS有効化が必須に！！
OSで自動的に安全なhttpsの通信のみを許可して、それ以外をシャットダウンする。
なので、アプリ側は通信を全てhttpsにするか例外をinfo.plistに追加しないといけない。


##NSAllowsArbitraryLoadsとは
デフォルトはNO
YESにするとATSを無効化

「NSExceptionDomains」を設定すると制御の対象外となるドメインを設定できる。

##iOS10で増えたサブキーについて

iOS10からは下記のサブキーを設定することにより、以下のキーが優先される。(例えばNSAllowsArbitraryLoadsInWebContentを設定した場合はiOS10ではweb関連だけATSが無効化される)

NSAllowsArbitraryLoads
 - NSAllowsArbitraryLoadsInMedia
	 - AVFoundationからAPIを使用してロードされたメディアに関する全てのATSを無効化
 - NSAllowsArbitraryLoadsInWebContent
	 - KWebView、UIWebViewのATSを無効化 webviewを使う場合はとりあえずこれを設定すればok

これらを設定すればiOS9では全体でATSを無効化し、iOS10ではそれぞれのサブキーで設定したもののみ無効化する。
RailsのDB設計

一年間Railsを書いてきたので、Railsの設計の仕方をざっと書きます。

## 設計

自分が見ていたインターン生がやってしまった失敗を
元に書いてみます。

- db設計

webアプリケーションにおいて、DB設計はかなり重要になります。
Railsが用いるORMはActiveRecordですが、基本はRDBを使用します。
なのでRDBの理解する必要があります。


これは他人が設計した例ですが、タグの設計をすると
タグはこれかも増えてくいくとします。
投稿の `posts`と タグを`tags`とすると

１つの投稿に複数のタグをつけたいため
下記のようなschemaを作ったとします。


```
create_table "posts", force: :cascade do |t|
  t.integer  "user_id",    limit: 4
  t.datetime "created_at",             null: false
  t.datetime "updated_at",             null: false
end

create_table "tags", force: :cascade do |t|
 t.integer  "post_id"
 t.boolean  "food"
 t.boolean  "fashion"
 t.boolean  "music"
 t.boolean  "culture"
 t.boolean  "travel"
 t.boolean  "other"
 t.datetime "created_at",             null: false
 t.datetime "updated_at",             null: false
end
```

こうすると、

```
Post.find(1).tags
```

とすれば
論理値でtagの確認出来る分けです。

でもカラムが多いだけパラメータが増えたり
クエリも書きにくくなります。
タグを増やすたびにスキーマ変更しなければならず
タグから投稿を探すのも大変なのです。


これを正規化すると解決します。

投稿とタグの間に中間テーブルをおきます。


そしてタグテーブルの
レコードに`food`や`fashion`などを保存します。

```
create_table "posts", force: :cascade do |t|
  t.integer  "user_id",    limit: 4
  t.datetime "created_at",             null: false
  t.datetime "updated_at",             null: false
end


create_table "tags_posts", force: :cascade do |t|
 t.integer  "post_id"
 t.string   "tag_id"
 t.datetime "created_at",             null: false
 t.datetime "updated_at",             null: false
end

create_table "tags", force: :cascade do |t|
 t.string   "name"
 t.datetime "created_at",             null: false
 t.datetime "updated_at",             null: false
end
```

こうしてあげることで

```
Post.find(1).tags
```
というクエリを書くと、
postが持っているtagだけが表示されるようになります。
もちろん

```
Tag.find(1).posts
```
とすると
Tagに紐付いている投稿の情報を得ることができます。
[JAWS-UG CLI] ハンズオン用VPC環境の構築

ハンズオンで利用するVPCを作成する手順です。

前提条件
========


EC2への権限
-----------

EC2に対してフル権限があること。



AWSアカウントの属性
-------------------

AWSアカウントがEC2-Classicに対応していないこと。

```bash:コマンド:
AWS_SUPPORT_PLATFORMS=$( \
         aws ec2 describe-account-attributes \
           --query 'AccountAttributes[?AttributeName == `supported-platforms`].AttributeValues[].AttributeValue' \
           --output text \
) && echo ${AWS_SUPPORT_PLATFORMS}
```

結果:

      VPC

注釈: 'VPC'の他に'EC2'が表示される場合、別のアカウントを作成もしくは利用してください。


# 1. VPCの作成

カスタムVPC(デフォルトVPCではないVPC)を作成します。

VPCの作成: http://qiita.com/tcsh/items/1aec4b46451bdd4b6abb


# 2. IGWの作成

Internet Gatewayを作成し、カスタムVPCにアタッチします。

IGWの作成、アタッチ: http://qiita.com/tcsh/items/e3dab3f4c1fce09ff252


# 3. サブネットの作成

Publicサブネットを作成し、インターネットとの通信に必要なルートテーブルやルートを作成します。

1. サブネットの作成 (Public): http://qiita.com/tcsh/items/caaa882fd762285f0d43

2. ルートテーブルの作成: http://qiita.com/tcsh/items/ad3004241288076f3b40

3. ルートの追加: http://qiita.com/tcsh/items/1c8dc79138dca77262bd

4. ルートテーブルの紐付け (Destination CIDR): http://qiita.com/tcsh/items/a73c257b9b9d1af7b69d


# 4. セキュリティグループの作成 (任意)

必要となるセキュリティグループはハンズオンの内容によって異なります。
以下は一般的に使われるセキュリティグループの例です。

* セキュリティグループ (SSH許可): http://qiita.com/tcsh/items/77f8c9887634fd67f4d8

* セキュリティグループ (HTTP許可): http://qiita.com/tcsh/items/1d6a499b03b776355ee2 

* セキュリティグループ (HTTPS許可): (作成予定)


# 後始末

http://qiita.com/tcsh/items/f3bc55bdb3868dfb0ffd
[JAWS-UG CLI] VPC #21 VPCの削除


前提条件
========


EC2への権限
-----------

EC2に対してフル権限があること。


AWS CLIのバージョン
-------------------

以下のバージョンで動作確認済

- AWS CLI 1.11.26

```bash:コマンド:
aws --version
```

結果(例):

      aws-cli/1.11.19 Python/2.7.10 Darwin/15.6.0 botocore/1.4.76

バージョンが古い場合は最新版に更新しましょう。

```bash:コマンド:
sudo -H pip install -U awscli
```


AWSアカウントの属性
-------------------

AWSアカウントがEC2-Classicに対応していないこと。

```bash:コマンド:
AWS_SUPPORT_PLATFORMS=$( \
         aws ec2 describe-account-attributes \
           --query 'AccountAttributes[?AttributeName == `supported-platforms`].AttributeValues[].AttributeValue' \
           --output text \
) \
        && echo ${AWS_SUPPORT_PLATFORMS}
```

結果:

      VPC

注釈: 'VPC'の他に'EC2'が表示される場合、別のアカウントを作成もしくは
  利用し てください。


0. 準備
=======


0.1. リージョンの決定
---------------------

変数の設定:

      export AWS_DEFAULT_REGION='ap-northeast-1'


0.2. 変数の確認:
----------------

プロファイルが想定のものになっていることを確認します。

変数の確認:

      aws configure list

結果(例):

            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile       ec2as_full-prjZ-mbp13        env    AWS_DEFAULT_PROFILE
      access_key     ****************XXXX shared-credentials-file
      secret_key     ****************XXXX shared-credentials-file
          region        ap-northeast-1        env    AWS_DEFAULT_REGION


0.3. VPCの指定
--------------

既存のVPCに割り当てられているCIDRブロックを確認します。

```bash:コマンド:
aws ec2 describe-vpcs \
        --query 'Vpcs[].CidrBlock'
```

結果(例):

      [
        "172.31.0.0/16",
        "10.192.0.0/16"
      ]

ここでは、10.192.0.0/16を範囲とするVPCを選択します。

変数の設定:

      VPC_CIDR='10.192.0.0/16'

VPC IDを取得します。

```bash:コマンド:
VPC_ID=$( \
        aws ec2 describe-vpcs \
          --filters Name=cidr,Values=${VPC_CIDR} \
          --query 'Vpcs[].VpcId' \
          --output text \
) \
        && echo ${VPC_ID}
```

結果(例):

      vpc-xxxxxxxx


1. 事前作業
===========

```bash:コマンド:
aws ec2 describe-vpcs \
        --vpc-id ${VPC_ID}
```

結果(例):

      {
        "Vpcs": [
          {
              "VpcId": "vpc-xxxxxxxx",
              "InstanceTenancy": "default",
              "State": "available",
              "DhcpOptionsId": "dopt-xxxxxxxx",
              "CidrBlock": "\ |VPC_CIDR|\ ",
              "IsDefault": false
          }
        ]
      }


2. VPC の削除
=============

変数の確認:

      cat << ETX

        VPC_ID: ${VPC_ID}

      ETX

```bash:コマンド:
aws ec2 delete-vpc \
        --vpc-id ${VPC_ID}
```

結果(例):

      (戻り値なし)


3. 事後作業
===========

```bash:コマンド:
aws ec2 describe-vpcs \
        --vpc-id ${VPC_ID}
```

結果(例):

      An error occurred (InvalidVpcID.NotFound) when calling the DescribeVpcs operation: The vpc ID 'vpc-xxxxxxxx' does not exist


完了
====
Oracle Database でリテラルの文字列配列をTABLEファンクションでレコードとして返す。

文字列配列のTYPE定義⇒TABLEファンクションでイケるやで彡(ﾟ)(ﾟ)

```sql
CREATE OR REPLACE TYPE tp_v_array IS TABLE OF VARCHAR2(4000);
/

SELECT * FROM TABLE(tp_v_array('a', 'b', 'c', 'xxx', 'ZZZ'));
```

結果は以下の通り。

```sql
SQL> CREATE OR REPLACE TYPE tp_v_array IS TABLE OF VARCHAR2(4000);
  2  /

Type created.

SQL> SELECT * FROM TABLE(tp_v_array('a', 'b', 'c', 'xxx', 'ZZZ'));

COLUMN_VALUE
--------------------------------------------------------------------------------
a
b
c
xxx
ZZZ

SQL>
```

あら^～～ちょっとオシャレわね～～彡(癶)(癶)
日本の祝日を JSON / CSV 形式で返す API

昨年・今年・来年の国民の祝日を、一覧として返すAPIです。

https://holidays-jp.github.io/

### 仕組み

- Google カレンダーの「日本の祝日」情報をもとに、JSON / CSV データを吐き出すスクリプトを作成
- GitHub Actions にてビルド
- ビルド結果のファイルを GitHub のリポジトリにプッシュ
- GitHub Pages にてホスティング

ビルドは定期的に実行され、内容は自動更新されます。

### URL

#### 一覧 (date)

https://holidays-jp.github.io/api/v1/date.json

```json
{
    "2016-12-23": "天皇誕生日",
    "2017-01-01": "元日",
    "2017-01-02": "元日 振替休日"
}
```

#### 一覧 (unixtime)

https://holidays-jp.github.io/api/v1/datetime.json

キーを `Y-m-d` ではなく unixtime として返す

```json
{
    "1482418800": "天皇誕生日",
    "1483196400": "元日",
    "1483282800": "元日 振替休日"
}
```

#### 年別 (date)

https://holidays-jp.github.io/api/v1/2017/date.json

指定された年の祝日だけを返す

```json
{
    "2017-01-01": "元日",
    "2017-01-02": "元日 振替休日",
    "2017-01-09": "成人の日"
}
```


#### 年別 (unixtime)

https://holidays-jp.github.io/api/v1/2017/datetime.json

```json
{
    "1483196400": "元日",
    "1483282800": "元日 振替休日",
    "1483887600": "成人の日"
}
```

### CSV形式

地味にCSV形式にも対応しています、URL末尾の拡張子部分を .csv にすれば CSV形式で返却されます。

#### 例: 一覧 (date)

https://holidays-jp.github.io/api/v1/date.csv

```
2017-01-01,元日
2017-01-02,"元日 振替休日"
2017-01-09,成人の日
```

### ライセンス
MITライセンス

### リンク

GitHub
https://github.com/holidays-jp/

紹介ブログ
https://blog.monaural.net/post/holidays-jp-api/

### 追記

- 2021.09.11
  - ビルド処理を Travis CI から GitHub Actions に移行しました
MVCとは何ぞというところを考えてみる

# はじめに
（以下は、会社を代表するものではなく、個人の意見です。）
こんにちは。

Advent Calendar今年初参加です。よろしくお願いします。

何を書こうか迷ったのですが、あまり背伸びして考えすぎても塩といった印象ですので
自分はせっかくなので普段触れているMVCフレームワークについて書こうと思います。

# 初めてフレームワークに触るということ
自分はおよそ11ヶ月前に、PHPフレームワーク実装デビューしました。
初めてなので正直何がなんだかわかりません。
ソースコードの密林に降り立つおれ。

フレームワークは、アプリケーションの実装を手軽にするもの。
（フレームワークに限らず）便利なツールはそこを突き詰めたものであるがゆえに
たとえわけがわかっていなくてもある程度実装できてしまいます。

[安定依存の原則](http://d.hatena.ne.jp/asakichy/20090204/1233714437)

ですが少しでも仕組みを理解して、あ、

# MVCとは一体何
おい君。逃げちゃだめだ。

[MVCの流れを簡単にまとめてみる](http://qiita.com/hirokidaichi/items/0de5ca336de862cc91bd)
[MVC、本当にわかってますか？](http://qiita.com/tshinsay/items/5b1724baf32b8b5113c2)

一言でMVCといっても、人によって解釈が異なりますが
一般的にはUIと内部ロジックを分離するデザインパターンのことで

- model 
ビジネスロジック
- view: 
ユーザーインターフェイス
- controller: 
入力を受け取りmodelとviewへの命令に変換する

この３つの頭文字をとったものです。

改めて考えてみると、**アプリケーションの内容や使用用途によって解釈が異なる**
のほうが的を射ているでしょうか。

# MVCのいいところ

MVCのメリットは**機能が分離して、独立する**から

1. 分業によりそれぞれの専門家（Viewならデザイナーさんetc）が集中しやすい
2. 一つの機能がほかの機能部分の変更による影響を受けにくいので保守性が高まる

ところ、とされています。

この2のほうの話、脇道にそれるかもしれませんが以下を思い出します。

[単一責任原則](http://d.hatena.ne.jp/asakichy/20110808/1312754662)

>変更する理由が同じものは集める、変更する理由が違うものは分ける。

責任（機能）の分離は保守性を高めたいエンジニアの本能なのかな。
ということは現行のソースコードでも、機能が依存しあっているところに注目だな。
# webアプリにおけるMVC
webアプリにおけるMVCの特徴は

**インターネットだからHTTPを使うところだ！！そしてHTTPはステートレス。**

更に言うと個人情報を扱うならSSL通信が主流の時代。
つまり、`$_SESSSION`機能でユーザーが入力した情報を引き回すということです。

# MVC実装の注意点

MVCモデルを実装するときの注意点として
**「ビジネスロジックはmodelに書いて！ファットコントローラはダメ！ゼッタイ！」**
とよく言われます。

ファットコントローラというのは、色んな内部処理をコントローラに詰め込んでしまって
ソースコードが膨大かつ読みづらくなってしまうこと。

そして誰もが思う。

MVCを使うためにMVCを使っているわけではないはず、と。

# そもそもMVC古くない？

こんな記事を見つけました。

[私がMVCフレームワークをもはや使わない理由](https://www.infoq.com/jp/articles/no-more-mvc-frameworks)

内容としては、MVCモデルという概念を捨てて、関数型プログラミングで実装をシンプルにしようというもの。

>問題は、Andre Medeirosが言うようにMVCパターンは“インタラクティブ” (リアクティブではなく)だということです。従来のMVCでは、アクション(コントローラ)はモデルの更新メソッドを呼び、成功したか失敗したかでビューの更新方法が変わります。Andreが指摘するように、この方法が絶対というわけではありません。

たしかに、アプリケーションによってはあっという間にレガシーになってしまうメソッドを書くよりも
内容が単なる計算なのだから計算を書けばいいよなあ
という時もありそう。

# 仕様からMVCを再解釈しよう

もう一度、webアプリの開発をするという観点に立ち返ってMVC実装をしよう。
それぞれにどのような分担をさせるかは、個人が自覚しているかチーム内で共有されていれば
むしろ再解釈がされていてしかるべきではないでしょうか。
相対的に多少コントローラがファットになっても、目的にかなっていて必要な記述ならば問題ないはず。

たとえば

- model 
DBにまつわるビジネスロジックだけ。
- view:
ユーザーインターフェイス。アプリ設定値（グローバル）。**ユーザー入力値起因の計算はここに書いちゃう**
- controller: 
モデルへの命令。バリデーション。セッション情報の管理。viewに出力する値の管理。などなど

とひとまず決めたとします。
### 決めると。
- 色んな情報が整理できて、混乱せず設計できる。

アプリのリリース日⇒アプリケーションに紐づく設定値⇒設定ファイルに一箇所でだけ代入してグローバルに引き回そう
とある入力値A⇒セッションで引き回す（んだけどDBにはかかわらない）値⇒controllerで処理を書こう
とある入力値B⇒クライアントに報告する値⇒DBに格納する値⇒controllerでバリデーションと型判定を通して、モデルに渡してupdate
■pt(X商品を◯個購入。X商品は一個▲pt）⇒ユーザーに紐づく「◯個」の部分はセッションで引き回す。「◯×▲」の計算はviewに書く。

### ⇒当初の目的（いいところ）だった責任の分離による保守性の担保をアプリケーションに合わせて適宜行える。

# まとめ
MVCの仕組みや使われている経緯、意図を知ることで
そもそもの目的やあらかじめ気をつけておくべきこと、特に気にしなくてもよいことが明確になります。
更に使用するフレームワークが変わった時、使用言語が変わった時など
それぞれどこが違う（変えたいから変わった）のかがわかり理解しやすくなります。

おしまい。
Androidでjava.util.loggingのINFOより低レベルのログを出力する方法

# なんで標準のandroid.util.Logを使わないの？

普通はandroid.util.Logを使えばいいかと思います。
Android用じゃないライブラリを使ったときに、内部で埋め込まれてるDEBUGレベルのログが出力されなくて困ったときの対応でした。

# なんで出力されないのか

以下のStackoverflowの回答の通り。

http://stackoverflow.com/questions/4561345/how-to-configure-java-util-logging-on-android

> What is broken is the default logging handler shipped with Android, it ignores any log messages with level finer than INFO. You don't see DEBUG etc. messages.
>
> The reason is the call to Log.isLoggable() in AndroidHandler.java:
> https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/logging/AndroidHandler.java
>

# 対応方法

上記の回答とともに紹介されているように、独自のHandlerを用意してログレベルを強制的に変更することで出力されるようになりました。

```
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    AndroidLoggingHandler.reset(new AndroidLoggingHandler());
    java.util.logging.Logger.getLogger("my.category").setLevel(Level.FINEST);
...
```

デバッグ目的ならこれでいいかなと。地味に助かる！
Bookmarklet に Favicon を指定する方法 for Google Chrome

下記の記事の通りです（ぇ
[How to add favicons to bookmarklets in Chrome — Marc Jenkins](https://marcjenkins.co.uk/how-to-add-favicons-to-bookmarklets-in-chrome/)

HTML が弄れる前提で話を進めますと、

1. ブックマークをエクスポート  
  以下を含んだ状態にしておいてください
    - 使いたい Favicon が入ったブックマーク
    - Favicon を付けたいブックマーク
2. エクスポートしたブックマークをエディタで表示
3. Favicon を含んだ A タグの ICON 属性をコピー
4. Favicon を付けたいブックマークの A タグにペースト
5. 保存してブックマークにインポート

以上！

これでページタイトルなしのブックマークバーを使い倒せます Oh!Yes!