OmniAICreator/Qiita-1.07M huggingface dataset:
TeraStation メール通知

#TS3200Dシリーズ（Linuxベース）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/501f82a9-6ef4-32cc-6b3c-4e9826ef97ea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/f15f9d28-1e87-cf52-264b-e0b6092a9439.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/cb885c82-2ed8-4493-29ba-873f3472153e.png)

####ユーザ認証方式
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/09ee031a-06dd-5ab0-457a-432ebb5ffae3.png)

####SSL/TLS
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/ae995b9e-7607-a0be-269b-3aee7dac83bb.png)

####テスト送信したときの内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/dad97ca3-db9a-1297-ec3a-317180ee1c84.png)

####定期報告の内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/658f6fe2-374a-1cb0-3d61-09449b66abfd.png)






#TS5410Rシリーズ（Linuxベース）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/0a67407a-458b-8607-b5d8-900216c4d66e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/f15f9d28-1e87-cf52-264b-e0b6092a9439.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/76ffe5cf-986f-71d9-5193-bbc198ec7649.png)

####ユーザ認証方式
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/09ee031a-06dd-5ab0-457a-432ebb5ffae3.png)

####SSL/TLS
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/ae995b9e-7607-a0be-269b-3aee7dac83bb.png)

####テスト送信したときの内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/d4e4cb6d-8fa9-e25d-15ec-2ec662edda77.png)

####定期報告の内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/de6e7613-e9fa-5b06-c4ab-75140fc1e5dc.png)










#WS5420DN6シリーズ(Windowsベース)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/24c2abbb-b68e-e734-4a05-b287ac925ea6.png)

####ユーザ認証方式
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/906cea01-54a7-b940-03d5-c71a8507463e.png)

####SSL/TLS
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/b532d5b6-1a58-4c4f-9a8c-caa70c11abad.png)

####テスト送信したときの内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/c9f836ec-4d90-aa54-8432-57800e066131.png)

####定期報告の内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/3b50c31f-8f53-f6c7-ad10-582242b3b24e.png)
npm init -y したときに最初にできるpackage.jsonの中身

# 初期状態のpackage.json

```package.json
{
  "name": "react_test_project", // プロジェクト名。ディレクトリ名がデフォルト。
  "version": "1.0.0", // バージョン情報
  "description": "", // プロジェクトの説明。
  "main": "index.js", // メインで実行されるjsファイル
  "scripts": {  // npm run で実行するスクリプトファイルを記述する。 *よくいじるのはここ。* 
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [], // キーワード
  "author": "", // 著者情報
  "license": "ISC" // ライセンス情報。
}
```

# 追加でよく入れるやつ

```package.json
{
    "private": true // GitHub使わない
    "script": {
        "start": "webpack-dev-server", // npm start で実行されるスクリプト
        "webpack": "webpack -d"  // webpackで実行されるスクリプト
    }
    "dependencies" : {
        "react": "^16.8.6"  // npm install する際に入るもの
    }
}
```

# 参考サイト

[package.jsonの中身を理解する](https://qiita.com/dondoko-susumu/items/cf252bd6494412ed7847)
Fortranコンパイラのシンボル名制限

# そもそも...

FORTRAN77 まで識別子(手続き、変数)の長さは、6文字以下の制限があった。
Fortran90で、その制限が撤廃されたと誤解されがちだが、実際は31文字以内に延長しただけ。

# コンパイラベンダの親切心

FORTRAN77の時代から、7文字以上の識別子でコンパイルできるコンパイラは多い。
Fortran90でも、32文字以上の識別子でコンパイルできるコンパイラが多い。

---

# 識別子名の限界は、60文字程度

| コンパイラ | バージョン | 文字数 |
|:--|:--|:--|
| ifort | 17.0.1 | 63文字以内 |
| gfortran | 4.8.5 | 63文字以内 |
| gfortran | 7.3.0 | 62文字以内 |

# どうすれば？

`-std=f95` (gfortran) または `-stdf90` (ifort) をつけてコンパイルすれば、
識別子が32を超えた時点で弾いてくれるので、安心。

---

# シンボル名のルール

モジュール副プログラムのシンボル名は、モジュール名と手続き名を連結することが多い。
`readelf -s --wide` コマンドで、確認できる。

| コンパイラ | シンボル名の例 |
|:--|:--|
| ifort | \${module}\_mp\_${procedure} |
| gfortran | \_\_\${module}\_MOD\_${procedure}|

※デバッグのときなど思い出すと◎

---

# シンボル名に対する制限

ifortは、シンボル名が91文字を超えると警告を出して前方の文字を切り詰めて、91字以内にする。
シンボル名の連結で \_mp\_ が追加されるため、モジュール名+手続き名は87文字以内にする必要がある。
∴ 標準規格に従って、31文字以下の識別子を使えば、モジュール名+手続き名が62以下になるので気にしなくてよい。

gfortranではこのような制限は存在しない。

## 考察
ifortのシンボル名切り詰めは、モジュール名+手続き名の合計数に対して発生するもののようであり、
モジュール名を短くしても、手続き名を短くしても対応する事ができる。いくつかの戦略が考えられる。

- 長過ぎる手続き名が少しと、短い手続き名が大量にあるモジュールなら、モジュール名を変えずに
手続き名を短縮してはどうだろうか？

- モジュール名が長すぎると、どんな手続も制限にかかるので、モジュール名を短くするというのはどうだろうか？

---

# まとめ

- Fortran90の標準に従いましょう。
- gfortranで50文字くらいのモジュール名と手続き名を使ったコードを開発していると、ifortに移行した場合に、シンボル名の切り詰めが発生するかもしれません。

- ifortによる切り詰めはエラーでなく警告なので、無視してもよいですが、標準からの逸脱によるものなので、命名について再検討したほうがよいです。

他コンパイラの情報をお持ちの方がいらっしゃいましたら、提供していただきたいです。(バージョン番号もほしいです。)
VSCodeでLatexを書いていると謎のエラーが発生してビルドがコケる問題

# TL;DR
* 最近VSCodeでLaTeXをかける環境を作った．
* たまに謎のエラーが発生して死ぬことがある
* Undoダメ，発生場所を削除してもダメ，わからん！！！！

# 環境
* MacOS Mojave系(あまり関係はなさそう)
* latexmk (uplatex -> uplatex -> dvipdfmx)
* ターミナルはHyperでfishが動いている．

# エラーコード

```
! Package inputenc Error: Unicode character ^^H (U+8)
...
l1.   
```
括弧の部分はU+8以外のときもある．
U+8はつまり`BS`であり，いつも文字を消すときに使う右上のボタンが押されたときに送信される文字コードである．
何故かそれが挿入されたり，たまに他の変な制御文字が入ってたりする．

しかも1行目

# 調査・解決
いつものバイナリエディタで見てみると，やっぱりファイル内の真ん中辺りに0x08のデータが紛れている．
こいつを適当な正常な値(Ascii内)に書き換えてやって，エディタ側で削除すると解決した．

# 考察
理由はわからないが，Latexは制御文字が出現すると正確に位置を伝えてくれず．常に1行目1文字目を指すようである．
また原因として，ターミナルの内容をそのままコピペしたことで，ターミナルの中にBSが紛れていて，それがファイル内に入り込んだようであった．
ターミナル内にBSが現れてしまう原因はわからないし，クリップボードにBSが入ることが許容されているのはどうなの....?

今後からはpbcopyで出力を読むようにする
cocos2d-xでビルド時にプリプロセッサマクロの定義をしたい件

# 前提
- cocos2d-x 2系
- ビルド
    - iOS（Xcode10）：xcodebuild
    - Android：gradle


# 状況
- 以下のように、申請時にのみ処理をしたいケースが発生

```c++:XXX.cpp
#ifdef PRODUCTION
    // 申請時にのみ処理したい
#else
    // それ以外の時の処理
#endif
```

- Jenkinsジョブでビルドする際に動的にビルドモード（デバッグ/リリース相当/リリース用）を分けている状況
- 諸々の理由があって、静的にモードを追加してそれを指定してのビルドみたいなことができない状況
- つまり、単純にプリプロセッサマクロ名が、申請時ビルドの時のみ定義されていれば色々都合が良い状況

# 解決方法
## iOS
- **GCC_PREPROCESSOR_DEFINITIONS** を使えばいける
- Jenkinsジョブから、OPTIONSというパラメータに申請用のマクロ名を以下のように指定（上記例でいうと **PRODUCTION** ）

```shell:build_ios.sh
~
if [ リリースビルドの時 ]; then # 上記でいうリリース相当/リリース用が該当
	xcodebuild -sdk ${SDK} \
		-target "${TARGET_NAME}" \
		-scheme "${SCHEME_NAME}" \
		-configuration ${CONFIGURATION} \
		-IDEBuildOperationMaxNumberOfConcurrentCompileTasks=${PARALLEL} \
		archive -archivePath ${OUT_ARCHIVE_PATH} \
		"GCC_PREPROCESSOR_DEFINITIONS=\$(inherited) ${OPTIONS}"    # ★ここを追記
else
~
```
※$(inherited)はXcode上で設定あるものを継承するパラメータ

## Android
- Application.mkで **APP_CPPFLAGS** を使えばいける
- Jenkinsジョブから、OPTIONSというパラメータに申請用のマクロ名を以下のように指定（上記例でいうと **PRODUCTION** ）

```Application.mk
~
ifdef PRODUCTION
APP_CPPFLAGS += -DPRODUCTION
endif
~
```
Javascriptでテーブル自動生成時にcolspan・rowspanを使う時の注意

#　colspanは　col”S”pan　と大文字にする
同様にrowspanも　rowSpan と大文字にする。

クロームでハマったので備忘録記載

動作検証
---
クロームバージョン: 74.0.3729.131（Official Build） （64 ビット）
ドリームウィーバーCC：19.1

2019年5月8日記載
Unity CreateAssetMenuを記述したが表示されない件について

Unityスクリプトにて[CreateAssetMenu]を記載したもののCreateタブに表示されず、、、、

解決方法をいまだ迷っている次第です。。。

いつもでるこの赤線もなんなんだろう。。。。


![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367212/285185e8-f45f-c5a5-1a04-c8124375c881.png)
VisualStudioでC#の単体テストする時のメモ

# はじめに
* VisualStudio2015でC#プログラムの単体テストを実施した時の備忘用メモ
* ちょっとはまったところのみ記載する

# 単体テスト用のサブプロジェクトの作成
* [プロジェクト作成方法はこちら](https://docs.microsoft.com/ja-jp/visualstudio/test/unit-test-basics?view=vs-2015)
* テスト対象のプロジェクトと同一ソリューション内に、単体テスト用プロジェクトを作成すること
* 単体テストプロジェクトを作成したら、単体テストプロジェクトの参照にテスト対象プロジェクトを追加する

# privateクラスをテストしたい時
* privateクラスをテストしたい時は、テスト対象プロジェクトのAssemblyInfo.csに**InternalsVisibleTo**の設定を行う

```c#:AssemblyInfo.cs
[assembly: InternalsVisibleTo("単体テスト用プロジェクト名")]
```

# テストメソッドの命名
* テストエクスプローラの表示上、クラスの区別なく表示されてしまい同じ名前だと見分けがつきにくい
* テスト対象のクラス名とかを頭につけると見やすい気がする
    * 微妙：TestMethod01
    * おすすめ：ホニャララクラス_TestMethod01

# log4netの出力内容をテストする
* [こちらを参照](https://qiita.com/syabuo/items/a1652db49ed698cd340e)
単体テストの時にlog4netで出力した内容を確認する方法

# はじめに
* 単体テストケースにて、log4netで出力したメッセージも確認項目に含めたいときのメモ

# 単体テストプロジェクト側でのログ出力設定
* テスト対象プロジェクト側にてlog4netでのログ出力の実装を行っていても、単体テスト側から処理を呼び出した場合、ログ出力は行われない
（なんでかはちゃんと調べてない）
* 単体テスト用プロジェクトのApp.configに同じようにアペンダー設定をつっこむとログ出力されるようになる
* AppendToFileをfalseにすることでログ出力時、必ずローテーションを行うようにする（この方がテストしやすい）

```xml:App.config
  <configSections>
    <section name="log4net" type=" log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <log4net>
    <appender name="SizeRollingLogToFile" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="ログファイル名"/>
      <param name="staticLogFileName" value="true"/>
      <param name="AppendToFile" value="false"/>
      <param name="MaxSizeRollBackups" value="0"/>
      <param name="RollingStyle" value="Size"/>
      <param name="MaximumFileSize" value="1MB"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] [%-5p] %c %M - %m%n"/>
      </layout>
    </appender>
    <root>
      <level value="INFO"/>
      <appender-ref ref="SizeRollingLogToFile"/>
    </root>
  </log4net>
```


# 単体テストでの確認
* 単体テスト内でログファイルをStreamReaderで読もうとすると、log4net側と競合しSystem.IO.IOExceptionとなる
* 仕方ないので別名ファイルにログを一時的にコピーし、そちらを読み込む
* ログファイルの先頭行に確認したいメッセージが存在する場合、以下のようなイメージでテストする

```c#:SampleTest.cs
[TestMethod]
public void TestMethod()
{
    // テスト対象メソッドを実行
    適当なクラス.適当なメソッド();    

    // メインのログファイルは読み込めないため、確認用に一時的にコピー
    File.Copy("ログファイル", "一時的なログファイル", true);

    // ログファイルの読込み
    using (StreamReader file = new StreamReader("一時的なログファイル", Encoding.GetEncoding("shift_jis")))
    {
        // ファイルの先頭行を読み込み
        string line = file.ReadLine();
        // ログ内に適切な文言が存在するかどうか
        Assert.IsTrue(line.Contains("出力されるべきメッセージ"));
    }
}
```
LaravelでSeederを使ってダミーデータを入れる



# はじめに
railsの勉強してたら「PHPでSeeder使えるのかな」と思って
ググったら真っ先にLaravelが出てきたので実装してみました。

# Seederとは？

>種をまく人、種まき機、種取り機

(参考：https://ejje.weblio.jp/content/seeder)

Laravelではデータベースにテストデータを一斉に挿入する処理を指します。
DBに種をまくというイメージです。

# 実装
`artisan`コマンドで`seeder`クラスを生成します。
ターミナルで

```
php artisan make:seeder "seederClass"
```
を実行すると、 `database/seeds`下に`DatabaseSeeder.php`と`seederClass.php`が生成されます。
`DatabaseSeeder.php`の中身は以下のようになっています。

```DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
       // $this->call(UsersTableSeeder::class);
    }
}
```
後述の実行コマンドが叩かれた際はこのrun()が呼び出されます。　

`seederClass.php`の中身は以下のようになっています。

```seederClass.php
<?php

use Illuminate\Database\Seeder;

class seederClass extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}
```

上記のrun()にDBへの挿入処理を書いていきます。
Databaseの設定は`config/database.php`で行います。

```database.php
<?php
 
return [
    // ....
 
    'default' => env('DB_CONNECTION', 'mysql'),
    
    // ....

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'hoge'), // ここで記述したデータベースを使用
            'username' => env('DB_USERNAME', 'hoge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
 
    // ....
    ];
];
```

実際にrun()を実装してみます。

```DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
       $this->call(seederClass::class);
    }
}
```


```seederClass.php
<?php

use Illuminate\Database\Seeder;

class seederClass extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
       DB::table('table')->insert([
          'name' => 'username',
          'email' => 'mail@example.com'
        ]);
    }
}
```

記述後、ターミナルで

```
php artisan db:seed
```
を実行するとダミーデータの挿入が完了する。


#おわりに
実はseederはテーブル作成で使われることが多いです。
ダミーデータの挿入は`faker`と`factory`を使うので、`seeder`だけで行うケースは少ないです。
今回は簡単なデータ挿入ですので`seeder`だけで行いました。
`faker`や`factory`を使ったダミーデータの挿入は後日公開いたしますのでご期待ください。

### 参考文献
・[weblio-seederとは](https://ejje.weblio.jp/content/seeder)
・[Qiita-Laravelでシーダーを使う](https://qiita.com/shosho/items/b69db263a494edfe3b21)
・[Laravel 5.6 データベース：シーディング](https://readouble.com/laravel/5.6/ja/seeding.html)
Rspecメモ

# 失敗したらとりあえずマイグレーション＆シーディング

別のブランチでマイグレーションファイルの追加などあった場合はテスト用DBにて追加分のマイグレーションとシーディングを実行しないとテストが失敗する。

```
rake db:migrate RAILS_ENV=test
rake db:seed RAILS_ENV=test
```
rgb()表記の値とrgb()表記以外の値をrgb配列にする

`#fff`などの値を`[255, 255, 255]`などのデータに変換する用事があったのでメモ。

# 結論
```javascript
const str2rgb=e=>{let p=document.createElement("p");p.style.color=e;return p.style.color.replace(/[()rgba ]/g,"").split(",")}
```
使い方:

```javascript
str2rgb("#fff")
// => [255, 255, 255]
```
rgba、hslなどの形式も対応している。
_※ ブラウザが解釈できれば_

# やっていること
jsでスタイルを取得するとrgbに変換されることを利用したもの。
なので`document.createElement`で適当な要素を作り色を指定&取得して整形して返しているだけ。

# 没バージョン
こちらは`#fff`などの表記しか対応していない上コードが長い。

```javascript
s=>/^#([0-9a-f]?[0-9a-f]{3}|([0-9a-f]{2})?[0-9a-f]{6})$/i.test(s)?(s.replace(/#/g,"").split("").map(e=>/4|5/.test(s.length+"")?e.repeat(2).split(""):e)).flat().reduce((b,c,i)=>i%2==0?b+","+c:b+c,"").substr(1).split(",").map(e=>parseInt(e,16)):[]
```
使い方は同じ。

# 追記
https://qiita.com/nyanwan202/items/3ceac2088fefd9b5e3ad#comment-6b63bb090f7f32d8c4e0
> DOMに触るとオーバーヘッドがあるのでは？という点が心配だったので、簡単なベンチマークを取ってみました。

> これはhsl()や色名の指定に対応していない簡易版のピュアJS実装との比較ですが、自分の環境ではDOMに触る方が6～7倍遅いという> 結果でした。
> とはいえ、10万回実行してもChromeではピュアJSで70ミリ秒に対しDOMで460ミリ秒といったオーダーで、1回あたりの実行コストはもはや誤差レベルなので、実用上はDOMを使う方法で全く問題無さそうですね。

自分の環境でも試したところ、今回のプログラムは~~1.2秒~~0.012msほどかかっていました。
> 追記2
> https://qiita.com/nyanwan202/items/3ceac2088fefd9b5e3ad#comment-82f2c8defe5f4bd036f0
> また勘違いしていました。
> 1.2秒だと思っていたのは10万回の実行時間だそうで、
> 1回あたりは0.012msだそうです。

これは個別にプログラム書いて計算した方がよさそう。

あとnpmパッケージで良さそうなのないかと思って探して見ました。
+ https://www.npmjs.com/package/color
+ https://www.npmjs.com/package/color-convert
どちらもGithubでソースコードを見たところDOMはいじってないようです。
よくよく考えたらNode.js上で動くんですから当たり前ですね。

weekly downloadsはcolor-convertの方が上ですね(2019/05/08)。

| Name | Count |
|:-----|------:|
| color | 5,719,940 |
| color-convert | 9,194,594 |

~~文章の書き方が違うのは気分~~
LINEログインした際にそのまま公式アカウントを友達に追加させる方法

諸事情で実装を凍結させることが決まったので調査が終わったところまでを忘れないようにメモ書き程度に。

LINEログイン→友だち追加は最初は出来ないと思っていたのだがよくみたら下記URLがそれについての文書だった。気づかなかったのは「LINE公式アカウントをLINEログインのチャネルにリンクする」という文面が完全に意味不明だったからだ。
https://developers.line.biz/ja/docs/line-login/web/link-a-bot/

「LINE公式アカウント」がこっちが開設している／するアカウントのことなのか、本物のLINE公式アカウントのことなのか意味不明だし、LINEログインのチャネルにリンクするもそれだけ読むと意味不明である。実際にはLine developerではLINEログインやMessageAPI用のアカウントを「チャネル」と呼んでおり、その「LINEのログイン」用のチャネルにMessageAPIをリンクする設定を行うことで、LINEログイン時にあなたが持っているLINEの公式アカウントを友達に追加させるかどうかを選ばせることができますよということなのである。

そんなん「LINE公式アカウントをLINEログインのチャネルにリンクする」だけじゃわからんじゃろと思うのだがまあよく読めという話なのか？　なんでもいいが……。

で、実際問題そのままよくわからなかったのだがLINEログインチャネルに下記のような設定項目があるので、ここで別途作ったMessageAPIのチャネルを設定してやり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161772/8ec72753-3c1f-6c8e-096d-1027d99ab94d.png)

LINEログイン時のリダイレクトURLへのパラメータに```bot_prompt```をnormalかaggresiveかのどちらかを設定してやることで、LINEログインでの認証→友達追加をするか否か、といった感じで画面遷移できるようになった。これで友だち追加してもらえればサービス側からLINEを通じてお知らせとかを通知できるようになるのだ。
いろいろな端末でWebページの表示を確認する方法


webアプリケーションを開発していると、いろいろな端末（OSやサイズ）で確認する必要がありますよね。
自分の持っている端末だけで確認するのは、物理的にも予算的にも現実的ではありません。

でも大丈夫、大抵のブラウザには検証モード（developer mode）なる機能があり、その機能を使えば色々な端末をエミュレートすることができます。

この記事では、Google Chromeを使って、いろいろなサイズの端末を検証したり、設定を追加する方法を説明します。

## この記事で説明すること / しないこと
### すること
* Google Chromeで端末サイズを擬似的に変更して、Webページの表示を確認する方法
* Google Chromeに新しい端末設定（※1）を追加する方法

※1 端末設定
- 名前
- サイズ
- UserAgent
など

### しないこと
* Chromeの詳しい使い方

## 新しい端末設定を追加する方法
### 新規UserAgentを追加する手順

#### 1. 右クリック→検証（Inspect）

![Kobito.uecUWc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37873/a3ca8855-3a32-d97a-c932-d94a85f4ce2d.png "Kobito.uecUWc.png")

#### 2. デバイスを表示させる

![Pasted_Image_2019_05_08_11_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37873/1a880813-4fba-2d21-7c99-e3e1125a5c01.png "Pasted_Image_2019_05_08_11_03.png")


#### 3. Edit画面を開く

![Pasted_Image_2019_05_08_11_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37873/528967b2-1dae-acc9-7526-ac83fa7f3c53.png "Pasted_Image_2019_05_08_11_07.png")

#### 4. デバイス追加画面を開く

![Pasted_Image_2019_05_08_11_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37873/9c946652-23ca-13bf-594f-0c2f49c3bef3.png "Pasted_Image_2019_05_08_11_09.png")

#### 5. デバイスの設定を追加する

![Pasted_Image_2019_05_08_11_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37873/61a92131-0818-ef33-2ecd-67d6b3df640c.png "Pasted_Image_2019_05_08_11_14.png")

## Tips
プログラマ向けですが、ユーザーエージェントを確認するミニプログラムです。
文字列一致などかける際に、表記ゆれの影響を避ける癖で、別に全部小文字に変換しています。

```javascript
var ua = navigator.userAgent.toLowerCase();
console.log(ua);
```


## まとめ

よいWebライフを！

## 参考文献

- [userAgent（ユーザーエージェント一覧）](http://www.openspc2.org/userAgent/)
  - 少し古いですが、たくさんまとまっています。
- [List of mobile browser User-Agent strings](https://deviceatlas.com/blog/mobile-browser-user-agent-strings)
MongoDB Agentへの統合

## 概要
[MongoDB Cloud Manager](https://cloud.mongodb.com/)にて現状使用されている
- Monitoring Agent
- Automation Agent
- Backup Agent
の機能を統合した、**"MongoDB Agent"**が出るとのアナウンスが有ったので簡単にまとめる

本家のアナウンス(FAQ)は[こちら](https://docs.cloudmanager.mongodb.com/reference/faq/faq-mongodb-agent/)

## 抄訳
4月中旬から5月にかけて、今までそれぞれ分かれていた
- Monitoring Agent
- Automation Agent
- Backup Agent
の機能を統合した、MongoDB Agentが出る

リリースされ次第、いつも通りCloud ManagerのUIから更新が促される
MongoDB Agentに更新しない選択肢もあり、最終版を使用し続けることもできるが、
bug fixと機能追加は今後リリースされない

更新の際は、プロジェクト内のすべてのクラスタを更新する必要がある
そのタイミングからフローが変わり、Cloud ManagerのUIも少し変わる

Cloud Manager APIは、MongoDB Agentをサポートする
そして、API経由でのMongoDB Agentへの更新も可能

MongoDB Agentのインストーラーは新しい名前にならず、
"mms-automation"のままになる

Automation Agentの認証にPEMキーファイルとパスワードを使っている場合は、更新後も設定は保持される
Cloud Managerの"Security > Authentication & TLS/SSL"にて設定を行っていた場合は同様に、現状のPEMキーファイルとパスワードがMongoDB Agentでも使用される
Monitoring AgentおよびBackup Agentにて設定されていたPEMキーファイルとパスワードは、MongoDB Agentページの新しいカスタム構成セクションにエクスポートされ、
この値を上記と同様にCloud Managerの"Security > Authentication & TLS/SSL"に上書きするかどうか、警告が表示される

Monitoring Agentだけ使用しているパターンでは、
更新後、プロジェクトに必要なカスタム監視設定オプションを入力できる
Backup Agentだけを使用しているパターンでも同様に、Monitoring and Backup設定オプションを入力が可能

今まで分かれていたそれぞれのagent実行ユーザ
（mms-automation, mms-monitoring-agent, mms-backup-agent）は、
1つ（mms-automation）に統合される
古いMMSユーザーを他の目的で使用している場合に備えて、更新のタイミングでそれらが削除されることは無いが、
更新時にCloud Managerはそれらのロックを解除するため、消すことが可能になる
ExcelのチェックボックスをVBAでチェックする方法

備忘録として残します。

#■やり方
.Activesheetのwith内という前提ですので途中のオブジェクトのset云々は割愛します。


```vb
.Checkboxes("checkbox_name").value = True
.Checkboxes("checkbox_name").value = False
```
AccessからのセットであればYesNo型でも大丈夫みたいです。

**1点注意点があり、ExcelのチェックボックスにはフォームコントロールとActiveXの2種類ありますがフォームコントロールでないと上記の方法は使用できません。**
Go初心者が、GWに、GitHubAPIを使ってCLIツールを自作してみた話

## その名もgopr

https://github.com/yutaroyamanaka/gopr
go + Pull Reqeust(以後PR)の頭文字をとってくっつけただけのシンプルな名前です。
Go初心者かつ、学生である筆者がアウトプットとしてGWに集中して開発しました。(10連休長かった!)

OrganizationまたはUserと、Repositoryを指定することで、そのRepositoryでOpenになっているPRの情報が取得できたり
新しくPRを作成したりできます。(ここらへんは hubコマンドに似ていますね。 https://github.com/github/hub)

詳しい使い方は、READMEを読んでください。
https://github.com/yutaroyamanaka/gopr/blob/master/README.md

### インストールして、使ってみる。

macの方は、homebrewでインストールできます。
Linuxでamd64の方は、https://github.com/yutaroyamanaka/gopr/releases
ここからダウンロードできます。Windowsは今回動作の確認手段がなかったのでリリースしていません。

```
$ brew tap yutaroyamanaka/gopr
$ brew install gopr
```

続いて、GitHubAPIのAccess Tokenを取得します。
your github account nameのところを、自分のGitHubユーザー名にしてください。

```
$ curl -u 'your github account name' -d '{"scopes":["repo"],"note":"Help example"}' https://api.github.com/authorizations
```

レスポンスにあるtokenをbash_profileなどで、環境変数化させてください。

```
export GITHUB_TOKEN="your_token"
```

例えばOSSのDocker/composeに関して、今出ているPRの一覧を取得してみましょう。

```
$ gopr -o docker -r compose info
```

こんな感じで、誰がいつ、どんな内容のPRを出したのかの概要がわかります。
![list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264663/a7426e52-044e-28a4-8faf-59ab3d6456b8.png)


続いてPR番号を指定して、詳細を見てみましょう。

```
$ gopr -o docker -r compose -n 6４７６ info
```

コミットログや、PRの内容がわかります。
![detail-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264663/b51d7084-3c80-019c-a686-ca25096b844e.png)



PRのheadとbaseの差分も取れます。

```
$ gopr -o docker -r compose -n 6584 diff
```

![diff.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264663/7bfd57af-c2ff-2e48-882f-531b2692c8b2.png)

最後に、PRを出してみましょう。今回は、Docker/composeに出すわけにもいかないので私のRepositoryで出します。

```
$ gopr -o yutaroyamanaka -r gopr create
```

綺麗に、Branch名の補完も効きます。(見た目がかっこいい...)
TitleとBody, headとbaseとなるBranchを入力してあげれば、新しくPRが作成されます。
<img width="559" alt="スクリーンショット 2019-05-03 15.03.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264663/39c4948a-828c-9d7c-bd01-91c4d8b78eb9.png">

### 使ったライブラリやAPIなど

簡単かつ速やかにCLIツールが、作れるライブラリです。
https://github.com/urfave/cli

新しくプルリクエストを出す際に、ブランチ名を補完するのに使いました。
見た目がかっこよくなりました。
https://github.com/c-bata/go-prompt

GitHub API
Pull Requestなどの情報を取るために使用しました。
エンドポイントとかが非常に人間にわかりやすく、綺麗な設計がなされていると感じました。
https://developer.github.com/v3/


### 感想

GitHubAPIや他のライブラリを使って、Go初心者でもかなり短時間でちょっとしたCLIツールを作ることができました。とはいえ、まだテストコードが不十分であったりコードが汚いなど、問題も山積みなので
これから少しずつ直していこうと思います。意見や感想などがあればGitHubのIssueなどに出してくれると嬉しいです。
SlackBotをHerokuでデプロイ

折角Botを作成したので、デプロイしましょう！今回はHerokuを使って、簡単にデプロイします。(AWSのLamdaとAPI Gatewayあたりも考えていたのですが。。その辺りは知見のある方の意見が欲しいところです。)

## デプロイ準備
※Herokuのアカウント登録などは諸々済んでいる前提で進みます。
登録がまだの方はherokuの記事を参考に
https://qiita.com/Arashi/items/b2f2e01259238235e187
`heroku login` まで終わらせると良いかと。

#### Procfile作成
ProcfileとはHerokuデプロイ後に実行されるファイルのこと。
`プロセスタイプ： 実行するコマンド` という形式で記述します。

プロセスタイプとは？
https://jp.heroku.com/dynos/configure

<img width="891" alt="process_type.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168550/4d8b886c-054a-e840-91f9-3d144cf718f1.png">

```ruby:Procfile(正しい)
worker: bundle exec ruby slack_bot.rb -p $PORT
```

ちなみに、ここをずっと

```ruby:Procfile(間違い)
web: bundle exec ruby slack_bot.rb -p $PORT
```

にしていて、

```:エラー
$ heroku logs

:
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
:
```

プロセスの指定お気をつけください。今回の正解は `worker` です。


## デプロイ
```:ターミナル
$ heroku login
Enter your Heroku credentials.
Email: sample@example.com
Password (typing will be hidden):
Authentication successful.

(デプロイしたいアプリケーションディレクトリに移動)
$ git init
$ git add .
$ git commit -m "hello heroku commit"
```

Heroku Buildpack for Rubyを利用してrubyアプリケーションをデプロイするための環境を整えます。

```
$ heroku create --buildpack https://github.com/heroku/heroku-buildpack-ruby.gitを実行
```

```
$ git push heroku master

Counting objects: 4, done.
:
:
remote: Verifying deploy... done.
To https://git.heroku.com/xxxxxxxxxxxxxxx.git
 * [new branch]      master -> master
```

環境変数

```
# 環境変数の設定
$ heroku config:set SLACK_API_TOKEN=xoxohogehoge(slackのtoken)
$ heroku config:set GITHUB_USERNAME=hogename(githubアカウント名)
$ heroku config:set GITHUB_PASSWORD=hogepass(githubパスワード)

# 環境変数の確認
$ heroku config
```

workerプロセスを起動する

```
$ heroku scale worker=1
```

プロセス確認

```
$ heroku ps
Free dyno hours quota remaining this month: 532h 36m (96%)
Free dyno usage for this app: 0h 36m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== worker (Free): bundle exec ruby slack_bot.rb -p $PORT (1)
worker.1: up 2019/05/08 09:50:15 +0900 (~ 26m ago)
```
こんな感じで`worker.1: up` していればOK!
プロセスを停止したいときは、

```
$ heroku scale worker=0
```

以上でherokuでデプロイ完了です。
Slack場でBotが適切に動くか確認してみて下さい。


<img width="275" alt="slack_bot.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168550/569d176e-7146-5a6d-2716-3009048dbb4a.png">



またこの記事に対して何か間違えている部分があれば、コメントして頂けると助かります。
pug realtime render

-demo https://codepen.io/gnjo/pen/mYJzKM?editors=1010
-api https://pugjs.org/api/reference.html

```html
<script src="https://gnjo.github.io/pug/pug.js"></script>
```
```js
//check 
console.log(window.pug)
```

```js
 //core
 //default render
 var html=pug.render(str,{pretty:true})

 //debug hint mode
 let caller=(err)=>{console.log(err)} //null is ok
 pug.render(str,{compileDebug:true},caller)
```
C++ Builder 10.2 Tokyo > String > Raw string literal > 使おうとしてやめた | 想定していたRaw string literalの利点 | 64bitエラー > 解決 (Raw string literalの書き方の間違い)

```txt:動作環境
RAD Studio 10.2 Tokyo Update 3
```

### 状況

```cpp
fileSL->Add("{\"1_hogehoge\":\"3\", \"2_fugafuga\":\"1\",\"3_hogehoge\":\"4\", \"4_fugafuga\":\"1\", \"5_hogehoge\":\"5\", \"6_fugafuga\":\"9\"}");
```

JSON文字列を定義。
読みにくい。

Pythonにはraw文字列の定義があった。

C++にもあった。

http://www.hellenico.gr/cpp/w/cpp/language/string_literal.html

使おうとした。

### 32bitの壁

32bitアプリケーションに適用。

```
> [bcc32 エラー] XXX.cpp(107): E2451 未定義のシンボル R
```

- [C++11 機能を使用する簡単な C++ アプリケーションを作成する](http://docwiki.embarcadero.com/RADStudio/Rio/ja/C%2B%2B11_%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E7%B0%A1%E5%8D%98%E3%81%AA_C%2B%2B_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)

32bitアプリケーションではだめなのか。


### 64bitでのエラー

64bitアプリケーションにしてみた。

```
> ... error E743: 生の文字列の区切りが 16 文字を超えています。生の文字列を区切るには <プレフィックス>( )<プレフィックス> を使用してください
```

Raw string literalにする利点が減るな。

やめた。

短い文字列に対しては使うのはいいが、(32bitユーザがいることを知っていて)32bitを切ってまでRaw string literalを使うのはしない。
(数年後には32bitユーザがいないかどうか）


### 想定していたRaw string literalの利点

- A. ソースリーディングの負荷が減る
- B. JSONファイルの内容をそのままString定義に利用できる
    - エスケープシーケンスを文字列中に入れる作業が不要

 
### 関連

- [2008-12-07 Raw string Literalについて](https://cpplover.blogspot.com/2008/12/raw-string-literal.html) by 本の虫様

情報感謝です。


### 64bitエラー > 解決

@yumetodoさんの[コメント](https://qiita.com/7of9/items/69833dc8817172fdcbfc/#comment-07a1b8a93d905b3dd950)から再検討した結果、64bitでのエラーを回避できることが分かりました。

情報感謝です。

対応を[コメント](https://qiita.com/7of9/items/69833dc8817172fdcbfc/#comment-72741beb600591a1c9a0)に書きました。
Excellaを使用してExcel及びPDFを出力する方法

# Excellaのインストール
  build.gradleにexcellaを指定する

    dependencies {
      compile("org.bbreak.excella:excella-core:1.12")
      compile("org.bbreak.excella:excella-reports:1.11")
      compile("org.bbreak.excella:excella-trans:1.8")
    }

# Excelを出力する　
## Excelテンプレートを作成
   以下を参考にExcelのテンプレートを作成する
   http://excella-core.github.io/excella-core/reference/index.html
   http://excella-core.osdn.jp/excella-reports/reference/index.html

## Javaコード

```ExcellMakeService.java

      ReportBook outputBook = new ReportBook("C:\\templace\\template.xlsx", "./out", ExcelExporter.FORMAT_TYPE);

      ReportSheet outputSheet = new ReportSheet("report");
      outputBook.addReportSheet(outputSheet);

      //ここにはテンプレートで定義した変数に値を設定する処理を記述する(省略)

      ReportProcessor reportProcessor = new ReportProcessor();
      try {
        reportProcessor.process(outputBook);
      } catch (Exception e) {
        e.printStackTrace();
      }

```

# PDFを出力する
## excella-pdfexporterの準備
   バージョン1.12ではexcella-pdfexporterが含まれていないため、以下のサイトよりソースを取得する。
   https://github.com/excella-core/excella-pdfexporter

   上記から取得したソースをプロジェクトに組み入れるかしてビルドする。

## Libre Officeの入手
   PDFへの変換にはLibre Officeを使用するため以下からダウンロードしインストールする
   https://ja.libreoffice.org/

## Javaコード
   上記のExcellMakeService.javaにコードを追加する

```ExcellMakeService.java

      System.setProperty("java.io.tmpdir", "/tmp/");
      //入手したLibre Officeのパスを設定する。
      System.setProperty("office.home", "C:\\Program Files\\LibreOffice");
      //ExcelExporter.FORMAT_TYPEをOoPdfExporter.FORMAT_TYPEに変更
      ReportBook outputBook = new ReportBook("C:\\templace\\template.xlsx", "./out", OoPdfExporter.FORMAT_TYPE);

      ReportSheet outputSheet = new ReportSheet("report");
      outputBook.addReportSheet(outputSheet);

      //ここにはテンプレートで定義した変数に値を設定する処理を記述する(省略)

      ReportProcessor reportProcessor = new ReportProcessor();
      //ExporterにOoPdfExporter追加
      reportProcessor.addReportBookExporter(new OoPdfExporter());

      try {
        reportProcessor.process(outputBook);
      } catch (Exception e) {
        e.printStackTrace();
      }

```
rails新規アプリ

Railsのバージョン
対象ディレクトリに移動
rbenv local 2.5.1
rbenv global 2.5.1
Ls -la rubyのバージョン確認
rails new アプリ名 -d mysql --skip-bundle
bundle install --path vendor/bundle
Bundleのパスを指定するためにskipする
【Unity】Githubの初期設定をする【Sourcetree】

# 概要
Unityで新しくプロジェクトを始める際に、Github周りの設定をどうすればいいのか毎回迷うのでメモとしてまとめてみました。
もっと良い方法があると思いますが、この方法が参考になれば幸いです。

# 環境
- macOS Mojave 10.14.4
- Unity 2019.1.1f1
- [Sourcetree 3.1.2](https://www.sourcetreeapp.com)

# 方法
###手順1
1. Sourcetreeの初期画面に、Unityで作成したプロジェクトのフォルダをドラッグ&ドロップ
1. ローカルリポジトリを作成
1. 追加したローカルリポジトリを開く <img width="720" alt="スクリーンショット 2019-05-08 午前9.14.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164430/ba1c522d-e787-b540-85ef-a41d772dafbf.png">

###手順2
設定(右上) -> 高度な設定 -> リポジトリ限定無視リストを編集 (.gitignoreを編集) -> 下のスクリプトをコピペ

```
[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
[Ll]ogs/

# Never ignore Asset meta data
![Aa]ssets/**/*.meta

# Uncomment this line if you wish to ignore the asset store tools plugin
# [Aa]ssets/AssetStoreTools*

# Visual Studio cache directory
.vs/

# Gradle cache directory
.gradle/

# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db

# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta

# Unity3D generated file on crash reports
sysinfo.txt

# Builds
*.apk
*.unitypackage

# Crashlytics generated file
crashlytics-build.properties
```
 
###手順3
1. ブラウザで[Github](https://github.com)を開く 
1. Repositoriesに行ってNewを押す
<img width="1085" alt="スクリーンショット 2019-05-08 午前9.38.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164430/74d3a406-bf68-3654-6f8c-34a87a2c6c0e.png">


1. Repository nameを入力
1. リポジトリをpublicにするかprivateにするか選択する 
(Initialize this repository with a README と Add .gitignore と Add a license に関しては何もしない)
1. Create repository
<img width="851" alt="スクリーンショット 2019-05-08 午前9.37.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164430/a8e60cff-a681-07a2-4e6c-3cfa1f7b9d43.png">

###手順4
HTTPSのURLをコピー
<img width="1045" alt="スクリーンショット 2019-05-08 午前10.03.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164430/de6e6dcc-c72b-423b-b520-b82465f012cf.png">

###手順5
1. Sourcetreeに戻り、リポジトリ(画面上) -> リモートを追加
2. リモートの名前を入力 -> URL欄に先ほどコピーしたURLをペースト -> OK

これで初期設定は完了のはずです。

#参考文献
[わかばちゃんと学ぶGit使い方入門]
(https://www.amazon.co.jp/わかばちゃんと学ぶ-Git使い方入門%E3%80%88GitHub、Bitbucket、SourceTree〉-湊川-あい/dp/4863542178)
AutoLayout制約の切り替え

iOS9からNSLayoutAnchorが登場し、NSLayoutConstraintを利用してレイアウトの制約を作成するより、簡単でわかりやすくなりました。
とは言っても、いざ複数の部品で構成される画面を作成するとなると、面倒になるのでStoryboardで制約を設定していくことの方が多いかと思います。

多くの場合は、StoryboardでAutoLayoutの制約を設定して終わることが多いのですが、今回、画面を作成するにあたって、TableViewのセルごとに制約を変更する場面が出てきたので、Storyboardでの制約を設定をなるべく使って必要なところだけソースコードでのAutoLayoutの切り替えを行いましたので、その内容をまとめたいと思います。

## 環境
Xcode10.2（Swift5.0）の環境で内容をまとめます。

## 1.画面構成

以下の画面を元に、AutoLayout制約の切り替えを説明します。

|画面イメージ|
|---------|
|<img width="360" alt="画面1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361214/c8ea7117-7f9f-8165-2fe9-a189bf82ed2a.png">|


画面はTableViewで作成されていますが、セルによってレイアウト情報があり、タイトルの縦の位置が左下になったり、中央になったりします。
横の位置のAutoLayoutの制約は常に中央にしておいて、縦の位置のAutoLayoutの制約は、NSLayoutAnchorでいう下の制約（**bottomAnchor**の設定）と中央の制約（**centerYAnchor**設定）を切り替えることにより、タイトルの左下／中央の位置を切り替えます。

（画面のタイトルは左下と中央でフォントサイズやアライメントが変更されていますが、その説明はここでは省略します。）

## 2.Storyboardでの設定

はじめは、ソースコードでレイアウト情報によってタイトルの位置の左下と中央の制約の書いて、切り替えようと思いました。ただ、AutoLayoutの制約は普段Storyboardで設定することが多く、あまりソースコードで書き慣れていないのと、今後レイアウト情報が増えてタイトルの位置が追加となった場合にちょっと面倒と思い、ふとStoryboardで制約を作っておいて切り替えられないかなと考えました。
そうしていろいろ調べたところ、Storyboardの制約の設定にinstalledという項目（以下の画面イメージ右の赤枠を参照）があり、いくつか適用したい制約を作っておいて、このinstalledの項目を1つだけチェックを付けておくことで、1つの制約だけをアクティブに、その他の制約は非アクティブにしておくことができます。（複数制約を作るとコンフリクトしますので、1つの制約だけをアクティブにしておきます。）

<img width="1072" alt="画面2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361214/4fe38d0b-afcf-f339-11ce-959f2912336a.png">

非アクティブになっている制約は、画面イメージの左の赤枠のようにアイコンの色が薄くなります。

## 3.ソースコードでの制約切り替え

StoryboardでAutoLayoutの制約を作成したら、後はレイアウト情報によってソースコードで制約を切り替えます。
以下はサンプルコードです。

```swift

    @IBOutlet weak var stackViewBottomConstraint: NSLayoutConstraint!
    @IBOutlet weak var stackViewCenterYConstraint: NSLayoutConstraint!

    // （途中省略） //

    func updateTitlePosition() {
        // タイトルとリンクボタンの表示位置
        switch position {
        case .center:
            stackViewBottomConstraint.isActive = false
            stackViewCenterYConstraint.isActive = true
        case .bottomLeft:
            stackViewCenterYConstraint.isActive = false
            stackViewBottomConstraint.isActive = true
        }
    }
```

作成した制約はIBOutletで制約のプロパティに接続しておきます。```updateTitlePosition```のメソッド内レイアウト情報（position）によって、isActiveプロパティでアクティブと非アクティブを切り替えることでタイトルの位置を変更しています。

これで、ちょっとややこしい制約の設定はStoryboardで設定して、切り替え自体はソースコードで記載できるので、簡単にできるかと思います。
Hyper-V上にインストールしたCentOSでネットワークがエラーなのでOS毎再セットアップした方が良いのか判断つかない

お世話になっております。

以前Hyper-V上にCentOSをインストールしたのですが
久しぶりに使ってみようとするとIPアドレスが取得出来ていません。

前にQiitaで記事を書いたかも……

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390710/89b8ce7a-fcf0-28c2-bd96-84f94adea1c7.png)
ｊ
とのエラーです……
解決方法が不明なのですが多分
DHCPサーバーが見つからないヨと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390710/fc309930-8df5-2712-f74b-ac23cb3ec595.png)
書いてある気がするのですがCentOSでネットワークを再セットアップした方が良いのか
不明だから
CentOSを再インストールした方が良いのか謎です……

昔CentOSをインストールしようとしていたドキュメント探すかな……
Flutter記事 : a Portable UI Framework for Mobile, Web, Embedded, and Desktop のメモ

以下の記事の雑なまとめ ＆ 自分用のアウトプット

*Google Developers Blog: Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop*
https://developers.googleblog.com/2019/05/Flutter-io19.html

## モバイルからマルチプラットフォームへ
Web用のFlutterの最初のテクニカルプレビューをウェブで公開
New York Timesと協力してデモを作成
https://www.nytimes.com/games/prototype/kenken

本腰いれてFlutter for Webを開発してるらしい

## モバイルデバイス用のFlutter
Flutter 1.5.4がリリース
Announcing Flutter 1.5 – Flutter – Medium https://medium.com/flutter-io/announcing-flutter-1-5-d203c6072e5c

- App Store iOS SDKの新しい要件の更新
- iOSおよびMaterialウィジェットの更新
- 新しいデバイスタイプのエンジンサポート
- 新しいUI言語機能を備えたDart 2.3
- アプリ内購入プラグイン追加

今回のI/Oで特にエキサイティングなプロジェクトはMLキットカスタム画像分類器
https://github.com/firebase/mlkit-custom-image-classifier

- FlutterとFirebaseを使用して構築されており、カスタム画像分類モデルを作成するための使いやすいアプリベースのワークフローを提供
- スマフォのカメラを使用してトレーニングデータを収集し、他人にデータセットへの貢献、モデルトレーニングのトリガー、トレーニング済みモデルの使用をすべて同じアプリから依頼


Flutter Showcase
https://flutter.dev/showcase
Alibaba, Google Ads, Tencent, 他にもたくさんある

LinkedInの調査では、Flutterがソフトウェアエンジニアの間で最も急成長しているスキルである
（え？ 本当？）

## デスクトップ用のFlutter
数ヶ月間、私たちは実験的なプロジェクトとしてデスクトップに取り組んできた
https://github.com/google/flutter-desktop-embedding

Mac、Windows、およびLinuxで動作するようにFlutterアプリケーションを開発するための初期の手順を公開
https://github.com/flutter/flutter/wiki/Desktop-shells

## もう1つの急成長しているFlutterプラットフォームはChrome OS
特に教育分野
（アメリカでは教育用デバイスとしてChromebookが圧倒的な人気と聞いた）

Chrome OSは、AndroidとLinuxの両方のアプリケーションの実行をサポートしているため、Flutterの実行にも開発プラットフォームとしても最適な環境

Chrome OSでは、Visual Studio CodeまたはAndroid Studioを使用して、同じデバイス上でエミュレータなしでローカルにテストおよび実行できるFlutterアプリを開発できる

Chrome OS用のFlutterアプリをPlayストアに公開することもできます（面白そう）

## 組込み機器用Flutter
ラズパイにで実行できるFlutterサンプルがある
https://medium.com/flutter-io/flutter-on-raspberry-pi-mostly-from-scratch-2824c5e7dcb1

Flutterがすでに稼働している最も普及している組み込みプラットフォームの1つは、Google Home Hub
（Google Home HubではFlutterが使われていた！？）
Flutter Engineというものがあり、非常に低レベルのAPIであり、初心者には難しいようだ

Flutter用の埋め込みAPIを提供しています。これにより、家庭用、自動車用などのシナリオで使用できます


## The App BreweryでFlutterのトレーニングコースが作成された
https://www.appbrewery.co/p/flutter-development-bootcamp-with-dart/
ビデオ、デモ、ラボを含む30時間以上のコンテンツをFlutterに提供

Googleの後援により、今日、このコースの期間限定割引を199ドルからわずか10ドルまでと発表
（サイトにいくと本当に10ドルになってた）

## Flutter Create コンテストが終了
https://flutter.dev/create
5KB以下のDartコードでFlutterを使用して構築するコンテスト

優勝者は https://medium.com/flutter-io/the-flutter-create-winners-are-40980f2d20b3

## Flutter Codelabs もあるよ
Flutter入門、Firebaseとの接続、レイアウトの基本トレーニングなどが用意されている
https://flutter.dev/docs/codelabs
plunkerでjor1k その3

#概要

plunkerでjor1kやってみた。
linuxプログラミングしてみた。

#issueあげたら直った。

#結果


```
~ $ cat main.c                                                                  
#include <stdio.h>                                                              
#include <stdlib.h>                                                             

int main(int argc, char * argv[])                                               
{                                                                               
         int i;                                                                 
         for (i = 1; i < argc; i++)                                             
         {                                                                      
                 printf("%s%s", (i == 1 ? "" : " "), argv[i]);                  
         }                                                                      
         putchar('\n');                                                         
         exit(0);                                                               
}                                                                               

~ $ gcc main.c                                                                  
~ $ ./a.out abc                                                                 
abc                                                                             
~ $ uname -a                                                                    
Linux openrisc 4.4.0-42578-gacba10ee627d-dirty #6 Thu May 25 20:53:14 UTC 2017 openrisc GNU/Linux


```

以上。
Rails 5.2 + webpacker で FontAwesome 5 を利用する

簿記録として残しておきます。

# 環境

```bash
$ rails -v
Rails 5.2.3
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin18]
$ node -v
v11.11.0
$ yarn -v
1.15.2
```

`macOS Mojave`

## webfontを利用する

CSS/Sass/Lessでwebfontsを利用する。

**スタイルシートにwebfontsをインポートします。**

```bash
$ yarn add @fortawesome/fontawesome-free-webfonts
```

```scss:application.scss
$fa-font-path: '~@fortawesome/fontawesome-free-webfonts/webfonts'; 
@import '~@fortawesome/fontawesome-free-webfonts/scss/fontawesome';
@import '~@fortawesome/fontawesome-free-webfonts/scss/fa-solid';
```

## FontAwesome 5 を利用する

**Javascriptで、SVGを利用する**

```bash
$ yarn add @fortawesome/fontawesome
$ yarn add @fortawesome/fontawesome-free-solid
```

JSファイルへ以下を追加

```js:app/javascript/pack/[your_entry_point_file.js]
import '@fortawesome/fontawesome'
import '@fortawesome/fontawesome-free-solid'
```

**必要なアイコンだけをロードすることで、サイズを縮小しパフォーマンスを向上することができます。**

```js
import fontawesome from '@fortawesome/fontawesome'
import { faCoffee, faCameraRetro } from '@fortawesome/fontawesome-free-solid'
fontawesome.library.add(faCoffee, faCameraRetro)
```
Day005 webエンジニアへの道 - rails tutorialを進める -

こんにちは。
webエンジニアを目指すtomoです。

エンジニアの勉強をしている日々の学びを記録しています。
今回はDay005です。

---

##アクセスからアクションまでの処理の流れ

```:routing

# ユーザからのアクセス
 　↓
# URLによって実行するcontrollerとactionをルーターで指定
　root '[controller-name]#[action-nameA]'
 　↓
# controllerにて、アクションで実行する処理の内容を定義
　[controller-name]_controller.rb
　　def [action-nameA]
　　  [action]
　　end

　　def [action-nameB]
　　  [action]
　　end
```

##Railsチュートリアル全体に目を通す

体調があまり良くなかったので、コードを書くことを中断してチュートリアル全体に目を通すことに。

Railsチュートリアルは解説が丁寧で、まずコードを動かしてみる→ざっくりと分かったところで少しづつ用語やシステム全体の詳しい説明をしてくれることがわかります。

1章からじっくり進めるのも良いですが、個人的には全体を流し読みして内容やボリュームを掴んだ上で1章から順に進めるのが良いと思いました。
特に、分からない単語が出てきても後の章で解説される（進めるにつれて話の解像度が高くなる）ことが多いので、都度調べるよりまずマーカーだけして1周した後でもまだ分からないなら自分で詳しく調べる。とした方が効率が良いと感じました。

##今日のひとこと

継続して習慣化することが大事と信じて、亀の如き進捗であっても体調に合わせて勉強を続けていきたいと思います。

---

twitterもやっているので、宜しければフォローお願いします！
[@tomo_tech_](https://twitter.com/tomo_tech_)

私自身の頭の整理と今後迷った時のリファレンスも兼ねて書き連ねていきますが、同じようにエンジニア転職を考えている方の参考にもなればと考えています。
また、「ここ間違ってる！こっちが正しい！」といったご指摘もあれば頂けると嬉しいです🙏
.net framework って何

*19/05/09 各所伝わりにくい部分を追記修正

.
.NET Framework | IT用語辞典 | 大塚商会
https://www.otsuka-shokai.co.jp/words/dot-net-framework.html
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
https://wa3.i-3-i.info/word13559.html


..???

### ずばり

これ↓

```csharp:kouiuno.csharp
Console.WriteLine();
```

例として上のやつがそうなんだけど

中身の処理がこういう感じになってて

```csharp:
 public static void WriteLine()
 {
   Out.WriteLine();
 }
```

writeLine ってやるだけで色んな処理をやってくれるって事らしい
仕組み的な事っぽい

コード引用元：https://referencesource.microsoft.com/#mscorlib/system/console.cs,748bde83a8b838d8

### つまるところ

こういうコードを実行すると

```csharp:kakuyo.csharp
kakuyo(1,2,3);
```
こういう結果が出るとして

```
1
2
3
```
別の所でこんな感じのコードを保持しているからその結果が出ると

```csharp:kakuyo.csharp
public static void kakuyo(int i,int j,int k)
{
  system.console.writeline(i.tostring());
  system.console.writeline(j.tostring());
  system.console.writeline(k.tostring());
}
```
(上のは自分で用意したヤツだけど)
それが.net frameworkを入れると、こういうノリのがどっかに用意されてると


つまりはメソッドだね

.
.
ちなみにページ上部のわかりそうで～のサイトほんま判りやすいから参考にしようね
[Rails] MySQLでAccsess Deniedを吐かれたとき

# tl;dr
```
$ mysql -u root -p
```
でMySQLに入り

```
mysql> create user 'hoge'@'localhost' identified by 'パスワード'
```
でユーザーを作成し

```
mysql> GRANT ALL ON hugahuga_development.* TO 'hoge'@'localhost';
```
で作成したユーザーにDBを触る権限を与える。

# 状態

```terminal
Mysql2::Error::ConnectionError: Access denied for user 'hoge'@'localhost' (using password: NO)
```

DBをMySQL設定したときにありがちなエラーだが、該当する'hoge@localhost'というユーザーを設定した覚えもなく、パスワードに心当たりもない。


# 対策
その際の解決策として、

```
$ mysql -u root -p
```
でMySQLにroot権限で入り、'hoge@localhost'というユーザーを作成し直すという方法を試みた。

```
mysql> create user 'hoge'@'localhost' identified by 'パスワード'
```

　
変更した後にDBをdb:create等でDBを触ってみると、

```
Mysql2::Error::ConnectionError (Access denied for user 'hoge'@'localhost' to database 'hugahuga_development'):
```

次はユーザーではなくデータベースへのアクセスを拒否された。

hoge@localhostに該当のデータベースを触る権限がないようなので、先ほどと同じようにMySQLにroot権限で入って

```
$ mysql -u root -p
```

下記コマンドで権限を与える

```
mysql> GRANT ALL ON hugahuga_development.* TO 'hoge'@'localhost';
```

これで無事DBを触るコマンドを叩くことが出来た。
Visual Studio Bookmark

#ブックマーク
- ただのリンクは控えがたいが、業務に効果があったのは残す。


###【Visual Studio】Windows Defender に Visual Studio 2017 の除外設定を追加して、Visual Studio のビルド時間を高速化できるスクリプト紹介
http://baba-s.hatenablog.com/entry/2019/05/07/090000

コンパイル時間に悩んでいる処だった。Windows Defenderがファミリを疑っているとは気付かなかった。
i7にと稟議出すのも面倒なんで、当分様子見する。
Ruby on Rails Tutorialの６章でマイグレーションできなかった

2019/05/07
### 問題発生
Rails チュートリアルの６章の「メールアドレスの一意性を強制するためのマイグレーション」する箇所でマイグレートションができなかった。

```ruby
Admin:~/environment/sample_app (modeling-users) $ rails db:migrate
== 20190507235118 AddIndexToUsersEmail: migrating =============================
-- add_index(:users, :email, {:unique=>true})
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::BusyException: database is locked: CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email")
```

### 解決策
```SQLite3::BusyException: database is locked```はデータベースがロックされているという意味。マイグレーションする少し前にRailsコンソールでuserオブジェクトを作成する箇所があり、そこでデータベースがロックされてしまうらしい。コンソールから```exit```したら解決した。

```ruby
Admin:~/environment/sample_app (modeling-users) $ rails console --sandbox
Running via Spring preloader in process 7572
Loading development environment in sandbox (Rails 5.1.6)
Any modifications you make will be rolled back on exit
>> user = User.create(name: "Example User", email: "user@example.com")
   (0.1ms)  SAVEPOINT active_record_1
  User Exists (0.1ms)  SELECT  1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) LIMIT ?  [["email", "user@example.com"], ["LIMIT", 1]]
  SQL (1.4ms)  INSERT INTO "users" ("name", "email", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["name", "Example User"], ["email", "user@example.com"], ["created_at", "2019-05-08 00:15:31.209002"], ["updated_at", "2019-05-08 00:15:31.209002"]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
=> #<User id: 1, name: "Example User", email: "user@example.com", created_at: "2019-05-08 00:15:31", updated_at: "2019-05-08 00:15:31">
>> user.email.upcase
=> "USER@EXAMPLE.COM"
>> duplicate_user = user.dup
=> #<User id: nil, name: "Example User", email: "user@example.com", created_at: nil, updated_at: nil>
>> duplicate_user.email = user.email.upcase
=> "USER@EXAMPLE.COM"
>> duplicate_user.valid?
  User Exists (0.2ms)  SELECT  1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) LIMIT ?  [["email", "USER@EXAMPLE.COM"], ["LIMIT", 1]]
=> false
>> exit
   (0.2ms)  rollback transaction

```
はじめに

# このアカウントについて
データサイエンティスト、エンジニアとして、個人的なアウトプットをするためのものです。コードはできるだけ[GitHub](https://github.com/ytknzw)にて管理し、その説明を日本語で記述します。

# 筆者について
チューリッヒ保険に勤務し、マーケティングや営業、業務改善に関するデータ分析や機械学習モデル開発をしています。

- Twitter: [@yutakanzawa](https://twitter.com/yutakanzawa)
- GitHub: [@ytknzw](https://github.com/ytknzw)
- connpass: [Tokyo.R](https://tokyor.connpass.com/)

# Disclaimer
筆者が投稿したコードを読者が実行した結果については、第3者によってコードが改竄されていた場合であっても、筆者は**一切責任を負いません**。ただし、筆者が投稿した記事の内容と筆者のコメントには常識の範囲内で責任を負います。
JavaScript Date object  備忘録

#JavaScript Data Object 

##Date オブジェクト生成　

```Javascript
let today = new Date(); // 現在の日時のDateオブジェクトを生成
document.write(`現在時刻： ${today}`);
//出力結果
//現在時刻： Sat May 04 2019 20:08:58 GMT-0600 (アメリカ山地夏時間)

let sampleDate = new Date(2003, 5, 14) // 引数に指定した日時のDateオブジェクトを生成
document.write(`日時： ${sampleDate}`);
//出力結果
//日時： Sat Jun 14 2003 00:00:00 GMT-0600 (アメリカ山地夏時間)


let sampleDate2 = new Date("2012-03-13 12:30 PM");
document.write(`日時： ${sampleDate2}`);
// 出力結果
// 日時： Tue Mar 13 2012 12:30:00 GMT-0600 (アメリカ山地夏時間)

```

##dateObject.getFullYear()メソッド
戻り値 Dateオブジェクトの日時の年を示す４桁の数値。

```Javascript
let date1 = new Date();
let thisYear = date1.getFullYear();
console.log(`This year is ${thisYear}`);
//出力結果  "This year is 2019"

```


##dateObject.getMonth()メソッド
Dateオブジェクトの日時の何月かを示す数値を返すメソッド。
戻り値　
 0: １月
 1: ２月
 2: ３月
 3: ４月
 4: ５月
 5: ６月
 6: ７月
 7: ８月
 8: ９月
 9: １０月
 10: １１月
 11: １２月

```javascript

let today = new Date();
let arrMonth = new Array( '１月', '２月', '３月', '４月', '５月', '６月', '７月', '８月', '９月', '１０月', '１１月', '１２月' );

document.write(`今日は${arrMonth[today.getMonth()]}です`);
// 出力結果　今日は５月です

```

##dateObject.getDate()メソッド
ateオブジェクトの日時の日にちを示す数値を返すメソッド。
戻り値　Dateオブジェクトの日時の日にちを示す「1～31」の数値。

```javascript
let today = new Date();
document.write(`今日は${today.getDate()}日です。`);
//出力結果 　今日は4日です。

```

##dateObject.getDay()メソッド
Dateオブジェクトの日時から、曜日を示す数値を返すメソッド。
戻り値　Dateオブジェクトの日時の曜日を示す「0～6」の数値。
0: 日曜日
1: 月曜日
2: 火曜日
3: 水曜日
4: 木曜日
5: 金曜日
6: 土曜日

```javascript

let arrDay = new Array ( '日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日' );
let today = new Date();

document.write(`今日は${arrDay[today.getDay()]}です。`);
//出力結果 今日は土曜日です。

```

##dateObject.getHours()メソッド
Dateオブジェクトの日時の何時かを示す数値を返すメソッド。
戻り値 Dateオブジェクトの日時の何時かを示す「0～23」の数値。

```javascript
 let today = new Date();
 document.write(`今は${today.getHours()}時です。`);
// 出力結果 今は21時です。

```

##dateObject.getMinutes()メソッド
Dateオブジェクトの日時の何分かを示す数値を返すメソッド。
戻り値 Dateオブジェクトの日時の何分かを示す「0～59」の数値。

```javascript

let today = new Date();
document.write(`今は${today.getMinutes()}分です。`);
// 出力結果　今は11分です。

```

##dateObject.getSeconds()メソッド
Dateオブジェクトの日時の何秒かを示す数値を返すメソッド。
戻り値　Dateオブジェクトの日時の何秒かを示す「0～59」の数値。

```javascript

let today = new Date();
document.write(`今は${today.getSeconds()}秒です。`);
// 出力結果　今は53秒です。

```
Macで.bashrcを初期化する

しばらくMacを使っていると長時間触れるシェルをどんどんとカスタマイズ、ひいてはbashからzshに乗り換えてみたりなんてしてみていますが、一旦原点にふと戻りたくなったので、戻る方法を軽く探しました。しかし目立つところに自分が欲しかった情報がなかったので書き残しておきます。

## tl;dr

```sh
mv ~/.bashrc ~/.bashrc.bak # バックアップしておく
cp /etc/bashrc ~/.bashrc   # 初期ファイルをコピー
```

## `/etc/bashrc`

調べた情報を元に探してみたら`/etc/bashrc`にそれっぽいファイルがあっただけの話です。そしてこのファイルが本当に初期値なのかについては知りません（ぇ

それから調べてみると`/etc/bashrc`は`/etc/profile`がログイン時に一番最初に読み込まれ、その中で読み込まれると説明しているサイトがあったのですが、自分の環境には`/etc/profile`は無く、Macの`/etc/bashrc`はただの初期値っぽいです。間違っていたらマサカリを投げていただけると助かります。

## 参考文献

[How do I restore .bashrc to its default? - Ask Ubuntu](https://askubuntu.com/questions/404424/how-do-i-restore-bashrc-to-its-default)
paizaのプログラミングスキルチェックを受けて

#概要
paizaのプログラミングスキルチェックを受けたので、その経験談を記載します。

#paizaとは

https://paiza.jp/

技術者向けの学習サイトです。Python、C#、Java、js、HTML、CSSなど、一通りの言語に関してオンライン講座を受講出来ます。また、自分の好きな言語でスキルチェックを受ける事が出来ます。
転職サイトの一面も持っています。プログラミングスキルチェックの結果を持って求人企業向けに技術力のアピールをする事も出来ます。
また、paizaのサイトでは、各種プログラミング言語の[実行環境](https://paiza.io/ja)のサービスも展開しており、重宝しています。
#paizaのプログラミングスキルチェック
S級、A級、B級、C級、D級、E級と難易度に沿ってランク分けしています。
![inCollage_20190508_162323475.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235774/a7001b19-b870-797a-5540-8bbffa7caca7.jpeg)

私はS級、B級、D級を受けました。
その感想ですが、D級は、if文、for文辺りを知っていれば受かるレベルです。B級は、基本的な構文と問題の読解能力が有れば受かるレベルです。新入社員から2年目の社員レベルでしょうか。S級は、ある程度以上のアルゴリズムを知っていないと解けないレベルだと感じました。S級は問題文、注意事項をよく読んでロジックを考えてから着手しないとクリア出来無いと思います。
私も何とかS級に合格出来ました。
合格すると、マイページ等にランクが表記され、求人企業向けのアピールができるようです。
![inCollage_20190508_162424501.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235774/a78e0d0a-7804-081e-8b8a-6613e68aa8b3.jpeg)


#まとめ
スキルチェックを受けて、自分の苦手な分野等も知る事ができます。スキルチェックは、無料でも出来るようなので、皆様も気軽に受けてみては如何でしょうか。（ちなみに私はpaizaの中の人ではありません）
ニ点、指摘させて頂くと、S級の難易度はもう少し上げても良いのでは無いかと感じました。スーパープログラマをかたれる難易度では無い様に思いました。
それと、別のサイトでも指摘されていましたが、ソースコードの美しさについてはチェックされないので、時間の速さを目指すとリファクタリングされていないソースで提出せざるを得ませんでした。
この点は、ソースコードの長さを点数要素に加味すると面白いのでは無いかと思いました。（よりシンプルにコーディングされているかの観点）