OmniAICreator/Qiita-1.07M huggingface dataset:
最強プログラミング勉強術。システムエンジニアの高速Wi-fiカフェ自習室なら特別なスタバ？スタートアップカフェのあるスターバックスTSUTAYAブックストアはいかが？

# たとえば大阪なら、関西大学スターバックス&ツタヤブックス「MeRISE」店

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/c3ec844f-f162-f762-bcc1-392c19a60712.png)

[MeRISEでできること - 関西大学 梅田キャンパス KANDAI Me RISE](http://www.kansai-u.ac.jp/umeda/about/)

# 費用

たとえば抹茶ティーラテ一杯分の値段なら、400円ぐらい。

好きなものをどうぞ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/6e1413ae-bc59-9271-6a0a-83d6651ba919.png)

# お客さんのマナーが良くて基本的に静か

たまにカリカリと鉛筆の音を立てる人がいたりもするけど。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/a1dab277-4b73-8ea7-0bb2-c96e88406280.png)

# ブックカフェなのでたくさん本がある

MeRISEにはプログラミングの専門書も多少ある。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/9e1b7318-d536-0168-b05f-b444a0590d44.png)

# 早起きして混雑時を避ける

いちど席を取ってしまえば勝ち？

マナーあるエンジニアは2時間に1度ぐらいは追加オーダー。

# ネカフェに比べても費用は半分ぐらい。

人生の大いなる勉強だと思ったら安すぎる。

# 本屋と比べると費用は激しく安い

色んな本が読み放題。

本は買ってしまうと読まなるので積読防止。

「手に入っていない本をちら見する」のが最強の学習法。脳科学的に言ってもきっと、たぶん。実感。


# カラオケも良いけどWi-fi環境最悪だったりする。

dockerが使えない。

# 高速Wi-fi完備

スターバックスではなくMeRISE専用の超快適Wi-Fiがあるので巨大DockerImageのダウンロードでも何でもできる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/bc11c15d-cc43-bca6-7c16-5a5c0132eb47.png)


# [スタートアップカフェ大阪 KANDAI MeRISE](http://startupcafe-ku.osaka/)

無料相談とか受けられるらしい。

僕は今のところ受けたことはない。

# 起業家向けのイベントとかよくやってる

遠巻きに見つめることはある。

あと朝の英語学習会とか。

# 本を開くだけで別ジャンルの勉強になる。

デザインやプレゼンテーションや心理学や。

エンジニアという1ジャンルに閉じこもってはだめだ‥！

というか単純に楽しすぎて脳の刺激がシナプスシナプス！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/f3f35226-5cbb-4725-65ff-7919b441b53b.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/e496ef5a-e138-6223-7b7b-e6982e64fc7e.png)

# カフェのほうが自宅より集中できる

そんな統計があったような。

---

[yumainaura merise - Google Search](https://www.google.co.jp/search?ei=w-keXJ6cLcao8QXog6-YDg&q=yumainaura+merise&oq=yumainaura+merise&gs_l=psy-ab.3..33i160.1976.5292..5459...4.0..0.126.1160.4j7......0....1..gws-wiz.C39eSoICbpE)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
LINE@料金計算パッケージを公開しました

[LINE@ 公式ブログ](http://blog-at.line.me/archives/52626249.html) にて、2019年春より新たな料金プランに切り替わっていくという告知がありました。ユーザにとって特に大きいのは『従量制の追加メッセージ料金』かと思います。
計算方法自体は難しいものではありませんが、個々で開発するのも面倒な話。
私が現在開発中のサービスで利用するために作ったライブラリをPackagistにて公開しましたので、LINE@と絡むBot・Webサービスを開発する際はどうぞご利用ください。


## 概要

* パッケージ名: fullkawa/line-at-cost
* LINE@の月額利用料金(**税別**)を計算します。
 * 年間利用料(すなわち、プレミアムID)は含まれません。


## インストール方法

`composer require fullkawa/line-at-cost`


## 使い方

### 2018年12月現在の料金体系の場合

```
use LineAtCost\PlanFactory;
use LineAtCost\Estimator;

$factory = new PlanFactory();

$plan_free = $factory->getInstance(1); // Free plan
$cost_free = Estimator::estimate($plan_free);
$this->assertEquals(0, $cost_free);

$plan_basic = $factory->getInstance(2); // Basic plan
$cost_basic = Estimator::estimate($plan_basic);
$this->assertEquals(5000, $cost_basic);

$plan_pro = $factory->getInstance(4); // Pro plan
$cost_pro = Estimator::estimate($plan_pro);
$this->assertEquals(30000, $cost_pro);
```

まあ、これくらいならわざわざライブラリを使う必要もないでしょうが。

### 2019年春以降の料金体系の場合

本命はこちらです。
メッセージ配信数(message_count)を渡すと、プランごとの月額利用料と追加メッセージ料金を足した金額を返します。もちろん、無料で利用できる分は差し引かれて計算されます。

```
use LineAtCost\PlanFactory;
use LineAtCost\Estimator;

$factory = new PlanFactory(PlanFactory::TARGET_2019);

$plan_free = $factory->getInstance(1); // Free plan
$usages_free = ['message_count' => 1000];
$cost_free = Estimator::estimate($plan_free, $usages_free);
$this->assertEquals(0, $cost_free);

$plan_light = $factory->getInstance(2); // Light plan
$usages_light = ['message_count' => 16000];
$cost_light = Estimator::estimate($plan_light, $usages_light);
$this->assertEquals(10000, $cost_light);

$plan_standard = $factory->getInstance(3); // Standard plan
$usages_standard = ['message_count' => 145000];
$cost_standard = Estimator::estimate($plan_standard, $usages_standard);
$this->assertEquals(305000, $cost_standard);
```

### その他の使い方

このように、料金体系をまたいで使うこともできます。

```
use LineAtCost\PlanFactory;
use LineAtCost\Estimator;

$factory = new PlanFactory(PlanFactory::TARGET_ALL);

$plan_2016free = $factory->getInstance(PlanFactory::PLAN2016FREE_ID);
$cost_2016free = Estimator::estimate($plan_2016free);
$this->assertEquals(0, $cost_2016free);

$plan_2019light = $factory->getInstance(PlanFactory::PLAN2019LIGHT_ID);
$usages_2019light = ['message_count' => 16000];
$cost_2019light = Estimator::estimate($plan_2019light, $usages_2019light);
$this->assertEquals(10000, $cost_2019light);
```

## 利用できる定数の一覧

```
class PlanFactory
{
    const TARGET_ALL = 0;

    /**
     * 2016年6月からの料金プランのみ
     * @var integer
     */
    const TARGET_2016 = 10;

    const PLAN2016FREE_ID = 11; // フリー
    const PLAN2016BASIC_ID = 12; // ベーシック
    const PLAN2016PRO_ID = 13; // プロ(月額21,600円(税込))
    const PLAN2016PRO2_ID = 14; // プロ(月額32,400円(税込))
    const PLAN2016DEVELOPER_ID = 19; // Developer Trial

    /**
     * 2019年春からの料金プランのみ
     * @var integer
     */
    const TARGET_2019 = 20;

    const PLAN2019FREE_ID = 21; // フリー
    const PLAN2019LIGHT_ID = 22; // ライト
    const PLAN2019STANDARD_ID = 23; // スタンダード
```
機械学習の力で、おもてなしを量産する

ひとりひとりに、心のこもったメッセージを届けたい。そんな機会が時々はあるでしょう。
思いを胸にハガキやメッセージカードに言葉をつづったあなたは愕然とするはずです。

* Backspaceで文字けせねぇ
* Ctrl+Zで取り消しできねぇ
* なにより俺の文字汚すぎへん？

普段はいつでも修正可能な電子の世界に身をゆだね、ペンを握るのはAmazonの受け取りサインの時だけ！という生活を続ける俺たちに、紙とペンでしかも大切なメッセージをつづるのは、あまりに高度なタスクになりました。

そこで、技術の力でおもてなしの心を量産することにしました(発想が〇〇)。作成したアプリが以下になります。

<img src="https://user-images.githubusercontent.com/544269/46349121-239ccd80-c68c-11e8-9abc-d2e461d313c4.gif" width="500" alt="demo">

(デモとして、今年引退した[安室奈美恵](https://www.amazon.co.jp/Finally-%E5%AE%89%E5%AE%A4%E5%A5%88%E7%BE%8E%E6%81%B5/dp/B075KHX2T9)さんのクリアファイルを使わせていただきました)

1. おもてなされる側は、配布された台紙に印刷されたQRコードからアプリにアクセスする
2. アクセスしてカメラの利用を許可すると、ウェルカムメッセージが表示される
3. 顔が映ると、男性なら王冠、女性ならティアラが表示される(認識されるまでは、ハートのサークルが表示される)

顔を認識した際に表示する画像は、個別に変更することも可能です。そのため、その人にあった画像、そしてメッセージを添えることができます。「顔が認識された時」に表示されるというインタラクションは、おもてなし感を高めてくれます。

アプリのポイントは、以下2点になります。

* 軽量な顔認識機能の実装
* 参加者にアクセス先のURLを伝えるための、メッセージカード印刷機能

これから順に解説をしていきたいと思います。実装は以下で公開しているため、おもてなしを量産したいときにご利用ください。

https://github.com/icoxfog417/decolo


## 軽量な顔認識機能の実装

「顔を見て言葉を伝える」これはおもてなしの根幹です。そのため、顔認識機能はおもてなしの量産にあたっては欠かせない機能ということができるでしょう。

近年では、[TensorFlow.js](https://js.tensorflow.org/)の登場もあり、気軽にブラウザ上で機械学習を実行できるようになりました。そのため、TensorFlow.jsを利用した顔認識ライブラリも検索すればいくつか見つかります。しかし、一点大きな問題があります。

**重い！**

これにつきます。おもてなしをしたい方々は、もちろん機械学習に詳しいわけではありません。ブラウザの"Loading..."を見て、「あ、TensorFlow.jsか。ダウンロードしばらく時間かかるな。」なんてことは思ってくれません。普通のサイトばりにサクッと動く必要があります。

今回は、[clmtrackr](https://github.com/auduno/clmtrackr)というライブラリを使いました。SVMベースの顔認識機で、自前での学習も可能になっています。顔の特徴点をかなり細かくとることができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/25990/40bbf75f-7fae-bdc6-2339-f743027a8bd7.png)

基になっているのは、[Deformable Model Fitting by Regularized Landmark Mean-Shift](https://ci2cv.net/media/papers/2011_IJCV_Saragih.pdf)という論文です。こちらは顔認識というよりは、関連する複数のランドマークの位置(例えば目と鼻の位置)をどう最適化するのかということがメインの研究になります。発表は2011年とDNN全盛となる前の時代のものですが、特徴点の認識精度が仮にあまり高くなかったとしても、特徴点間の関係の蓋然性から妥当なものを絞り込む、というアイデアはいまでも使えるんじゃないかと思います。

実際に試すと顔の回転に結構弱いのですが、スマホに顔を向ける際はおおむね正面であるため、これで良しとします。

## メッセージカード印刷機能

アプリ自体は、WebアプリケーションにしてHerokuにデプロイすれば配置はできます。問題は、アクセス先URLを参加者に伝えなければならないという点です。しかも、参加者に負担をかけずにです(URLを手で打ち込ませるなどもってのほか)。最も良いのは、宅配便の再配達受付でも使われるQRコードです。

今回はアクセス先のURLを変えることで個々人のメッセージを変えているため、QRコードも個々人によって異なります。「参加者それぞれのQRコードを含むメッセージカードを作成する」これが次なるミッションとなります。作成は手で行うにはハードすぎるため、こちらも量産を検討します。

最終的に、QRコードの作成には[qrcode](https://github.com/lincolnloop/python-qrcode)、台紙の作成にパワーポイントの作成が可能な[python-pptx](https://github.com/scanny/python-pptx)を使用しました。実際には、以下のような台紙が作成できます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25990/5cd9b179-9fc6-fb63-9aaa-a908f4df8a93.png" width=300>

あとは、これを印刷してきれいなメッセージカードに貼れば完成です。

・・・そう、ここまで自動化しても、「台紙を紙から切り出し(A4 1枚に6枚印刷されるので、はさみで切りだす必要がある)、メッセージカードに糊で貼る」という作業が残るのです。

一つ一つの台紙をメッセージカードに貼るときに、感謝の思いを込めて丹精に貼りましょう。そこに、量産しきれないおもてなしが生まれるはずです(いい感じにまとめた)。
faiss-gpuがhas no attribute エラーをはくときの対処

## 環境
Ubuntu: 18.04
Anaconda: 
cuda 9.0

faiss-gpuをcondaでインストールした(conda install faiss-gpu -c pytorch)ときに、
$ import faiss
は通るのだが、faissの関数を使おうとするとhas no attributeエラーが出されてしまっていた。

もちろんcudaのインストールはできている。
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

## 解決策
$ conda install faiss-gpu cuda90 -c pytorch
このようにすることでfaissがつかえるようになった。

## 考察
最初anacondaでcuda環境を使用する際のドライバ的なものを入れていなかったのかとも考えたが、であればpytorchでgpu環境を今まで使えていたのが謎。同社製なので、、
ともあれ使えるようにはなったが、anacondaで入れたcudaライブラリは何だったのだろうか、。
そのへんご存知の方教えていただければ幸いです。
化合物による機械学習のベンチマークMoleculeNet

# はじめに
さて、DeepChemをインストールしてこれからDeepLearningしよう！と思うところまでは
いいのですが、次に悩むのはどのデータを用いて予測モデルを作成するかです。
公開されているデータを使うとして、どれを使うか、そのデータを使って作成した予測モデルの
精度がどの程度よいのか、といったことに悩むと思います。
色々調べたところ、MoleculeNetというベンチマークが公開されていることがわかりました。

# MoleculeNetとは
ざっくり説明するとこんな感じです。
- 分子機械学習のための大規模ベンチマークである。
- いくつかの公開データセットを整理し、評価のための測定基準を確立し、これまでに提案されている分子の特徴化、学習アルゴリズムについて高品質なオープンソース実装を提供。
-  実装はDeepChemの一部として提供されます。


# どんな公開データセットを使っているか
以下のデータが用いられている
- Quantum MechanicsからQM7, QM7b, QM8, QM9
- Physical ChemistoryからESOL、Lipophilicity, FreeSolv
- BiophysicsからHIV, PCBA, PDBbind, MUV, BASE
- PhysiologyからBBBP, Tox21, Toxcast, SIDER, ClinTox

# どんな特徴が使われているか
以下の特徴が使われている。
- ECFP
- Coulomb Matrix
- Grid Featurizer
- Symmetory Function
- Graph Convoluations
- Weav

# どんな予測手法(モデルが使われているか)
- Logistic回帰
- SVM
- カーネルリッジ回帰
- ランダムフォレスト
- 勾配ブースティング
- Multitask/Singletask Network
- Bypass Multitask Networks
- Influcence Relevance Voting
- Graph Convolutional method
- Weave
- Directed Acyclic Graph Model
- Deep Tensor Neural Networks
- ANI-1
- Message Passing Neural Networks

# Molecule Netのデータはどうやって得られるの？
さて、DeepChemに含まれているのであれば、それを使ってモデルを作ればいいですね。
ただ他の手法でも使いたいので、それだけ使えるデータがほしいですよね。
あがたいことにデータをまとめて、Gibhubに公開してくれている人がいました！

# 参考文献
- [公式サイト](http://moleculenet.ai/)
- [MoleculeNet論文](https://arxiv.org/abs/1703.00564)
- [Githubに誰かがまとめてくれているデータ](https://github.com/GLambard/Molecules_Dataset_Collection)
全プログラマはQiitaをスタバでスクリーンセーバーにしなさい！永遠無料GoogleAdwords的な？勝手にSEO業者？リアル口コミで世界平和エンジニアリングを広めたい社会実験的な。

ノートPCの画面開いたまま放置して席を立つ。

操作できる画面に見えるが、実はスクリーンセーバー。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/b7cb1f31-09c9-33e4-b2e8-b4c3ff96c2b9.png)


# Qiitaステッカーとかより効果高そうじゃない？

家政婦は見た！

人の興味関心は「のぞき見」で最大化される。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/ad638346-5984-e49a-1189-1a2cba5f4339.png)


# 別名、街を走る街宣車的コマーシャル

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/28b4968b-5b6d-2126-e36c-a929bda8a70c.png)



# 我々QiiterはQiittaの広告塔として、プログラミングを広め、世界平和を実現したい

賛同する人はこの指止まるな‥！

今すぐ、このページをそっ閉じしてスタバへGO!

タリーズでも良いけど最速Wi-Fi環境は必須だよね？

エンジニアが多そうなスタートアップカフェがあるツタヤブックス+スターバックスとか良いかも？

大穴狙いならWi2でmobile point のWi-fi使えるようにしてマクドナルドもありかも？

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/e91e84c1-9899-88dc-a9f7-9cc1d7b5dba7.png)



# ついでに自分のアカウントも広告。

Macのスクリーンショットはフォルダごとに何枚も切り替えられるので。試してみても良いかも。

報酬があってこそモチベも上がるよね？

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/a26fc7e3-51fa-2b7d-d9a7-dc65c8187f20.png)


スタバにいるとき、謎にフォローされたりいいねされたら、それは広告効果の実現かも？と妄想でモチベーションを上げる方法でもある。エンジニアリングに必要なのは空想だと思うんだ…

みんなで楽しい未来を実現する幸福論。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/d0d37272-c748-990c-2655-e1e94c7af20e.png)

# GoogleAdwords要らずの無料広告とは？

スクリーンセーバーですよ。

# SEO要らずの無料広告とは？

スタバでスクリーンセーバーですよ。


# Macでのやり方

[Mac初心者？スクリーンセーバー設定ができない？アニメーションなしの1枚静止画像にしたい？スクリーンショットを使いたい？罠だらけで死にたくなった記録。 - Qiita](https://qiita.com/YumaInaura/items/8c815b9f622f47c792ca)

[スクリーンセーバー yumainaura - Google Search](https://www.google.co.jp/search?q=%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%BB%E3%83%BC%E3%83%90%E3%83%BC+yumainaura&oq=%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%BB%E3%83%BC%E3%83%90%E3%83%BC+yumainaura&aqs=chrome..69i57j69i60l3.4756j0j7&sourceid=chrome&ie=UTF-8)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Mac Vim で iceberg のテーマを使う ( NeoBundle)

# はじめに

* vim で icebergのテーマを使えるようにします

![image.png](https://qiita-image-store.s3.amazonaws.com/0/108052/588065bb-51c7-397d-bd8b-1536d3514afb.png)
https://github.com/cocopon/iceberg.vim


# やり方 (NeoBundle)

* .vimrcに以下を追加 

```
NeoBundle 'cocopon/iceberg.vim'
```

* Install (vimを起動して、以下を実行)

```
:NeoBundleInstall
```

* .vimrcに以下を追加

```
colorscheme iceberg
```
[Rails]form_withでモデルを送るメリット(form_forのメリット）

form_withでモデルを記載した時、つまりform_forで書いた時のメリットがイマイチ分からなかったので、簡単にまとめてみました。


## モデルの存在有無で自動的にcreateかupdateに振り分けてくれる
`form_with model:@user`とした時に`@user`が既に存在していればusersコントローラのupdateに、存在していなければcreateアクションに指定せずとも勝手にとんでいきます。
もし特定のアクションにとばしたい場合はurlを指定してください。

## paramsがモデルに紐づいた形式になる
アクションが受け取るparamsが`params[:user][:email]`とか`params[:user][:name]`などになるので、ユーザー情報を更新したい時などは一々全部書かなくても`params[:user]`だけで全部Getできる。

```ruby:sample.rb
# form_with url:user/create（form_tag）で取得した場合
def create
 user = User.new(name: params[:name], email: params[:email])
 user.save
end

# form_with model:@user （form_for）で取得した場合
def create
 user = User.new(params[:user])
 user.save
end
```

ただ、上記はストロングパラメータをガン無視していますので、実際には上記のような使い方はできません。


## おまけ
ストロングパラメータを使うと下記の様になります。

```ruby:sample.rb
# form_with url:user/create（form_tag）で取得した場合
def create
 user = User.new(user_params)
 user.save
end

private
 def user_params
   params.permit(:name, :email)
 end


# form_with model:@user （form_for）で取得した場合
def create
 user = User.new(user_params)
 user.save
end

private
 def user_params
   params.require(:user).permit(:name, :email)
 end
```

なんか記述量が増えてしまった。。。

ただ、HTML側の記述量はcreateとupdateで場合わけしない分減るので、全体としてはコード量は減るんですかね。他のメリットデメリットを知っている方いたら教えていただけると幸いです。
Mac設定の初心者 虎の巻。ホットコーナーにスクリーンセーバー開始を割り当てる。全画面プレビュー用にもおすすめ。ログイン画面になる？バグ？不具合？設定できない罠も解説。

関連

[Mac初心者？スクリーンセーバー設定ができない？アニメーションなしの1枚静止画像にしたい？スクリーンショットを使いたい？罠だらけで死にたくなった記録。 - Qiita](https://qiita.com/YumaInaura/items/8c815b9f622f47c792ca)

# 環境設定で「ホットコーナー」とか検索してデスクトップ設定を選ぶ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/1a822aa4-4fe3-7208-d0e8-a67a131d1155.png)

# 右下にホットコーナー設定があるので好きな角に「スクリーンセーバー開始」を割り当てる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/28cf06c8-b258-182a-8e9a-2c561ac64fcd.png)

# 右下にカーソルを移動させると、スクリーンセーバーが開始する。

どうですか。ブラジルの人たち。

# え、開始しない？ログイン画面になる？


![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/85c17d83-df92-55cd-a2b3-ff3b12f99e39.png)


# それは「スクリーンセーバー」モードになってから、すぐカーソルを動かしているからかも？

カーソルを右下にそっと置く。右手は添えるだけ。しばらく放置。動かさない。それが大事。



# 環境

High Sierra

はーいしえら









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
【rails5】ＭＶＣとルーティングについてのメモ

##【ＭＶＣのルーティングについてのメモ】

(2018/12/24更新)

・アクション＝ブラウザからのリクエストに対する処理。アクションはモデルを呼び出したり、ページを表示することが出来る。

・メソッド＝インスタンスに対する振る舞い。

コントローラーはアクション名と同じ名前のビューファイルを探しにいく。

Usersコントローラーのnewアクションは、new.html.erbファイルを読みにいく。

つまり、**aaaコントローラー内でXXXXXアクションを定義すれば、それに対応するビューファイル（aaa/XXXXX.html.erb)を読めるよ**ということ。

```
app/views/aaaコントローラー/XXXXXアクション.html.erb
```

**コントローラーのアクションは、入り口になるルーティング（URLとhttpリクエスト、ビューファイルの名前）を合わせて考える必要がある。**

コントローラーに定義したインスタンス変数は、ビューからも見ることが出来る。

アクションからビューに受け渡したいデータをインスタンス変数に入れることが、アクションの基本的役割の一つ。

・モデル=データとデータに関するアプリ特有の処理を、オブジェクトとして実装したもの。
データベースへの保存や、ビューで表示させるための読み込みもモデルが行う。

・コントローラーは複数系、モデルは単数系で表す。

・ビュー=ページの見た目

・ルーティング
ブラウザから受けとったURLとhttpリクエスト（get,post,patch,delete)を、どのコントローラーのどのアクションで処理するかを定義したもの。

ある機能をアプリケーションに加えるためには、まずルーティングにどのコントローラーのどのアクションを使って処理するかを決める必要がある。

```
getはページの表示
postは新規作成
patchは更新
deleteは削除
```
Mac初心者？スクリーンセーバー設定ができない？アニメーションなしの1枚静止画像にしたい？スクリーンショットを使いたい？罠だらけで死にたくなった記録。

# まとめ

- 1枚の画像ではなくフォルダを選ぶ形式っぽい。スクリーンセーバーなんて使ったことなかったしと言い訳するエンジニア。
- 「1枚の画像だけが入っている、スクリーンショット専用フォトアルバム」を作った。
- スクリーンセーバー設定で「フォトストリーム」を選んだ。
- テーマで「クラシック」を選ぶと1枚の静止画にできた。
- ホットコーナーで「スクリーンセーバー開始」を右下あたりに割り当てておくと、全画面プレビューができて便利。


# 好きな画面のスクリーンショットを撮っておく

スクリーンショットを使いたい場合は。

Command+Shift+4 で範囲選択して保存 (1ボタンで全画面の撮り方なんて知らない)


# 撮影したスクリーンショットを、MacのPhotoStreamに保存しておく

デフォルトではデスクトップに画像が保存されるようになっていた気がする。

右クリックから「共有」を選んでPhotoに保存。(共有、の中にあるんですよ‥！)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/62ca795f-885d-89b3-7ec5-c1d91a83f55a.png)


# Mac環境設定からスクリーンセーバー設定へ進む

右上の検索欄で「スクリーン」とか入力するとハイライトされて見つけやすいかも？

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/a923b613-2fa9-3ba3-c9ef-cf9731413b98.png)


# スクリーンセーバーの参照元をPhotoライブラリからにして選ぶ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/e812e985-32bf-41c3-a252-bb0d06138b16.png)


# Loading

たくさん写真が入ったフォルダを選んでしまうと、Loadingのまま画面が固まって、しばらく何もできなくなったりする。

1枚の画像ではなく、フォルダを選ぶ形式みたいなので注意。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/876236de-36cc-4f54-29f5-ee29b3186608.png)

# プレビューを見ると、複数の写真が浮かび上がってくるのが分かるだろう。

それは重たいはずだ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/da294025-2b9c-f304-41c4-2057449d293b.png)

# 1枚だけ選ぶ方法は、Photoアルバムに1枚だけ写真を入れればよいはず。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/9308b3ad-e861-cdd2-6f74-54da96833073.png)

# 写真をアルバムに追加する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/8cd50220-f713-418b-22f3-64d86ed66263.png)

# 1枚絵っぽいFlip-upというテーマを選んでみる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/6c8c34c0-dbcd-d957-0593-ddd7d4590a73.png)

# さっき作ったアルバムを選ぶ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/cbf02138-8aac-28ca-b301-178de2715189.png)

# 設定できたっぽい

ただ静止画の1枚絵ではない。アニメーションしてしまう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/f9231a6d-a994-f7ff-11cf-1353c9299eff.png)

# やりたかったこと

スクリーンセーバーだけどスクリーンセーバーに見えないスクリーンセーバーもどき。

# テーマを切り替えてみる

いちどフォルダを選んでさえしまえば、テーマを切り替えると、写真はそのままで効果だけをプレビューすることができる。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/6c555f8d-ce6a-43f1-a134-f87d84dcc3cb.png)

# クラシックというテーマが静止画っぽい？

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/1278bdc2-f49c-6642-5d0e-bc822d7760d3.png)

# なぜか全画面プレビューボタンがなくなる

Why japanese people....

# ホットコーナーをスクリーンセーバー開始に割り当ててみる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/19f2832d-94ab-e644-a94d-d1cb4017968d.png)

# ついに成功‥！長かった‥！

1日が終了するレベルで疲れた。

画面に見えるけど実はスクリーンショット。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/b302dbf0-d781-48af-086a-3aeea4640587.png)

# キーボードに触るとログイン画面開始

自分でも「あれ、何この画面？」と思って騙された。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/968409d1-ada4-d079-d25d-4a3d86d6e55c.png)

# 今気付いたけどこれ、自分が離席中に誰か触った人がいないかのセキュリティ対策にもならない？

ごく限定的に。

気休め程度に。








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Mac iTerm で iceberg のテーマを使う

# はじめに

* Mac iTerm で iceberg のテーマを使えるようにします

![image.png](https://qiita-image-store.s3.amazonaws.com/0/108052/56548359-e39d-073e-f0ca-e76ff6bf6dd7.png)

https://github.com/Arc0re/Iceberg-iTerm2

# やり方

* ファイルダウンロード

```
curl -O https://raw.githubusercontent.com/Arc0re/Iceberg-iTerm2/master/iceberg.itermcolors
```

* itermで設定

```
iTerm >> Preferences >> Profiles >> Colors tab >> Color Presets.. 
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/108052/ccba0094-28f2-ee20-4539-888d9edd1d0c.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/108052/e1ea9282-014d-4f12-e790-906198322e7e.png)

* ココでダウンロードしたファイルを選択

* importしたあとは、上図のように、`iceberg' が使えるようになります

# ls で色を付けるためには

以下を 足しましょう。 `ls -G` じゃないと色は付きません

```
alias ls='ls -G'
```
Homesteadをインストールしてローカル環境を作った時のメモ

### 使用状況 -v

* Mojave v10.14.2
* Homebrew v1.8.6
* PHP v7.1.19
* Composer v1.8.0
* Vagrant v2.2.2
* virtualbox v5.2.22

***
### Homesteadをインストール
Homesteadをプロジェクトにインストール(virtualboxを選択する)

```
vagrant box add laravel/homestead
```

Homesteadリポジトリをクローン

```
git clone https://github.com/laravel/homestead.git homestead
```

homesteadに移動してHomestead.yaml設定ファイルを生成

```
bash init.sh
```

`Homestead initialized!`と言われたら、仮想マシン起動

```
vagrant up
```

***
### memo
`the path to your private key does not exist.`
と言われてるのでホームディレクトリに戻って
`ls -la I grep .ssh`
SSH鍵ファイル確認
id_rsa と id_rsa.pub が表示されなければ作成する
`ssh-keygen -t rsa`
で作成
`Enter file in which to save the key`
と聞かれ
そのまま enter
`Enter passphrase`　と聞かれ
パスワード入力。
***

起動

```
vagrant up
```

ログイン

```
vagrant ssh
```

### laravelのインストール
Homestead.yamlのデフォルトに合わせて、codeディレクトリも作成

```
composer create-project --prefer-dist laravel/laravel code
```

http://192.168.10.10/  で確認

作成したcodeディレクトリを/vagrant/codeに移動

```
mv code /vagrant/code
```

ログアウトして
Homestead.yamlの編集

```
//foldersのmapを
folders:
    - map: ~/code
      to: /home/vagrant/code
      
//boxのディレクトリも追加して編集
folders:
    - map: ~/homestead/code
      to: /home/vagrant/code
```

再起動してymlを反映

```
vagrant reload --provision
```

現れたcodeフォルダのlaravelが編集できるようになりました♫

***
### memo
ボックス表示

```
vagrant box list
```
`laravel/homestead (virtualbox, 6.4.0)`と表示

ボックスの削除

```
vagrant box remove laravel/homestead
```
または

```
vagrant box remove laravel/homestead --box-version 0.5.0
```
複数ある場合はバージョンを指定


***
### memo
反省点
valetでいいんじゃないか？と思いつつも、使わないと忘れるのでvagrantに...
codeフォルダを表示させるのにかなり苦戦...
SSH鍵ファイルの勉強もしなきゃな...


参考にさせて頂いたサイト：ありがとうございます。

* [MacBook ProでHomesteadを使ったLaravelのローカル開発環境構築手順](https://qiita.com/yamaji_daisuke/items/e2b1897f07533e2b0c7d)
* [Laravel 5.7 Laravel Homestead](https://readouble.com/laravel/5.7/ja/homestead.html)

***
ユーザーのプロフィール画像はどのように管理するべきか

サービス開発でよくある悩みが、**ユーザーのプロフィール画像をどのように管理**するべきかという点です。アップロード処理や画像の配信方法など、悩むべき点は多数あります。

今回はそういった方に向け、プロフィール画像を管理するベストプラクティスをまとめてみました。
紹介する内容は、私が運営しているWebサービス、「[Devicebook](https://devicebook.me/)」でも使っている技術になります。

概要としては以下の2点です。

- **Lambda@Edgeを使ってリアルタイムリサイズ配信**
- **canvasを使ってブラウザ側で画像リサイズ**

## リアルタイムリサイズとは
まずリアルタイムリサイズについて説明します。具体例として、以下の2つの画像を見てください。

https://images.devicebook.me/user-profile-images/31-5a65c261ecb41.jpg?w=100
![](https://images.devicebook.me/user-profile-images/31-5a65c261ecb41.jpg?w=100)

https://images.devicebook.me/user-profile-images/31-5a65c261ecb41.jpg?w=150
![](https://images.devicebook.me/user-profile-images/31-5a65c261ecb41.jpg?w=150)

URLのクエリに`w=100`とつけるだけで**画像の横幅をリアルタイムに**リサイズできています。（試しに適当なサイズを指定してください。）

このリアルタイムリサイズにより、**サーバー側で画像をいくつかの種類にリサイズする必要はありません**。
またリサイズされた画像はCDNのエッジサーバーにキャッシュされるため、リサイズが行われた画像は2回目以降、高速にエッジサーバーから配信されることになります。

AWSを使いリアルタイムリサイズを行うためには、**CloudFront**と**Lambda@Edge**を用います。

### CloudFrontとは
CloudFrontは、AWSが提供しているCDNサービスです。CloudFrontで画像をキャッシュさせておくことで、**CDNのキャッシュサーバーから高速に配信**されます。また画像を保存しているS3やWebサーバーなどの負担を軽減させることができます。

AWSのCDNであるCloudFrontは料金もリクエスト数やデータ転送量などを基にした従量課金制です。そのためS3から単純に配信するよりも高速に、そして低コストになる場合が多いです。

### Lambda@Edgeとは
Lambda@Edgeとは、CloudFrontの4つの各ライフサイクルで実行できるLambda関数のことです。（下記画像参考）
このLambda関数というのはAWS Lambdaのことで、**Lambdaは任意の自分で作成した関数を実行**させることができるAWSサービスのことです。

![cloudfront-events-that-trigger-lambda-functions.png](https://qiita-image-store.s3.amazonaws.com/0/109606/abff734d-c2e3-8f55-c10a-b6aa45530009.png)

Lambda@Edgeによるリアルタイムリサイズは、Cookpadさんの記事でとても分かりやすく解説されています。
[AWS Lambda@Edge で画像をリアルタイムにリサイズ＆WebP形式へ変換する - クックパッド開発者ブログ](https://techlife.cookpad.com/entry/2018-05-25-lambda-edge)

私もLambda@Edgeを本番運用した感想を別の記事で書いているので、参考にしてください。
- [Lambda@Edgeによる画像リサイズを本番運用した感想 - Qiita](https://qiita.com/hareku/items/3c49e5f60a7cf0989cd0)
- [GitHub - hareku/lambda-edge-image-optimizer-terraform](https://github.com/hareku/lambda-edge-image-optimizer-terraform)

## canvasを使ったブラウザ側での画像リサイズ
次にフロント側でのリサイズの重要性を述べます。

もしユーザーのアップロード画像が数MBあった時、サーバーのメモリを数MB使用してしまい、リサイズ処理なども含めればさらにメモリを使用します。
そういった仕様だと、複数人のユーザーが同時にアップロードすることにより、**サーバーのメモリを食い尽くして500エラーが発生**する可能性が高くなります。

そのため**フロント側であらかじめ正方形にリサイズしたりサイズを縮小**してからアップロードすることで、サーバーの負担を減らすことができます。

私のサービスの場合は以下のフローでアップロードを行っています。

- フロント側で画像を正方形にトリミングし、最大500pxにまで縮小
- PHPのサーバーへ画像をアップロード
- PHP側でS3にアップロードし、ユーザーのデータベースに画像のファイル名を保存
- Lambda@Edgeで任意のサイズにして配信

こうすることでサーバー側の処理はアップロードのみになります。
また**canvasはほぼ全てのブラウザで対応**しているため、問題なく使用することができます。
[Can I use... Support tables for HTML5, CSS3, etc](https://caniuse.com/#feat=canvas)

canvasでリサイズを行うための方法は別の記事でまとめてありますので、よければ参考にしてください。
[Vue.jsでcanvasを使った画像リサイズとアップロードを実装する - Qiita](https://qiita.com/hareku/items/28c11b286733d172e6aa)

## まとめ
以上が私が個人開発をしていく中で見つけた、プロフィール画像のベストプラクティスです。

もしご意見やご質問がある方は、コメント欄よりお気軽にご連絡ください。
シェルでFFTする

とりあえずメモ書きだけしておく。

```sh
ffmpeg -t 1 -f avfoundation -i ":0" -f flac - | sox - -n stat -freq 2> fft.txt
```

```sh
time (cat fft.txt | awk 'BEGIN{sum=0} {sum += $2} END{print sum}')
```

```sh
time (cat fft.txt | awk 'BEGIN{sum=0} {if(NR % 2048 == 0){print sum/2048; sum = 0} else{sum += $2}}')
```

```sh
ffmpeg -f avfoundation -i ":0" -f flac - 2>/dev/null | sox - -n stat -freq 2>&1 | awk 'BEGIN{sum=0} {if(NR % 2048 == 0){print sum/2048; sum = 0} else{sum += $2}}'
```

参考: https://qiita.com/ina111/items/6d9e9dcea275213cb431
【IT業界における技術者不足への提言】

[日本国内の情報サービス産業界で発生している諸問題についての最終的解決策について]

連邦議会企業統制委員会は、明智小衣氏より先日提出されたレポートを秘密会において検討した結果、関係する当局諸官に以下の提言を勧告するものである。

1.事業モデルの見直し
  情報サービス事業は国の許認可事業とする
⑴システム開発事業は所管官庁大臣による免許制
⑵事業の区分化
⑶事業に参画する技術者の適格性確保

2.事業分野の構成を階層化する
 商流と担当職掌の一元化
ｱ.統括事業者
 (ｱ)国内資本と外資系の2社体制
 (ｲ)所管官庁を組織運営に関与させる
・両社の経営陣は所管官庁大臣による任命制
・代表権をもつ経営者は国会同意人事
・国内資本の事業会社社員の身分は法令でみなし公務員とする
 (ｳ)事業者の新規参入は認めない

ｲ.管理事業者
  (ｱ)事業者は所管官庁が省令で定める
  (ｲ)所管官庁による構成管理の実施
  (ｳ)構成管理案
    ・管理事業者の総数は15社
    ・分類は2つ
     特定管理事業者と一般管理事業者
   ・特定管理事業者は所管官庁大臣の指定により6社固定とする。
 ・一般管理事業者の9社については専門機関よる資格審査を定期的に行い、所管官庁の認可により運営事業者からの転換を認める。

ｳ.運営事業者
事業分野について特に制約はつけない

3.事業に参画する要員への適格性評価の実施

⑴新規参入要員に対しては、担当する職種に対応した情報処理技術者試験の資格保有を義務付ける

⑵無資格者がシステム開発事業に参画する行為に対する罰則規定を法令で定める

⑶事業の即戦力となる情報処理技術者を養成する専門教育機関を設立する
Alexaスキル（ASK-SDK v2) から任意のDynamoDBのデータにアクセス

セッションアトリビュートの永続化について**ではなく**、ユーザー間で共有するデータをDynamoDBに保存してアクセスする方法についてです。

例えば、トリビアスキルなどで、たくさんのトリビアデータをJSファイルに書いておくとコードと一体化してしまいますが、データベースに切り離しておくことでメンテナンスが容易になります。
また、ゲームスキルで「あなたは〇人目の達成者です」といった記録にも必要になると思います。


# AWS.DynamoDB.DocumentClientを使う

結論としてはそれだけなんですが、ASK-SDK2でそのまま使えるサンプルが見つからなかったので…。

例として、DynamoDBには 'Trivias' というテーブルがあり、プライマリキーに 'id' という数値、項目には 'trivia' という、発話させたい文字列が入っていることとします。トリビアは100個あり、スキルを起動するとどれか一つをランダムで教えてくれるものとします。

lambdaのランタイムは Node.js 8.10 です。

```Javascript:データ取得用の関数
const awsSDK = require('aws-sdk')
const docClient = new awsSDK.DynamoDB.DocumentClient()
const getTrivia = async randomId => {
  var params = {
    TableName: 'Trivias',
    Key:{
         id: randomId
    }
  }
  return docClient.get(params).promise()
}
```

```Javascript:取得したデータを使用するハンドラ
const LaunchRequestHandler = {
    canHandle(handlerInput) {
      return handlerInput.requestEnvelope.request.type === 'LaunchRequest'
    },
    // async をつけないとawaitは使えない
    async handle(handlerInput) {
      const randomId = Math.floor(Math.random() * 100)
      const result = await getTrivia(randomId) // awaitで同期的に結果を受け取る
      const item = result.Item // Itemというプロパティにデータが入ってる
      return handlerInput.responseBuilder
        .speak(item.trivia)
        .getResponse()
    }
};
```

DocumentClientのget()などのメソッドには第二引数でコールバック関数を渡すことになっているのですが、それだとどうやってgetResponse()をリターンすればいいかわかりませんでした。

しかしコールバックを渡さずpromise()というメソッドを呼び出すとPromise化できるようで、さらにNode.jsのバージョンを8.1にすることでasync/awaitが使え、シンプルに書けました。

本記事ではget()メソッドだけ使っていますが、更新などその他メソッドについては
[【詳解】JavascriptでDynamoDBを操作する](https://qiita.com/Fujimon_fn/items/66be7b807a8329496899)
で詳しく紹介されています。 （コールバック部分を書き換えましょう）
***
なお自作のスキルでは、
- トリビアスキル「[アメリカ映画の名セリフベスト100](https://www.amazon.co.jp/gp/product/B07K6CXBYH)」でちょうど本記事のように100個の情報が入ったDyanamoDBからランダムに取り出し
- 脱出ゲームスキル「[暗闇のサンタクロース](https://www.amazon.co.jp/gp/product/B07L57GHBG)」で脱出成功者と失敗者の数をDyanamoDBに記録
を実現しています。
roundとfloorの違い


###floorは小数点以下切り捨て。小さい方にまとめる。

```rb

puts 1.2.floor  #結果 1
puts 1.5.floor  #結果 1
```


###roundは四捨五入で整数に丸めます。

```rb
puts 1.2.round  #結果 1
puts 1.5.round  #結果 2
```

参考：https://www.javadrive.jp/ruby/numeric_class/index3.html
Windows向けのプログラム(ここでは、FLEXlm)を強引にLinuxで動かす。


ベンダーにライセンスサーバのMACアドレスを書いて下さい。と言われ、書いて、送って、届いたものの、
ライセンスサーバにWindowsを指定されてしまっていたりすると困りますよね？

弊社では、サーバは、Linux派なのだ。困った。とは、事前確認をするので、ならないと思いますが、
Linux用のバイナリを用意してくれないベンダはたくさんあります。
太い客ならば、札束でひっぱたきながら用意するのが当然でしょ？って言ってみるのはあるかもしれません（笑）


細い客は諦めるしかありません。
でもやはり、たかだか、一つのバイナリを動かすためだけに、Windowsを使いたくないなどあると思います。

- ライセンスコストがかかる。
- 勝手に再起動するかもしれない。
- GUIがデフォルトでめんどくさい。
- リモート操作しにくい。
- キーボードのみで操作しにくい。
- カーネルが重いので仮想化しにくい。
- メモリをたくさん食う。
- サポートが短い。

というときは、技術で解決。
LinuxでWindows向けのプログラムを動かしてしまいましょう。


これを、やっていいのかどうかは、ライセンス契約を確認しておきましょう。
やってよかったとしても、問い合わせるとサポートできないゆえに難色を示されることでしょう。


#wine
UNIX上でWindowsアプリを動かそうという目的のもと、かなり昔から開発されているプロジェクトです。オープンソースで開発されています。
仮想マシンのような大それたものではなく、ただの互換レイヤーなので軽量に動きます。
WindowsのAPIをUNIX上で実装したものです。

デスクトップアプリケーションのような複雑なプログラムであれば、色々と問題も多いのですが、軽量なプログラムなら意外とすぐに動いてしまいます。


# exeが32bitプログラムだったとき
有名なレポジトリにあるwineは64bitプログラムしか動きません。かといって、i686版は、公開されてません。
野良rpmが公開されているので仕方なく入れてしまいましょう。

```
yum -y install https://harbottle.gitlab.io/wine32/7/i386/wine32-release.rpm
yum -y install wine.i686
```

Windowsのパッケージのなかのlmgrd.exeとライセンスファイルを同じフォルダに入れて、頭にwineをつけて実行しましょう。
```
wine lmgrd.exe -z -c %licfile%
```

びっくりすることにこれでもう動いてしまいます。
データベースを使う Django を Heroku にデプロイ

sqlite3 を使っている Django を Heroku にデプロイします。
次で行っている内容を、VPS の Arch Linux で行いました。
[[Python] Djangoチュートリアル - WebAPIサーバの簡単構築方法](https://qiita.com/okoppe8/items/1c66a7f57d855f3f9b02)

A) まずは、開発サーバーで動かします。

A-1) ソースのクローン

```bash
git clone https://github.com/okoppe8/Django-REST-Framework-easy-sample
```

A-2) 他のサイトからアクセスできるように project/settings.py を編集

```py:project/settings.py
（省略）
ALLOWED_HOSTS = ['*']
（省略）
```

A-3) ライブラリーのインストール

```bash
sudo pip install djangorestframework
sudo pip install django-filter
sudo pip install dj_database_url
```

A-4) データベース　db.sqlite3 の作成

```bash
python manage.py migrate
```

A-5) superuser の作成

```bash
python manage.py createsuperuser
```

>メールアドレスは test@test.com で構いません。

A-6) ダミーデータの挿入
>カスタムコマンドを使います。

```
python manage.py prepare_dummydata
```

A-7) 開発サーバーの起動

```bash
python manage.py runserver
```

ブラウザーで確認
![django_nov27_aa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/cba23997-58db-ac46-4af2-898a9fd1553a.png)


ログインすると、
![django_nov27_bb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/e8e94b5b-3a91-7ff0-8e45-92e4f311da2d.png)


B) 次に Heroku にデプロイします。
>Heroku では データベースとして PostgreSQL が使われます。
>その為に データベースの設定を project/settings.py と project/local_settings.py の２箇所に記述します。

B-1) project/local_settings.py の作成

```py:project/local_settings.py
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

DEBUG = True
```

B-2) project/settings.py の編集

```py:project/settings.py
（省略）
import dj_database_url
DATABASES['default'] = dj_database_url.config()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
ALLOWED_HOSTS = ['*']
STATIC_ROOT = 'staticfiles'
DEBUG = False
try:
    from .local_settings import *
except ImportError:
    pass
```

B-3) 開発サーバーを動かしてローカルの設定を読み込むことを確認

```bash
python manage.py runserver
```

B-4) 次のファイルを用意します。
>runtime.txt
>Procfile
>requirements.txt
>.gitignore

```text:runtime.txt
python-3.9.9
```

```text:Procfile
web: gunicorn project.wsgi --log-file -
```

```text:requirements.txt
django-heroku
gunicorn
django
django-filter
djangorestframework
pytz
psycopg2
```

```text:.gitignore
.vscode
__pycache__
env
staticfiles
db.sqlite3
*.py[co]
local_settings.py
```

B-5) Heroku にアップロードします。

```bash
heroku login -i
git init
git add .
git commit -m "init"
heroku create p0499
heroku config:set DISABLE_COLLECTSTATIC=1
git push heroku master
```

B-6) Heroku でデータベースの作成

```bash
heroku run python manage.py migrate
```

B-7) Heroku で superuser の作成

```bash
heroku run python manage.py createsuperuser
```

B-8) Heroku で ダミーデータ の作成

```bash
heroku run python manage.py prepare_dummydata
```

B-9) ブラウザーで http://p0499.herokuapp.com/ にアクセス

B-10) もし、画面が次のようになったら　静的データに問題があります。
![django_03.png](https://qiita-image-store.s3.amazonaws.com/0/179446/dc73c073-b978-46e2-f4da-d35cb90ad21a.png)


```
任意のプログラム(ここではFLEXlm)をデーモン化する方法 (一部CentOS向け)

ある実行ファイルをデーモン化して常時起動させるとき、便利な方法について述べています。

いくらでも記事はあると思いますが、ライセンスサーバのflexlmへの事例をご紹介します。

systemdにしたり、init.dとかめんどくさくない？ということで、daemonizeするツールが便利です。
supervisorをご紹介します。

#supervisord のインストール
supervisorは、プロセス管理のツールです。
CentOS7ならば、epelを入れることで、パッケージで入れることが出来ます。

```bash
yum -y install epel-release
yum -y install supervisor
```
### ついでにやっておくと便利なこと childlogdirの変更。
`/etc/supervisord.conf` (childlogdir行を追加しています)

```vim
[supervisord]
;nocleanup=true              ; (don't clean up tempfiles at start;default false)
;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)
childlogdir=/var/log/supervisor
```
childlogdirを設定しておくと管理するプロセスごとに標準出力のログが吐かれるので便利です。
```/var/log/supervisor```にしておくと、logrotateも効くので二重で良いです。

#supervisord の自動起動化と起動

```bash
systemctl enable supervisord
systemctl start supervisord
```

#プロセス管理ファイルの追加
事前に `/etc/supervisord.conf`

```vim
[include]
files = supervisord.d/*.ini
```
がどうなっているか確認しましょう。
CentOSでは、デフォルトで`*.ini`、debianでは、デフォルトで `*.conf`です。


`/etc/supervisord.d/lmgrd.ini`

```vim
[program:lmgrd]
user=%username%
autostart=true
autorestart=true
directory=/opt
command=/opt/lmgrd -z -c %licfile%
startretries=10000
```

`/opt` に置いている前提ですが、好きなディレクトリにしましょう
1024未満のポート番号ではないので、一般ユーザでもポートを開くことができます。
`%username%`に作った一般ユーザを名を入れて下さい。
`%licfile%`にベンダーから貰ったライセンスファイルを、相対パスか絶対パスで指定します。
cでスタティックライブラリー

#概要

cでスタティックライブラリーやってみた。
paizaでpythonで書いてみた。

#やってみた事。

print.c hello.cを書いて、
gccで、print.oとhello.oを作って
arで、libprint.a作って
gccで、hello.oとlibprint.aからa.out作って
実行まで。

#サンプルコード

```
import subprocess
import os

def gcc():
    p_file = 'print.c'
    test_p = """
#include <stdio.h>

void print(void)
{
	printf("Hello Wold ");
}
"""
    with open(p_file, 'w') as f:
        f.write(test_p)
    c_file = 'hello.c'
    test_c = """
extern void print(void);

int main(void)
{
	print();
	return 0;
}
"""
    with open(c_file, 'w') as f:
        f.write(test_c)
    os.system("gcc -c %s" % p_file)
    os.system("gcc -c %s" % c_file)
    os.system("ar rcs libprint.a print.o")
    os.system("gcc hello.o -L./ -lprint")
    result = subprocess.Popen('./a.out', stdout=subprocess.PIPE).communicate()[0]
    for i, v in enumerate(result[ : -1].split('\n')):
        print v

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

#成果物

https://paiza.io/projects/beka4qYt_3hO9GEzDmxSaQ?language=python

以上。
Windows10 カーネルをすべてメインメモリに常駐させる

カーネルとは？
----
カーネルは ハードとソフトのやり取りをコントロールする、OSの中核となるソフトウェアです。
カーネルは通常 メインメモリと仮想メモリに分散され配置されていますが、動作速度の遅い仮想メモリにはできれるだけ配置したはないです。
すべてのカーネルが メインメモリに配置されるように設定し、システムの低速化を防止しましょう。

設定方法
----
1. レジストリエディターを立ち上げる
「Windowsキー＋Rキー」で「ファイルを指定して実行」を立ち上げる　→
「regedit」と入力し「OK」をクリック →　管理者権限を求められるので「続行」をクリック　→　レジストリーエディターが起動

2. Memory Managementを開く
「\\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Memory Management」を選択　→ 　Memory Managementのレジストリエディターが開く

3. 値を変更
「DisablePagingExecutive」を選択　→　値の編集画面が表示されるので、値のデータ欄に数字の「1」を入力（※値が1で有効、0で無効）　→ 　OKを選択して設定終了
※「DisablePagingExecutive」がレジストリになかった場合
画面中央空白の部分で右クリック　→ 「新規」を選択　→ 「DWORD」を選択　→ レジストリが追加されるので名前欄に「DisablePagingExecutive」と入力して作成しましょう。

システムを再起動させれば 設定が有効になります。
ネットワークトポロジーの種類

ネットワークトポロジーとは
-----
ネットワークトポロジーとは、コンピュータネットワークの接続形態のことです。
ネットワークにおいてPC、サーバ、スイッチ等の機器（ノード）がどのような形で接続するのかを表しています。

|トポロジーの種類 |内容|
|-------------|------|
|物理トポロジー|実際にLANケーブルやPCがどのように接続するのかを示す物理的な構成。|
|論理トポロジー|データの流れ方を表す論理的な構成。代表的なネットワークトポロジーにバス型、スター型、リング型、フルメッシュ型があります。|


バス型トポロジー
----
バス型トポロジーは、1本のケーブル（同軸ケーブル）に複数のノードを接続しています。
一本の同軸ケーブルの両端にターミネータと呼ばれる抵抗器を取り付けて、終端での信号の反射、乱れを防ぎます。
バス型のトポロジーでは、中心となる同軸ケーブルに障害が発生するとそれに接続する全てのノードが通信できなくなります。
10Base2 / 10Base5など大昔のLAN規格で使用する物理トポロジーです。
![バス型トポロジー.png](https://qiita-image-store.s3.amazonaws.com/0/315849/f5307cf0-761f-712f-a7b6-6c835096ce64.png)

スター型トポロジー
----
スター型トポロジーは1つの集線装置（ハブやスイッチ）に複数のノードを接続しています。
バス型トポロジーとは異なり、1本のケーブルに障害が発生した場合でも他のノード通信に影響は出ませんが、集線装置に障害が発生した場合、全てのノードに影響が発生します。
現在ではこの形のLANが主流となっているトポロジーですね。
![スター型トポロジー.png](https://qiita-image-store.s3.amazonaws.com/0/315849/72567ae4-404a-fb4d-a459-a46d14023bf8.png)

リング型トポロジー
----
リング型トポロジーにおいてはノードは論理的にリング状に接続され、トークンと呼ばれるデータがリング状を高速に巡回しています。
このトークンを得たノードがデータを送信します。
シングルリング型トポロジーでは一箇所でも障害が発生すると全体が通信できなくなります。
シングルリング型の耐障害性を強めたトポロジーが、デュアルリング型トポロジーとなります。
このトポロジーでは予備のリングもう一つ設けることにより、プライマリリングに障害が発生した場合でも通信を継続できる仕組みになっています。
![リング型トポロジー.png](https://qiita-image-store.s3.amazonaws.com/0/315849/a0fad113-698b-b9d7-b0c5-1b55b2bdc428.png)

|IEEE|トークンパッシング採用のLAN|使用するケーブル|論理トポロジー|物理トポロジー|
|:---|:------------------------|:-------------|:------------|:--------------|
|802.4 (解散）|トークンバス|同軸ケーブル|リング型|バス型|
|802.5|トークンリング|STPケーブル & MSAU|リング型|スター型|
|-|FDDI|光ファイバー & コンセントレータ|リング型|スター型|
※今ではほとんど見ることのないトポロジーです。


フルメッシュ型トポロジー
-----
フルメッシュ型の場合は、全てのルータと相互接続しており、特定のルータとのリンクに障害が発生した場合でも、他のルータとのリンクを介して、継続して通信が可能です。
![フルメッシュ型トポロジー.png](https://qiita-image-store.s3.amazonaws.com/0/315849/0ff02fe1-d5ae-8cae-a821-010bba9294c9.png)

フルメッシュ構成は耐障害性に優れていますが、物理トポロジーでフルメッシュにするとコストが高くなってしまいます。
そこで、中心となるセンター側のルータや、一部のルータだけをメッシュ型にするパーシャルメッシュにすれば、コストを抑えられて、そしてある程度の冗長性と耐障害性を維持することができます。
![パーシャルメッシュ型トポロジー.png](https://qiita-image-store.s3.amazonaws.com/0/315849/ab604864-e033-ede9-25b1-79958a080df8.png)
Android plugin整理

### GsonFormat

https://plugins.jetbrains.com/plugin/7654-gsonformat

自動的にjsonデータ --> javaクラスデータ

### Android ButterKnife Zelezny

ButterKnifeのコードを自動生成

### a search with github

githubでコード検索

### json to kotlinclass

https://github.com/wuseal/JsonToKotlinClass

自動的にjsonデータ --> kotlinクラスデータ
ghqで管理し始めて、とりあえずやること

ghq、便利ですよね。
https://github.com/motemen/ghq

とりあえずghqを入れたらやること的なことを書きます。

## 自分のリポジトリを全部取ってくる
```
curl -s "https://api.github.com/user/repos?access_token=(GITHUB TOKEN)&type=all"|jq -r 'map(.ssh_url)[]' | ghq import
```
GitHub Tokenを入れれば、自分と関係あるリポジトリを全て取ってくる。

## リポジトリ移動にpecoを使う
```zsh:.zshrc
alias gv='cd $(ghq list -p | peco)'
```
peco使うと、いい感じに絞り込んでくれるので便利です。

## branch移動にもpecoを使う
```zsh:.zshrc
alias gch='git branch -a --sort=-authordate | peco | xargs git checkout'
```
checkoutもpeco頼り。

## ghq-foreach.shを入れる
https://qiita.com/uasi/items/610ef5745fc35745fd54
pullとか全部にやってくれるので便利。

## ghq-foreach
https://github.com/Goryudyuma/ghq-foreach

上のshell scriptは並列にやってくれなくて時間がめちゃくちゃかかるようになってしまったので、goで並列に実行するようにガッと書き直したやつ。
コマンド互換性はまだ取ってないので、そのうち直す。
Cannot find compiler 'cl.exe' in PATH

#  Cannot find compiler 'cl.exe' in PATH
## 問題
[VisualStudio2017](https://docs.microsoft.com/ja-jp/visualstudio/install/install-visual-studio?view=vs-2017)をインストールして、C++環境もいれたはずなのにclのパスが通ってないよっていうエラーがでた。

```
エラー文
Cannot find compiler 'cl.exe' in PATH
```

## 解決策
### 前提
C/C++ コンパイラ (cl.exe) をVisualStudio Installer でC++によるデスクトップ開発からインストール済み

### CLとは
[Microsoft Visual C++](https://ja.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B)のコンパイラ本体

### 場所
エクスプローラを開いて下記のパスをみると、

```
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64
```

こんなかんじのやつがいる。
![Baidu IME_2018-12-23_4-48-37.jpg](https://qiita-image-store.s3.amazonaws.com/0/131659/ccfacb65-6b66-a149-7635-a6803785a06f.jpeg)
こいつが目的の`cl.exe`である。x86が32bitで、x64が64bit用である。

###パスを通す
コントロール パネル->システムとセキュリティ->システムと開く。
次にシステムの詳細設定->環境変数と開く。
システム環境変数->Pathを選択し、編集で開く。
新規追加で、パスをいれたらOKを押して終了。

### 確認
コマンドプロンプトを再起動して、`cl`とうって下記のものが出ればOK。

```
>cl
Microsoft(R) C/C++ Optimizing Compiler Version 19.16.27025.1 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

使い方: cl [ オプション... ] ファイル名... [ /link リンク オプション... ]
```

## 参考
* [Visual Studio Community 2017 cl.exe - Stack Overflow](https://stackoverflow.com/questions/42794845/visual-studio-community-2017-cl-exe)
* [C/C++ プログラムのビルド](https://docs.microsoft.com/ja-jp/cpp/build/building-c-cpp-programs?view=vs-2017)
* [Visual Studio 2017 のインストール](https://docs.microsoft.com/ja-jp/visualstudio/install/install-visual-studio?view=vs-2017)
rails 5.2 mysql 5.7 絵文字対応 utf8mb4

# rails 5.2 で絵文字を保存できるようにする

## Overview

shichimi とかいうパズルゲームを運用している。
スコアーをPOSTする機能がありますが、ユーザー名に絵文字を使いたい。
なので新規機能実装する運びになりました。

https://itunes.apple.com/us/app/shichimi/id1439428056?ls=1&mt=8

```my.cnf
[mysqld]
character-set-server=utf8mb4
[client]
default-character-set = utf8mb4                                          
```

mysql のdatabase の文字コードも変更します。

```mysql
show create database　db;
+------------------+------------------------------------------------------------------------------+
| Database         | Create Database                                                              |
+------------------+------------------------------------------------------------------------------+
| jobs_development | CREATE DATABASE `db` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+------------------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)

alter database db default character set utf8mb4;

+------------------+------------------------------------------------------------------------------+
| Database         | Create Database                                                              |
+------------------+------------------------------------------------------------------------------+
| jobs_development | CREATE DATABASE `db` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+------------------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)

```

Rails なので、database.yamlも変更します。

```database.yml
default: &default
  adapter: mysql2
  encoding: utf8
```

```json
{
status: 200,
responce: [
{
id: 9,
user_name: "🍣🍣🍣 ",
score: 1509,
icon: "noimage.png",
created_at: "2018-12-22T17:37:14.000Z",
updated_at: "2018-12-22T17:37:14.000Z",
max_number: 896
},
{
id: 7,
user_name: "",
score: 868,
icon: "noimage.png",
created_at: "2018-12-22T04:17:52.000Z",
updated_at: "2018-12-22T04:17:52.000Z",
max_number: 224
},
{
id: 6,
user_name: "っっh",
score: 512,
icon: "E8gwGjI5_normal.jpg",
created_at: "2018-12-22T04:15:07.000Z",
updated_at: "2018-12-22T04:15:07.000Z",
max_number: 224
},
{
id: 3,
user_name: "mag",
score: 86,
icon: "noimage.png",
created_at: "2018-12-22T04:03:50.000Z",
updated_at: "2018-12-22T04:03:50.000Z",
max_number: 56
},
{
id: 4,
user_name: "look",
score: 86,
icon: "noimage.png",
created_at: "2018-12-22T04:07:24.000Z",
updated_at: "2018-12-22T04:07:24.000Z",
max_number: 56
},
{
id: 5,
user_name: "col",
score: 68,
icon: "noimage.png",
created_at: "2018-12-22T04:11:41.000Z",
updated_at: "2018-12-22T04:11:41.000Z",
max_number: 56
},
{
id: 1,
user_name: "kko",
score: 25,
icon: "noimage.png",
created_at: "2018-12-22T03:59:29.000Z",
updated_at: "2018-12-22T03:59:29.000Z",
max_number: 14
},
{
id: 2,
user_name: "magu",
score: 25,
icon: "noimage.png",
created_at: "2018-12-22T04:01:19.000Z",
updated_at: "2018-12-22T04:01:19.000Z",
max_number: 14
},
{
id: 8,
user_name: "🍣",
score: 1,
icon: "noimage.png",
created_at: "2018-12-22T17:27:21.000Z",
updated_at: "2018-12-22T17:27:21.000Z",
max_number: 1
}
]
}
```

できました。

https://itunes.apple.com/us/app/shichimi/id1439428056?ls=1&mt=8
初心者が学んだログ(AWS+Nginx+PHP)

#この記事を読んで幸せになれそうな人

- なんかレンタルサーバにphpファイルをおいて動かしたことあるよ！みたいな人
- よくサーバのことわからんけどNginxでphpのなんか(wordpressとか)を使いたい人

# お勉強の経緯
AWSに他のレンタルサーバからWordPressを移管することになった。
結構アクセスがくるので、Nginxで作ってみようかってはなしになったりした。

# Nginxでphpを動かす際の注意点

レンタルサーバ君はPHPファイルを置いたら勝手に実行してくれたりするけど、普通はそうじゃない。
~~私はここで果てしなく躓いていた~~

Nginxはファイルを渡してくれるだけなので、PHPの実行はしてくれない。
PHPの実行は他のサービスがやってもらわないといけない。~~よくよく考えると当たり前だ~~

PHPを実施してくれるのはphp-fpmのお仕事です

# NginxとPHPの導入

AWSのEC2(Amazon Linux2)でやってみる。
NginxとPHPの導入は`amazon-linux-extras`でやるといいと思う。

```shell
# amazon-linux-extrasの一覧を確認
$ amazon-linux-extras

# phpとnginxを導入(バージョンは↑で確認したのを使うといい)
$ amazon-linux-extras install php
$ amazon-linux-extras install nginx
```

# Nginxの設定

この辺は他といろんな記事と一緒。ドキュメントルートはどこでもいいけど`/www`配下としときます。

```
www
  ├─phpmyadmin
  └─wordpress
```
ちゃんとwww配下をnginxの持ち物にしておこう。

```shell
$ sudo chown -R nginx:nginx /www
```


Nginxの設定ファイルは多分`/var/nginx/nginx.conf`とかにある。
まずはPHPが実行できるようにする

```nginx.conf
# ...略...
server {
    listen 80;
    server_name www.example.com;
    index index.php ;
    root /www;
    # phpの設定
    location ~ \.php$ {
         fastcgi_pass   127.0.0.1:9000; # ここはphp-fpmの設定をみる
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
    }
}
# ...略...
```

`fastcgi_pass`は`php-fpm`の設定を参照すること。

次は、`/`が`wordpress`配下に行くようにする。あとはphpmyadminにもいくようにする。
おまけにwp-config.phpを見えないようにしとく。
`location`の順番に注意すること

```nginx.conf
# ...略...
server {
    listen 80;
    server_name www.example.com;
    index index.php;
    root /www/wordpress;         # rootを/www/wordpressに向ける
    # wp-config.phpのまもり
    location ~* .*/wp-config\.php {
        return 301 /;
    }
    # phpmyadminの設定
    location /phpmyadmin {
        root /www/phpmyadmin;    # /phpmyadminに来たらrootは/www/phpmyadminに向ける
        location ~* /phpmyadmin/.*\.php {
             fastcgi_pass   127.0.0.1:9000; # ここはphp-fpmの設定をみる
             fastcgi_index  index.php;
             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
             include        fastcgi_params;
        }
    }
    # phpの設定
    location ~ \.php$ {
         fastcgi_pass   127.0.0.1:9000; # ここはphp-fpmの設定をみる
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
    }
}
# ...略...
```

# php-fpmの設定

`php`を実行するのは`php-fpm`さんなので、ファイル書き込み、作成が発生する処理(wordpressのプラグインインストールとか)はパーミッションがかかわってくる。
`php-fpm`さんは初期設定では`apache`ユーザになってるみたいなので`nginx`ユーザで実行する様にしとく。


## 確認
サービス再実行してcurlしてみる

```shell
$ sudo systemctl restart php-fpm.service
$ sudo systemctl restart nginx
$ curl -i localhost:80/
```

#わかったこと
何となくで環境構築はやっちゃだめだよね。。。。
12-21 aldaの評価

https://adventar.org/calendars/3353 の21日目のエントリーです（遅れて書いています）

## aldaの評価

https://github.com/alda-lang/alda

aldaはテキストからSMFや楽譜に変換するための音楽記述言語・ツールで、作曲家のためのものである、とプロジェクトでは記述しています。その目的はMML（music macro language）に近いものがあります。実のところ、MMLの一種であるPPMCKに影響を受けているそうです。

> Inspired by other music/audio programming languages such as [PPMCK](http://ppmck.wikidot.com/what-is-ppmck), [LilyPond](http://www.lilypond.org) and [ChucK](http://chuck.cs.princeton.edu), Alda aims to be a powerful and flexible programming language for the musician who wants to easily compose and generate music on the fly, using naught but a text editor.

実装はClojureであり、一部はClojureScriptとしても動作するようです。

少し前に文法をチェックしていたので、メモ書き程度の内容ですが簡単にコメントします。

(1)   note命令はcdefgabで記述します。シャープは`c#` `d#` ... とドキュメントにありますが、`+` `-`（フラット）も使えるようです。ナチュラルは`_`が使われていたようですが、マニュアルには記載がありません。変数代入構文で`=`を使っているらしく、ナチュラルには使えないようです。（_はタイ・スラー・ポルタメントの類で使いたいのに、これで使えなくなってしまった感じです。）

(2)音長は`c`（デフォルト）、`c4`（4分音符）、`c4.`（付点）、`c500ms`（ミリ秒）、`c2s`（秒）のような感じで指定します。これでは`m`や`s`を別の命令に割り当てられなくなってしまうわけですが、aldaはその辺の設計がイマイチです。

(3)名前付き位置の記憶とそこまでのジャンプが可能です。`%foobar`と`#foobar`で指定します。

(4)その他の表現要素はclojure attributesとして指定します。 `(octave 4)`や`(panning 50)`のような記述になります。これではまともに入力する気になれない…

(5)制御構文としては、ループがあります。`[` 〜 `]`で指定します。この辺りはMCKの影響がありそうです。

(6)和音の入力方式が独特で面白いです。`c/e/g`のような記述が基本和音構文で、オクターブ指定（相対のみ?）は挟み込めるようです。音長指定があった場合は、最も短いものが和音指定全体の長さとして使用され、続く音は続行している他の音に重なります。`c4/e8/g2`とあれば、和音全体は8分音符となり、次のノートはe8に続きます。これでアルペジオ奏法などが楽に表現できるはずです。

現時点で、aldaに関する個人的な評価は以下のような感じです。

- MIDIだけでなくサウンドエンジンまで計画していて野心的です。ただ実現性がどこまであるのかは不明です。
- lilypondとの相互運用?が主眼になっている（時期があった?）っぽく、演奏用としての音楽記述言語は機能が薄く、率直に言えば作曲のために使いたい言語ではありません（それが主目的のはずなのですが）。
- カスタム命令の定義には2文字以上が要求されるので、あまり嬉しくない感じです。また記号の利用もかなり限られていて、特に相対音量指定や音色指定で ( ) @ といった記号を使いたいわたしとしては不満が大きくなりそうです。
- 手入力を前提にするなら、もっと命令を豊富に用意するべきだし、そうでないならもっと手入力しやすいDSLが必要だと思います。そして命令を拡張する制限がMML的な言語として考えるとやや嬉しくない感じです。