OmniAICreator/Qiita-1.07M huggingface dataset:
Android Developers Blog 適当意訳 #7 Introducing a new Google Play app and game icon specification

# 新しいGoogle Playアプリとゲームのアイコン仕様のお知らせ
2019年3月15日

[原文](https://android-developers.googleblog.com/2019/03/introducing-new-google-play-app-and.html)
**※英語の勉強と自分用のメモ程度のかなり適当なものです。**


Google Play Store でのユーザー体験の向上の一環として、[新しいアプリアイコンデザインの仕様](https://developer.android.com/google-play/resources/icon-design-specifications)をお知らせします。

4月の前半から、Google Play Console に新しい仕様のアイコンをアップロードし、新しいアイコンの仕様を満たしているかを確認できます。
この時点では現在のアイコンは引き続きGoogle Play Storeで利用可能です。
5月1日以降は、新しいアイコンの仕様を満たしていないものはアップロード出来なくなり、既存のアイコンも変更されないままとなります。


6月24日までにやるべき作業:

1. アイコンを[新しい仕様](https://developer.android.com/google-play/resources/icon-design-specifications) に更新する
1. Play Console にアイコンをアップロードする
1. Play Console で正しく表示されているかを確認する

ユーザーに最適な環境を提供するために、出来る限り早く新しい仕様のアイコンに変更する事を強くお勧めします。

### 何が変わるのか

- アイコン画像は変わらず512 x 512ですが、背景を透過させる事は出来なくなります
- Android と Chrome OS 上の Google Play は動的にアイコンの角を丸くし、影を描画します。角の角度は環境に依存しないために、アイコンのサイズの20%とします
- TV, Wear, Autoなどの Google Play 上の他のものには変更はありません
- **今回の変更はAndroidのランチャーアイコンには影響しません**


|タイムライン  |変更点  |
|---|---|
|4月上旬  |Google Play Console に新しい仕様のアイコンをアップロードし、新しいアイコンの仕様を満たしているかを確認できます<br><br>- 現状のアイコンは引き続き正しく Google Play で表示されます<br> - 新しい仕様のアイコンは正しく Google Play で表示されます  |
|5月1日  |Play Console にアップロードするアイコンは、新仕様を満たしている必要があります<br><br>- 現状のアイコンは引き続き正しく Google Play で表示されます<br> - 新しい仕様のアイコンは正しく Google Play で表示されます  |
|6月24日  |現状のアイコンは **レガシーモード** に変換されます。必ず Play Console にアップロードするアイコンは、新仕様を満たしている必要がある事を確認してください<br><br>- 現状のアイコンは **レガシーモード** に変換されます<br> - 新しい仕様のアイコンは正しく Google Play で表示されます  |

これらの更新はよりGoogle Play に統一的で一環したルックアンドフィールをもたらす助けとなり、あなたのアプリやゲームをよりよく紹介出来るようになり、ユーザーにより良いユーザー体験を提供出来ます。

我々は今後数ヶ月間これらの変更に関する情報の提供を続けますので、情報の更新を確認してください。
それと同時に、[新しいアイコンの仕様](https://developer.android.com/google-play/resources/icon-design-specifications)も確認してください。
UnrealEngineをwindowsユーザ権限でユーザに使ってもらうとき

#はじめに
UnrealEngineを管理者権限のないユーザーがランチャーから起動すると、UnrealEngineのEditorが起動できないトラブルがあります。
ここにひっかかったので、メモ程度の記載をします。

### 構成
windows 10 Pro Ver1809
Unreal Engine 4.22

# 問題と試行
## UAC（UserAccessControler）の認証で弾かれる
Lancherから起動すると、権限不足の関係のUACが出てくる。
ここから次のパターンで試してみた
①　C:¥Program Files¥Epic Games¥へ　Users　へフルコントロールをつける
②　UACを切る

この2つともやっても変わりませんでした。
①に関しては、 `C:¥Program Files(x86)¥Epic Engine` と 'C:¥Programs Data¥Epic Engine' へフルコントロールの権限をすべてに付与しても変わりません。

ここから、権限の問題ではないとするとなんだろうか、ということを悩んでました。（だれかわかる人いたら教えてくださいませ）

#解決方法
そもそも論を考え、UnrealEngineを使うときにその実行ファイルさえ叩ければ問題ないので、
使う分にはEpic Lancherからわざわざ起動する必要がないことに気が付き、
実行ファイルのデスクトップショートカットを作成することに。
ただしショートカットを作るにも場所がわかりづらいので、そのパスを下記に書きます。

`C:\Program Files\Epic Games\【Unrealのバージョン】\Engine\Binaries\【OS名】\UE4Editor.exe`


# 感想
SEの仕事って、こういうの多いなぁ。
openpyxlでセルの値を中央揃えにする

# Introduction

以下のようなデータファイルtest.xlsxがあります。

![スクリーンショット 2019-03-18 15.55.26.png](https://qiita-image-store.s3.amazonaws.com/0/335400/92b730cf-0c71-ef55-da04-de1b4037591b.png)

この一行目を中央揃えにしてレポートとして提出してほしいと依頼がありました。今回はこの作業を自動化したいと思います。

# スクリプトとその実行結果

以下にこの自動化を行うためのスクリプトを紹介します。

```python:sheet_align.py
'''
    sheet_numberformat.py
    purpose: read xlsx and set number format automatically
'''

import openpyxl as xl
from openpyxl.styles.alignment import Alignment


# set input file name
inputfile = 'test.xlsx'

# read input xlsx
wb1 = xl.load_workbook(filename=inputfile)
ws1 = wb1.worksheets[0]

# write in sheet
for row in ws1:
    for cell in row:
        
        if cell.row == 1:
            cell.alignment = Alignment(horizontal = 'center', 
                                        vertical = 'center',
                                        wrap_text = False)

# save xlsx file
wb1.save(inputfile)
```

結果は以下のようになります。

![スクリーンショット 2019-03-18 15.55.59.png](https://qiita-image-store.s3.amazonaws.com/0/335400/a8ff866d-a8ec-922a-fd3d-262f510a12c8.png)

# スクリプト詳細

## from openpyxl.styles.alignment import Alignment

```python
from openpyxl.styles.alignment import Alignment
```

ここでインポートしているAlignment関数は、セルを何揃えにするかを指定するオブジェクトを返します。

## 何揃えかを指定

```python
# write in sheet
for row in ws1:
    for cell in row:
        
        if cell.row == 1:
            cell.alignment = Alignment(horizontal = 'center', 
                                        vertical = 'center')
```

この部分で、もしセルが一行目なら水平方向・垂直方向ともに中央揃え、を指定しています。`horizontal`で水平方向を、`vertical`で垂直方向を何揃えにするかを指定します。horizontal, verticalでは以下の定数を指定することができます。

```python
'left'
'center'
'distributed'
'general'
'justify'
'centerContinuous'
'fill'
'right'
```

そのほかにも`textRotation`で文字を回転させることができます。何度回転するかは0-180の整数で指定します。試しにif文の中を次の行に変えてみます。

```python
cell.alignment = Alignment(horizontal = 'center', 
                                        vertical = 'center', 
                                        textRotation = 90)
```

実行結果は以下のように、一行目が90度回転したものとなります。

![スクリーンショット 2019-03-18 16.19.59.png](https://qiita-image-store.s3.amazonaws.com/0/335400/ca71870a-59e7-8aeb-d90a-c3a0af2d5019.png)
herokuのDB本番環境リセット（PostgreSQL）

下記のページなどを参考に、herokuの本番環境DB(PostgreSQL)のリセットを行ったが、
なかなか思う様にできなかったので、備忘録。

- [heroku上のDBをリセットする](https://qiita.com/G-awa/items/792b7cd60205823f7ac0)
- [rails5 on herokuでPostgreSQLのレコードをすべて消したい時の方法](https://qiita.com/kakiuchis/items/5597354b1901c1371c9e)
- [本番環境のDBエラーに困っています（rails）](https://teratail.com/questions/77287)
- [メモ - 本番環境でrake db:migrateしたらエラー(relation テーブル名 does not exit)出た。](https://qiita.com/zaqisuke/items/865fc0eed3ad24dbf3f3)
- [Rails5でDBに自動生成されるテーブル、"ar_internal_metadata" とは何なのか](https://qiita.com/EastResident/items/53c24340fd322758901f)

環境としては、
・IDE:cloud 9
・サーバー:heroku
・本番DB:PostgreSQL


##1. `heroku pg:reset DATABASE_URL`を実行した後、`heroku run rails db:migrate`を実行。

```
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "〇〇〇" does not exist
```
のエラーが発生してしまう。

##2. `heroku run rails db:schema:load RAILS_ENV=production`を実行。

```
 rails aborted!
ActiveRecord::NoEnvironmentInSchemaError: 

Environment data not found in the schema. To resolve this issue, run: 

        bin/rails db:environment:set RAILS_ENV=production
```
との警告が表示される。

##3. 警告を基に、`heroku run rails db:environment:set RAILS_ENV=production db:schema:load`を実行。

2の警告を基に、`RAILS_ENV=production`を変えて、`db:environment:set RAILS_ENV=production`を追記。 

```
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
```

との警告が表示される。

##4. 警告を基に、`heroku run rails db:environment:set DISABLE_DATABASE_ENVIRONMENT_CHECK=1 RAILS_ENV=production db:schema:load`を実行。
3の警告を基に、`DISABLE_DATABASE_ENVIRONMENT_CHECK=1`を追記。
DBのリセットに成功！！
その後、`heroku run rails db:migrate`を実行し、無事本番環境のDBを再構築することができた。

# まとめ
- 警告文やエラー文は最重要。
- `db:schema:load`は本番環境のデータを完全に消去してしまう為、取り扱いは注意。  
 (参考)[rake db:schema:load vs. migrations - Stack Overflow](https://stackoverflow.com/questions/5905287/rake-dbschemaload-vs-migrations)
PythonからDLLを使う

# はじめに

あることから、PythonでC++で作られたDLLを読み込みたいので調べる必要が出てきました。
私自身PythonもC++もさわり程度しか知らないため、少しハマりました。
様々な記事が既に世の中に存在していますが、自分のために書き残そうと思います。

## まずDLLを準備

VS2017 使用しています。
ダイナミックリンクライブラリのプロジェクトを作成。名前は何でもいいと思います。
今回はDLLTestという名前で作っています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/59954/ae2f7640-b22c-5ea5-bcbc-28088703ba44.png)

### DLLプログラムを作っていきます

```cpp:DLLTest.h
#pragma once

#ifdef DLLTEST_EXPORTS
#define DLLTEST_API extern "C" __declspec(dllexport)
#else
#define DLLTEST_API extern "C" __declspec(dllimport)
#endif // DLLTEST_EXPORTS

DLLTEST_API int GetData(int, int);
```

``extern "C" __declspec(dllexport)``で、関数のエクスポート宣言をします。


```cpp:DLLTest.cpp
// DLLTest.cpp : DLL アプリケーション用にエクスポートされる関数を定義します。
//

#include "stdafx.h"
#include "DLLTest.h"

int GetData(int a, int b)
{
	return a + b;
}
```

実行する関数を作っていきます。

```cpp:stdafx.h
// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、
// または、参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
// を記述します。
//

#pragma once

#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             // Windows ヘッダーからほとんど使用されていない部分を除外する
// Windows ヘッダー ファイル
#include <windows.h>
#include <string>


// プログラムに必要な追加ヘッダーをここで参照してください
#include "DLLTest.h"
```

はい、以上です。ハマりどころは後述します。先に成功パターンで。
Debugビルドを行ってDLLを作成します。DLLはプロジェクトの中のDebugフォルダの中にあります。

## 次にPython側で呼び出し

PCにはPython 3.7と2.7がインストールされていますが、3.7を今回利用しています。
VS2017で作ったDLLをpythonのソースの場所へコピーしてきます。
そして、LoadLibraryにDLL名をセットします。

```python:test.py
# coding: utf-8

from ctypes import *

dll = cdll.LoadLibrary("DLLTest.dll")

print(dll.GetData(100, 101))
```

これで、Pythonを実行すると。DLLで結果を出すことができました。

```
> py test.py
201
```

## ハマったところ

### 「OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。」と出た。

__解決__
DLLのビルドがx64ではなかった。Pythonを64ビットでインストールしてたため。気づくのに少し時間かかりました。。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/59954/799cdeae-b925-b44e-85c4-51cc10ccac01.png)

### 「AttributeError: function 'GetData' not found」と出た。

__解決__
extern "C"が抜けていた。

```cpp:DLLTest.h
#define DLLTEST_API extern "C" __declspec(dllexport)
```

いろいろ勉強になりました。
エラー：ArgumentError:   Missing required arguments: aws_access_key_id, aws_secret_access_key

##エラー文の意味

```ターミナル
ArgumentError:
  Missing required arguments: aws_access_key_id, aws_secret_access_key
```
引数にないよーって言ってる

##原因

```secret.yml
test:
     secret_key_base:7
     237474097429047230972937032~ ~
```
aws_access_key_id, aws_secret_access_keyが定義されていなかった

##改善後

```secret.yml
test:
     secret_key_base:
     237474097429047230972937032~ ~
     aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
     aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
```
これで改善しました〜
Djangoをtutorialの流れを書いてみた。~ing

##現在の環境
* python 3.7
* Django 2.1.7
* mysql

##基本setting
1. $django-admin startproject shop
    * __project start!__
    * shop = project name
2. shop/setting.py         からのsetting
    * LANGUAGE_CODE = 'ja-jp'
    * TIME_ZONE = 'Asia/Tokyo'
3. $python manage.py startapp board
    * __app start!__
    * board = app name
4. shop/setting.py         へapp登録
    * INSTALLED_APPS = [  
    'board',        <-作ったapp name 
    ......  
    ]
5. shop/setting.py
    * DATEBASEのsetting

```python
DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        'NAME': '',       #DB Schema name
        'USER': '',       #DB user
        'PASSWORD': '',   #DB password
        'HOST': 'localhost',
        'PORT': '3306',
    }
}
```

6. $python manage.py createsuperuser
    * admin siteで使うid/password を設定
    * Passwordが易しすぎるのはNG!

7. $python manage.py runserver  
    * __server testing__

###掲示板 (Model 作業)
1. shop/urls.py でappのviewsとの繋ぎ  
 
```python
from shop import views
urlpatterns = [
url('admin/', admin.site.urls),
url('', views.index, name='index'),
]
```
   * / url(初期画面)で接続したときにshopのviewsに書いているindex　methodを呼ぶ
  
2. board/views.py

```python
from django.http import HttpResponse
# Create your views here.

def index(request):
   return HttpResponse('Welcome to my shop!')
```

   * viewsにindex　methodを追加
   * __HttpResponse__ moduleをimport
   
### Model - Template - Views

* Model :     board/models.py
   * POST classを作ってformの項目setting
   
```python
from django.db import models
from django.utils import timezone

class Post(models.Model):
    author = models.CharField(max_length=20)
    email = models.CharField(max_length=50)
    title = models.CharField(max_length=50)
    text = models.TextField()
    published_date = models.DataTimeField(
            default = timezone.now)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title
```

2. $python manage.py makemigrations board
   * DBへ反映できるようにmigration fileを用意
  
3. $python manage.py migrate board
   * DBにtableが作られて内容がsaveされるようにする

4. adminからboardを管理できるように登録
   * board/admin.py

```python
from django.contrib import admin
from .models import Post

admin.site.register(Post)
```

### App内 Urls  ----- Views  作業

1. board/urls.py  作成
   * /board/  に掲示板を表示するためのURLをsetting

```python
from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name = 'post_list'),
]
```

2. board/views.py 作成
   * 先のpost_listの定義をsetting

```python
def post_list(request):
    return render(request, 'board/post_list.html', {})
```

3. template 作業
   * board/template/board    forlder作成(boardはApp name)
   * board/template/board/post_list.html (作成するhtml)
  
```html
<html>
  <p>Hi there!</p>
  <p>Here is post_list page</p>
</html>
```



4. $python manage.py runserver　でcheck!
Kotlin文法メモ~コンストラクタ~

# 初めに

kotlin でのコンストラクタに関するメモ

# コンストラクタとは

クラスの中の変数であるメンバを初期化するためのもの。
インスタンスが作成されたとき最初に実行される。

# コンストラクタの実装

コンストラクタは以下のようにして実装できます。
以下のコードのクラスでは、車のメーカーの種類として`type`、製造年として`model`を用意してあります

```kotlin

//CarContsructorの隣に()がない
class CarContsructor{
    var type:String? = null
    var model:Int?=null
    constructor(type:String,model:Int){
        this.type = type
        this.model = model
    }
}
```

左側の`this.type`と`this.model`はクラスの中のメンバを指していて、右の`type`と`model`はコンストラクタの引数の値になっています。

また、以下のような書き方も可能です。この場合、`val car = CarConstructor()`のように使えます。

```kotlin
//CarContsructorの隣に()がある
class CarContsructor(){
    var type:String? = null
    var model:Int?=null
    constructor(type:String,model:Int):this(){
        this.type = type
        this.model = model
    }
}
```

先にコンストラクタのとこが呼ばれた後に、メンバの定義がされて初期化される流れになってますね。

`constructor`を書くのが面倒っていう人は以下のようにしてプライマリーコンストラクタを利用して短く書けます。。すっきりしてこっちのほうがいいですね。
上の２つのコードと比較してかなり行数が省略されています。

```kotlin
class CarOptions(type:String,model:Int){
    var type:String? = type
    var model:Int?= model
}
```
Pythonで処理中に棒をぐるぐる回して作業が終わったらdone

# 環境

- PC：windows10
- 言語 ：python 3.6.7

# 概要

これを作ります
![2019-03-18_14h49_21-_online-video-cutter.com_.gif](https://qiita-image-store.s3.amazonaws.com/0/193401/bc15cdbc-c1f9-c532-ddf9-c07d39d1e7b0.gif)

ただし，表示をするだけではなく，別スレッドの処理が完了したらdone表示，という内容にします．

# コード

```python
import threading
import time
import sys

class TestClass:
    def __init__(self):
        self.work_ended = False

    def guruguru(self):
        while not self.work_ended:
            sys.stdout.write('\b' + '|')
            sys.stdout.flush()
            time.sleep(0.12)
            sys.stdout.write('\b' + '/')
            sys.stdout.flush()
            time.sleep(0.12)
            sys.stdout.write('\b' + '-')
            sys.stdout.flush()
            time.sleep(0.12)
            sys.stdout.write('\b' + '\\')
            sys.stdout.flush()
            time.sleep(0.12)
        sys.stdout.write('\b' + ' ')  # 最後に末尾1文字を空白で書き換える
        sys.stdout.flush()

    def work(self):
        time.sleep(3)
        self.work_ended = True

    def multithread_processing(self):
        print("Collecting package metadata:  ", end="")
        t1 = threading.Thread(target=self.guruguru)
        t2 = threading.Thread(target=self.work)
        t1.start()
        t2.start()
        t2.join()
        t1.join()
        sys.stdout.write("\b" + "done")
        sys.stdout.flush()

if __name__ == '__main__':
    tc = TestClass()
    tc.multithread_processing()
    print()  # 改行して終了
```

# 解説

### multithread_processing()

最初に`Collecting package metadata:  `をコンソールに表示して，次に２つのスレッドを立てて，両方が完了したら`done`を表示しています．

### guruguru()

名前通り，ぐるぐる棒を回します．

`sys.stdout.write` + `sys.stdout.flush`の組み合わせで，コンソールに即時表示しています．

また，`\b`でカーソルを１つ戻した後に文字を追加することで，コンソールに表示された既存の文字列の末尾だけを上書きしています．

### work()

実用上はここに任意の作業を書きます．
上のコードでは3秒間スリープするだけの処理です．

# あとがき

スレッドをデーモン化すれば，上のコードの`work_ended`のような条件を使わなくてもいいのではないかと思ったのですが，デーモンスレッドが終了するタイミングが調整しづらかったため，上のような書き方になりました．
RubyでModuleをレシーバとしたinstance_evalとmodule_eval

C#erがRubyのModuleについてのinstance_evalとmodule_evalを理解するのにハマった点をまとめておく。

## サンプルに使用するモジュールの定義
```ruby
module M
  CONST = "Module CONST"
  class << self
      CONST = "Module Singleton CONST"
  end
end
```

## 文字列を使用してinstance_evalする場合
モジュールの特異メソッドが定義される
モジュールの特異クラス内で評価

```ruby
M.instance_eval(<<-CODE)
  def say
    p CONST
  end
CODE

M.say # => "Module Singleton CONST"
```

関数の定義は```def say```でも```def self.say```でも直接呼び出せる。
今の理解度では、```def self.say```がOKな理由がわからない。
```def self.say```は、特異クラスの特異クラスに定義されそうな気がするのだが。。。

## 文字列を使用してmodule_evalする場合
モジュールのインスタンスメソッドが定義される
モジュール内で評価

```ruby
M.module_eval(<<-CODE)
  def self.say
    p CONST
  end
CODE

M.say # => "Module CONST"
```

関数の定義は```def self.say```でなければ直接呼び出せない。

## コードでinstance_evalする場合
モジュールの特異メソッドが定義される
カレント（この場合はトップレベル）で評価

```ruby
CONST = 'TOP LEVEL'
M.instance_eval{
  def say
    p CONST
  end
}

M.say # => "TOP LEVEL"
```

関数の定義は```def say```でも```def self.say```でも直接呼び出せる。
今の理解度では、```def self.say```がOKな理由がわからない。

## コードでmodule_evalする場合
モジュールのインスタンスメソッドが定義される
カレント（この場合はトップレベル）で評価

```ruby
CONST = 'TOP LEVEL'
M.module_eval{
  def self.say
    p CONST
  end
}

M.say # => "TOP LEVEL"
```

関数の定義は```def self.say```でなければ直接呼び出せない。

## class << Module を使用する場合
モジュールの特異メソッドが定義される
モジュールの特異クラス内で評価

```ruby
class << M
  def say
    p CONST
  end
end

M.say # => "Module Singleton CONST"
```

関数の定義は```def say```でなければ直接呼び出せない。
[文字列を使用してinstance_evalする場合](#文字列を使用してinstance_evalする場合)と似ているが、```def self.say```は直接呼び出せない。


深すぎるよ。。。
Hadoop内のアルゴリズムについて

#目的
Hadoop内のアルゴリズムについてまとめていきます。

#Hadoop内のアルゴリズム
MapReduce
YARN
Tez


#MapReduce
並列処理フレームワーク MapReduce
MapReduce

#YARN
YARN (Yet Another Resource Negotiator)
リソース管理と処理コンポーネントを切り離す
MapReduce エンジンに比べ、YARN にはスケーラビリティー、効率性、柔軟性という点で勝っています。

#Tez
TezそのものはYARNにおける並列処理エンジンについてMapReduceの代替となることを意識しています。
pythonでテキストファイルの複製

この記事を読んでできるようになること
　pythonを使ってテキストファイル（シェルスクリプト）を記述複製する。


#ファイル名の一覧ファイルを作成する
エクセルなどで
パラメーター1,パラメーター2,...
をつなぎ文字（＿）等で結合したファイル名一覧のファイルを作成。
filename.xlsxとする。

#テキストファイルを複製する
```createfile.py

import os
import shutil
import xlrd

book1 = xlrd.open_workbook("./filename.xlsx")
sheet1 =book1.sheet_by_name("Sheet1")

column0 = sheet1.col_values(0,0,)
column6 = sheet1.col_values(6,0)#列を読み込み, エクセルの数式セルは読み込み不可
print(column0)
print(column6)
print('\n')

javaname="run_gethc2"

for index, item in enumerate(column0):
    # shellファイルに記入する内容
    # 書き込むリストをカウントする仕組みいる
    text = '#!/bin/sh\n'\
    +'cp ./()mm_()_0.00_00.0 ./' + str(column6[index]) \
           + '\nsim = ' + str(column6[index]) \
           + '\njava = ' + javaname
    # shellファイルの読み込み、書き込み
    shellname = 'star' + (column0[index]) + '.sh'
    shellpath = './' + shellname
    print(shellpath)

    with open(shellpath, mode='w') as f:
        f.write(text)

    # 読み込み形式
    with open(shellpath) as f:
        print(f.read())
    f.close()
    print('\n')
```
"aspNetCore" のモジュール リストにあるモジュール "AspNetCoreModuleV2" が正しくありません



HTTP エラー 500.21 - Internal Server Error

ハンドラー "aspNetCore" のモジュール リストにあるモジュール "AspNetCoreModuleV2" が正しくありません


>Handler "aspNetCore" has a bad module "AspNetCoreModuleV2" in its module list


![image](https://qiita-image-store.s3.amazonaws.com/0/49910/77251a44-9bf7-6c69-76bb-1f9c5b59ddc3.png)



以下のガイドに従って進める

[IIS を使用した Windows での ASP.NET Core のホスト | Microsoft Docs](https://docs.microsoft.com/ja-jp/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.2#install-the-net-core-hosting-bundle)


## .NET Core ホスティング バンドルのインストール


次のリンクを使用してインストーラーをダウンロード
[現在の .NET Core ホスティング バンドルのインストーラー (直接ダウンロード)](https://www.microsoft.com/net/permalink/dotnetcore-current-windows-runtime-bundle-installer)


![image](https://qiita-image-store.s3.amazonaws.com/0/49910/cd1e11da-8db7-4d26-95a5-683559cef2a8.png)


## 再起動

システムを再起動するか、コマンド シェルから net stop was /y に続けて net start w3svc を実行します。 IIS を再起動すると、インストーラーによって行われたシステム パスへの変更 (環境変数) が取得されます。


```
net stop was /y
net start w3svc
```



# 参考

[getting - Handler "aspNetCore" has a bad module "AspNetCoreModuleV2" in its module list using IIS · Issue #9897 · aspnet/Docs](https://github.com/aspnet/Docs/issues/9897)
0.1388888888888889を分数で表すと何になるか?

# 浮動小数点数
コンピュータで確率などを扱うとき、みなさん、floatやdoubleなどの浮動小数点数を使うと思います。
もしかしたら、解析的には簡単な分数で表せるような場合も、浮動小数点数を使えば、一見何がなんだか分からない数に見えます。

また、floatやdoubleなどは、2進数で表された有限桁数の浮動小数点数なので、そもそも分数を浮動小数点数では厳密には表せない場合が数多くあります。

1/3を我々が使い慣れている10進数の小数で表せば、0.333333...となります。桁数は無限にあるため、有限の桁数では、厳密に1/3を書き表すことができません。
同様に2進数の小数でもそういったことが多く起こり、0.1を厳密に表せないことは、浮動小数点数を知る人の中では、非常に有名です。

# 浮動小数点を分数に直したい

2進数で保存されているので、$\frac{m}{2^{k}}$のような形に直すことはできるかもしれません。
けれど、それはあまり面白くないです。できれば、より自然な形に復元したい。

勿論、情報が切り捨てられているので、完全に復元するのは不可能な場合があります。
けれど、割といい感じに復元できたら面白いと思いませんか?

# 浮動小数点数を連分数で近似する
[連分数](https://ja.wikipedia.org/wiki/%E9%80%A3%E5%88%86%E6%95%B0)とは、次に示す図の右辺のような数式を指し、xを連分数に直すことを連分数展開と呼びます。なお、$a_0, a_1, a2, ...$はすべて整数で、とくに$a_1, a_2, ...$は正の整数です。

![Screenshot_20190318_145746.png](https://qiita-image-store.s3.amazonaws.com/0/88256/c668dc87-15c1-acef-5d9e-8891c7e47548.png)
(出典: Wikipedia)

ここでは$a_3$で終わっていますが、もっと続く場合もあります。
無理数の場合は無限に続くことが知られています。

連分数展開をするアルゴリズム自体は簡単で、

1. xの整数部分を求める。これが$a_i$になる。
2. xから、整数部分を引く
3. xが0でなければ、引いたものの逆数を求め、新たなxとする。xが0ならば終了する
4. 1に戻る。ただし、十分な長さの$a_0, a_1, ...$が得られたら終了する

Pythonで書いていきましょう。
Pythonでは再帰使いたくない派なのでwhileで書いてますが、再帰で書いてもいいです。

```py
def contfrac(x, nmax, vmin=0.000001):
    '''連分数を求める。

    x: 連分数を求めたい数
    nmax: この個数だけaが得られたら終了する
    vmin: xの絶対値がこの数を下回ったら、0になったとみなして終了する
    '''
    ls = []
    while len(ls) < nmax:
        n = int(x)
        x -= n
        ls.append(n)
        if abs(x) < vmin:
            return ls
        x = 1 / x
    return ls
```

試しに動かしてみましょう。

```py
contfrac(0.1, 5) # => [0, 10]
contfrac(0.1388888888888889, 5) # => [0, 7, 5]
contfrac(math.sqrt(2), 5) # => [1, 2, 2, 2, 2]
```

# 連分数を分数に直す
続いて、連分数を分数にしていきます。
全部整数なので、簡単に直せそうですね。

連分数にして得られたリストを逆順に計算していけば、数値が復元できます。
この際、浮動小数点数は使わずに、分子、分母が整数の状態を保つようにしてください。

```py
def to_frac(x, nmax, vmin=0.000001):
    '数値を連分数にしてから分数に戻す。分子, 分母を返す。'
    ls = contfrac(x, nmax, vmin)
    m = 0
    n = 1
    for a in reversed(ls):
        m, n = n, m
        if n:
            m += a * n
        else:
            m, n = a, 1
    return m, n
```

やっていきましょう。

```py
to_frac(0.1, 5) # => (1, 10) つまり0.1 = 1/10ですね
to_frac(0.1388888888888889, 5) # => (5, 36) 実はタイトルの分数は5/36でした
to_frac(math.sqrt(2), 5) # => (41, 29) 41/29 = 1.413793... 誤差はありますが、√2に近いです
to_frac(math.sqrt(2), 10) # => (3363, 2378) 3363/2378 = 1.41421362489... 連分数をより長く取ると精度は上がります
```

もうちょっと遊んでみましょう。

```py
to_frac(13/17, 5) # => (13, 17) きれいに出ました
to_frac(3/15, 5) # => (1, 5) 3/15は1/5なので、約分されて出てきてしまいました
to_frac(593/193, 5) # => (212, 69) 593と193は素数なので、約分できないはず。精度が落ちて違う数字になってしまっています。連分数を長くしてみます
to_frac(593/193, 10) # => (593, 193) 無事、復元できました
```

常にうまくいくわけではないですが、浮動小数点数から分数を復元することができました。
面白いですね！
joinがなんもわからんくなってしまった


# table
![image.png](https://qiita-image-store.s3.amazonaws.com/0/24737/af7b1f70-9286-a87d-22b2-1aabbbde0c91.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/24737/96231535-e1f3-1886-5157-0e6e6359b705.png)


# join
![image.png](https://qiita-image-store.s3.amazonaws.com/0/24737/9ec11f00-24a4-23da-09f1-8f21f9dc12bd.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/24737/9b710afd-a3d1-72e4-d5fc-894da5c96ae0.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/24737/62d16894-be1d-d5fd-3957-ea21f8b6781f.png)![image.png](https://qiita-image-store.s3.amazonaws.com/0/24737/8fa7f3f6-8770-44b9-751d-5b821e6294c3.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/24737/af96741a-a433-a06d-a825-022c61f2a3c9.png)


## 取り出す
![image.png](https://qiita-image-store.s3.amazonaws.com/0/24737/356f0dae-ad78-5615-698c-0dadd1ce46fb.png)
オレオレめもDockerでよく使うコマンド

*随時更新記事となります。すいません。

#ルール
二回以上ググったら、ここに備忘録として残す

#Docker イメージ

```
docker images -aq | xargs docker rmi #イメージ一括削除
```
Dockerのイメージの一括削除

```
docker-compose up -d --build
```
Dockerイメージをリビルドして、compose-up

#Docker コンテナ

```
docker stop $(docker ps -q)
```
稼働コンテナ一括stop
SQLSERVER - 削除処理 - エラーを発生させる

RAISEERROR()　やタイムアウト系のエラー発生方法だとダメなとき

####　削除処理
テーブルがないとき

```SQL:DEL.SQL
BEGIN TRY
    DELETE TABLE toDeleteTable
END TRY
BEGIN CATCH
    RETURN 1
END CATCH
```
出力：コンパイルエラー
テーブル自体を削除するとコンパイルエラーしてBEGIN CATCH内に入らないのでダメ

####　実装方法
テーブルがないとき

```sql:del.sql
BEGIN TRY
    DECLARE @SQL VARCHAR(2000)
    SET @SQL = 'DELETE TABLE toDeleteTable'
    EXEC (@SQL)
END TRY
BEGIN CATCH
    RETURN 1
END CATCH
```
出力：-1
CATCH内に入るようになった
なるほどね
SQLで日付カラムを連結、1年後、月末を出すなど

開始日と最終契約終了日などをテーブルに入れただけで年度ごとの更新日の数十日前から通知されたい的な需要があったのですが自動で更新したかった年度ごとの更新日を求めるSQLの部分の備忘録。
タイミングが、日付が過去になった直後に更新される前提。

```
mysql> select concat(DATE_FORMAT(DATE_ADD(t13_c5,INTERVAL 1 YEAR), '%Y-'), DATE_FORMAT(LAST_DAY(t13_c3), '%m-%d')) from testdb.table1 where t13_c1=80027xxx;
+------------------------------------------------------------------------------------------------------+
| concat(DATE_FORMAT(DATE_ADD(t13_c5,INTERVAL 1 YEAR), '%Y-'), DATE_FORMAT(LAST_DAY(t13_c3), '%m-%d')) |
+------------------------------------------------------------------------------------------------------+
| 2019-05-31                                                                                           | 
+------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)
mysql> select * from testdb.table1 where t13_c1=80027xxx\G
*************************** 1. row ***************************
         t13_id: 31
      t13_valid: 1
   t13_reg_time: 1552648117
   t13_mod_time: NULL
t13_reg_user_id: 6
t13_mod_user_id: NULL
         t13_c1: 80027xxx
         t13_c2: 
         t13_c3: 2016-05-24
         t13_c4: 2021-05-31
         t13_c5: 2018-03-31　#ここを出した値にしたいだけ
```

DATE_FORMATは年だけ、または月日だけ出すのを定義、
DATE_ADDでカラム値の1年後をだす、
LAST_DAYでカラム値の月末をだす
concatで文字列連結

過去を出したいときはDATE_SUBみたいだけど今回特に使わなかった。
日付はいってるカラムの型はDATE型。
うっかりintでunixtimeとか入ってるときは`cast(t3_c3 as date)`で型変換か[FROM_UNIXTIME関数でもフォーマット指定できる](https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html#function_from-unixtime)ようです。

unixtimeをdateコマンドでDATE型っぽく変換するには以下のとおり。
`date +%Y-%m-%d --date "1552648117"`



shellスクリプト上で分岐処理で差分を求めたくてわざわざunixtimeで出したいときは、UNIX_TIMESTAMPという関数で出せました。

```
select t13_c1,UNIX_TIMESTAMP(t13_c4),UNIX_TIMESTAMP(t13_c5) from ${dbname}.${tblname} where t13_c4 > now() and t13_c5 < now();
```

`select UNIX_TIMESTAMP(now());`で出るのをdateで出したいときに。
`date +%s`
特定の日付をunixtimeにしたいなら`date --date '2012/12/1' +%s`など。

通知対象の抽出は残り日のdatediffのbetweenで最初に0いれると過去の日付でない。

```
select t13_c1 as enrolle_num,t13_c2 as company,t13_c5 as current_end,t13_c4 as final_end,datediff(t13_c5,now()) 'valid days' from ${dbname}.${tblname} where datediff(t13_c5,now()) between 0 and 60;
```

やりたい内容を適当な文字列でググるとだいたい関数とか用例とか出てくるの楽だし実行してみてその通り動くのは楽しいですね。

今回時刻の型は扱わなかったけどカラムのDEFAULTなどの指定をCURRENT_TIMESTAMPとかにできるのは時刻の型なんだなーというのはなんとなく見かけました。
やってみた記事も個人的にはとっかかりにわかりやすくて好きですが、マニュアルみたほうが情報量がだいぶ多いかなとも思いました。

参考
https://hit.hateblo.jp/entry/mysql/concat-pipe
http://nowork.jugem.jp/?eid=12
https://qiita.com/sakura1116/items/3fef2ca5b5280eae22e8
http://mysql.javarou.com/dat/000849.html
https://www.dbonline.jp/mysql/type/index4.html
https://qiita.com/ykawakami/items/2449a24e3b82ff0cbab6
https://dev.mysql.com/doc/refman/5.6/ja/timestamp-initialization.html
https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html
AI-Techservices - AI Solutions Development Company

![artificial-intelligence-the-amazing-technology-that-revolutionize-the-world.png](https://qiita-image-store.s3.amazonaws.com/0/379901/0bb956c3-7d62-2e5e-a6fa-697e0e8387ef.png)

AI Techservices is the top grade Artificial Intelligence software development company specialized in AI development of Machine Learning and Deep Learning Solutions for enterprises.

Click Here To Visit The Site: https://www.ai-techservices.com/
【PLSQL】BLOBデータにINSERT

#BLOBデータにINSERT
##やりたいこと
作成したBLOBのcolumnにデータをINSERTしたい。
BLOBはバイナリに変換して登録してあげる必要があります。

登録したデータの確認方法は下記参照
[【OracleDB】BLOBデータをVARCHAR2にキャストして内容確認](https://qiita.com/t-kikuchi/items/e3e4c7a1a711cd445a44)

##コード
変換には`utl_raw.cast_to_raw`を使用します。


```sql
  INSERT INTO table1(
    emd_cd,
    emp_name
  ) VALUES (
    utl_raw.cast_to_raw('111000'),
    utl_raw.cast_to_raw('田中太郎')
  );
```
Golangの依存関係管理ツールメモ（dep）

参考：
公式：https://github.com/golang/dep/blob/master/README.md

# depインストール
```
$ go get -u github.com/golang/dep/cmd/dep
```

下記のフォルダに入っています。

```
$GOPATH/bin/dep
$GOPATH/github.com/golang/dep
```

# depコマンド
helpでコマンド確認

```
$ dep help
Dep is a tool for managing dependencies for Go projects
Usage: "dep [command]"
Commands:
  init     Set up a new Go project, or migrate an existing one
  status   Report the status of the project's dependencies
  ensure   Ensure a dependency is safely vendored in the project
  version  Show the dep version information
  check    Check if imports, Gopkg.toml, and Gopkg.lock are in sync
Examples:
  dep init                               set up a new project
  dep ensure                             install the project's dependencies
  dep ensure -update                     update the locked versions of all dependencies
  dep ensure -add github.com/pkg/errors  add a dependency to the project
Use "dep help [command]" for more information about a command.
```

# プロジェクト初期化
```
$ dep init
```
パッケージ管理の初期化コマンド。Gopkg.lockとGopkg.tomlとvendorディレクトリを作成します。

・Gopkg.toml
　ソース内でimportしているパッケージのリストです。

・Gopkg.lock
　パッケージのバージョンを指定。直接的なパッケージとそのパッケージが依存しているパッケージ全てを指定している。

・vendorディレクトリ
　プロジェクトで使用するパッケージがインストールされます

.gitignoreにはvendorを除外しましょう。パッケージは都度インストールすれば良いのでgit管理する必要はありません。

```
$ vi .gitignore
vendor/*
```

# パッケージインストール
```
$ dep ensure
```
パッケージを追加した場合は、dep ensureコマンドを実行。
ソースを解析して追加のパッケージがある場合は更新してくれます。
最新版があってもvendorディレクトリにあるパッケージへの更新は行わない。

```
$ dep ensure -update
```
使用している全てのパッケージを最新版に更新してくれます。このタイミングで追加のパッケージがある場合は更新してくれます。

```
$ dep ensure -vendor-only
```
Gopkg.toml、Gopkg.lockに設定してあるバージョン、パッケージのみを対象にする。
新規のパッケージがあっても追加でインストールはしない。

## 状態確認
```
$ dep status
PROJECT                              CONSTRAINT     VERSION        REVISION  LATEST   PKGS USED
github.com/gin-contrib/sse           *                             22d885f            1
github.com/gin-gonic/gin             ^1.3.0         v1.3.0         b869fe1   v1.3.0   4
github.com/golang/protobuf           *                             5a0f697            1
github.com/json-iterator/go          1.0.0          1.0.0          36b1496   1.0.0    1
github.com/mattn/go-isatty           *                             57fdcb9            1
github.com/ugorji/go                 *                             c88ee25            1
golang.org/x/sys                     branch master  branch master  a2f829d   a2f829d  1
gopkg.in/go-playground/validator.v8  v8.18.1        v8.18.1        5f57d22   v8.18.1  1
gopkg.in/yaml.v2                     *                             a5b47d3            1
dep status  1.22s user 2.42s system 162% cpu 2.240 total
```
上記はginのチュートリアルをしているプロジェクトの状態


# アプリ実行
```
$ go run main.go
```
vendor配下のパッケージを利用してアプリ実行ができる。
AE　エクスプレッション例　波打つ線

#まずは完成品

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">エクスプレッションのコードはqiitaで！<a href="https://t.co/NomMtlJsoB">https://t.co/NomMtlJsoB</a> <a href="https://t.co/IwAQCEjQV8">pic.twitter.com/IwAQCEjQV8</a></p>&mdash; YouTool (@YouTool3) <a href="https://twitter.com/YouTool3/status/1107519468517773312?ref_src=twsrc%5Etfw">2019年3月18日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



#シェイプパスをエクスプレッションで書く
シェイプレイヤーのパスのエクスプレッション

```jsx
DN = effect("Division number")("スライダー") ; //Division number
Max_Width = effect("Max_Width")("スライダー");
PathArray = [];
inT =[];
outT = [];
sl = effect("Pad")("スライダー");
tan = effect("Tangent")("スライダー");

for ( var i = 0 ; i < DN ; i ++){
wid = (Max_Width/(DN-1))*i-(Max_Width/2);
if( ( i % 2 ) != 0 ) {
PathArray.push([wid,0])
}else{
PathArray.push([wid,sl])
}
inT.push([-tan,0])
outT.push([tan,0])
}

createPath(points = PathArray, inTangents = inT, outTangents = outT, is_closed = false)
```
Storybookについて簡潔にまとめる(part2)。

# はじめに
本記事は [Storybookについて簡潔にまとめる(part1)](https://qiita.com/mk0812/items/0c7fac5093f2cc54b629) の続きです。
前回はStoryBookとはどういうものか？また、Storybookのインストールや導入方法についてみていきました。今回の記事では実際にコンポーネントをStorybook上に定義して、Storybook上にそのコンポーネントを表示させていきます。

# Storybookの画面構成
画面構成は以下の画像のようになります。
![storybook2.png](https://qiita-image-store.s3.amazonaws.com/0/374967/c0e6d69f-a1ee-1852-ef77-95efbadb9d76.png)

それぞれのパネルの説明です。

| パネル      | 説明       | 
|:-----------------|:-----------------|
| Storyパネル       | Storybook上に載せるストーリー一覧を表示 | 
| プレビューパネル       | ストーリーパネルで選択したコンポーネントの実装内容が表示 | 
| アドオン拡張パネル       |　Storybook上で使用されるアドオン拡張機能を表示 | 

# Storybookのストーリーを実装する
前回の記事でもありましたが、Storybookを導入するにあたって追加されるディレクトリは`src/stories`と`.storybook`です。これらを編集することでStorybookは編集されます。今回はサンプルとして、exampleというコンポーネントを元にストーリーを実装していきます。`src/stories/example.stories.js`を作成しましょう。
※ストーリーを実装するにあたって、ファイル名の末尾に.storiesをつけましょう（必須）。

```javascript:src/stories/example.stories.js
//Storybookのapiを読み込む
import { storiesOf } from '@storybook/vue'
//対象のコンポーネントを読み込む
import Example from '../components/example.vue'

//storiesOfで登録
storiesOf('Example',module)
//addでコンポーネントオプションを追加してストーリーを登録
.add('基本操作',() => {
    components: { Example }, //コンポーネントを定義
    template: '', //テンプレートを定義
    methods : { //コンポーネントで使用するメソッドを定義
        alertSign: function(){
            alert('Example!')
        }
    }
})
```

# Storybookを公開する
公開方法はpackage.jsonで定義したコマンドを入力

```
$ npm run build-storybook
```
ビルド用のディレクトリがプロジェクトルートに作成されると思うのでそれをサーバにあげると完了です。
# まとめ
Storybookを使うか使わないかで、エンジニアとデザイナーの協業によるコミュニケーションや作業の効率化で大きく変わってくると思います。ぜひ使ってみてください。
# 参考資料
[Storybookがなぜ必要か？(Vue.js編)](https://qiita.com/masaakikunsan/items/dad8d84807918f3a43cb)
ggplotでx軸をカテゴリ変数として折れ線グラフを描く


x軸に使うカラムをfactor型に変更する

```r
data_frame$x_axis <- as.factor(data_frame$x_axis)
```

複数系列の折れ線グラフにする場合は、その系列を区別するカラムを```aes(group= )``` に指定する。
軸ラベル名が長い場合は回転させる```element_text(angle = 90, hjust = 1, vjust=0.5)```

```r
g <- ggplot(data_frame, aes(x=x_axis, y=y_axis, colour=group_data, group = group_data)) +
  geom_point() +
  geom_line() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.5))
```
UiPathのバージョンアップ方法

# UiPath Studioの種類
UiPath Studioには大きく2種類のライセンス形態があります。



- **Enterprise Edition**
- **Community Edition**


## Enterprise Edition
Enterprise Editionは、以下のような場合に当てはまります。

1. **製品版UiPath Studioを購入した場合**
2. **試用版（トライアル版）UiPathをインストールした場合**
3. **開発リソースパートナーの特典ライセンスキーなどでインストールした場合**


それぞれのアップデート方法は下記の通りです。

### 製品版UiPath Studioを購入した場合
製品版の場合、購入された**リセラーから各バージョンのインストール資材が提供されます**。

最新以外のバージョンでアップデートしたい場合は、リセラーに問い合わせるのが確実です。

なお、アップデートに際して、**既存バージョンのアンインストールは不要**です。
最新版をそのままインストールするだけでバージョンアップ可能です。

### 体験版等をインストールした場合
以下のURLより最新版をダウンロード可能です。
https://download.uipath.com/UiPathPlatformInstaller.exe

以前は以下のURLからmsiファイルがダウンロード可能でした。（現在は提供されていません）
http://download.uipath.com/UiPathPlatform.msi

msiファイルでのインストールをしたい場合については、リセラーより提供されます。

なお、**アカウント単位ライセンス（Named User）はexe形式**、
**端末単位ライセンス（Node Locked / Concurrent）はmsi形式**として分かれているようです。

ライセンス種別の詳細につきましては、以下のURLを参照してください。
https://www.rpacons.com/blog/cons/License

## Community Edition
コミュニティ版UiPathでは、**特に何もせずとも自動的にアップデートされます**。

UiPath Studioスタート画面の「ヘルプ」から「Update Channel」を”Stable”か”Beta”に設定可能です。

"Stable"は動作確認がされた安定版、"Beta"は最新機能が試せるものの、動作が不安定なこともあるバージョンです。
ひとまずは"Stable"にしておくことをお勧めします。

また、**エンタープライズ版をインストールした状態でコミュニティ版をインストールすることはできない**のでご注意ください。
（厳密には、インストールはできるが、アクティベーションができない）

# バージョンアップにおける注意点
なお、バージョンアップすることで既存のロボットやアクティビティが動作しなくなることがあります。

バージョンアップ前には知識のあるコンサルタント同席のもと、入念にアップグレード対策を行ったうえで本番移行されることをお勧めします。

# 参考リンク
RPAコンサルティング合同会社 - UiPath Studioのアップデート方法
https://www.rpacons.com/blog/tech/UiPath_Update
[Emacs] el-patchでパッケージにパッチを当てる


[el-patch](https://github.com/raxod502/el-patch)の紹介。

# el-patchをつかうモチベーション

Emacsのパッケージを使っていて次のようなことはしばしば起こる。

1. どうやらパッケージがバグっている
2. issueはすでに起っており回避策が示されている
3. init.el内で当該関数を上書きしてバグを回避

とりあえずこれで問題はないがパッケージのバージョンが変わったとき

* 関数の内容が変わってしまったら
* 関数の名前が変わってしまったら

init.el内で定義した関数は有効で有り続けるため非常にわかりにくい不具合が発生する恐れがある。

el-patchはこういった不安を軽減してくれるパッケージだ。ちなみに作者は[straight.el](https://github.com/raxod502/straight.el)の作者さん。

# インストール

straight.el + use-packageなら以下で良い

```elisp
(use-package el-patch)
```

`(setq straight-use-package-by-default t)`の前に書いてしまいハマったのはご愛嬌。

# 使用例

「README.md見て」と言いたいところだが、ちょっととっつきにくく感じたので実際の使用例を記載してみる。

Emacs上でgoogle翻訳が使用できる[google-translate](https://github.com/atykhonov/google-translate)に以下のissueがある。
https://github.com/atykhonov/google-translate/issues/52

google-translateを使用すると`Search failed: ",tkk:'"`というエラーが発生するのだが、回避策として
`google-translate--search-tkk`という関数を

```elisp
(defun google-translate--search-tkk () "Search TKK." (list 430675 2721866130))
```

と置き換えてしまう回避策が示されている。

これをel-patchを用いて実行すると次のようになる。

```elisp
(use-package google-translate
  ;; 中略
  :config/el-patch
  (el-patch-defun google-translate--search-tkk ()
    "Search TKK."
    (el-patch-swap
      (let ((start nil)
            (tkk nil)
            (nums '()))
        (setq start (search-forward ",tkk:'"))
        (search-forward "',")
        (backward-char 2)
        (setq tkk (buffer-substring start (point)))
        (setq nums (split-string tkk "\\."))
        (list (string-to-number (car nums))
              (string-to-number (car (cdr nums)))))
      (list 430675 2721866130)))
)

```

el-patchをインストールすると`use-package`内で`:config/el-patch`(または`:init/el-patch`)が使えるようになるためそこで関数へのパッチを`el-patch-defun`で定義する。

ここでは`el-patch-swap`で関数の内容をごっそり入れ替えてしまっている。これにより元は

```elisp
(defun google-translate--search-tkk ()
  "Search TKK."
  (let ((start nil)
        (tkk nil)
        (nums '()))
    (setq start (search-forward ",tkk:'"))
    (search-forward "',")
    (backward-char 2)
    (setq tkk (buffer-substring start (point)))
    (setq nums (split-string tkk "\\."))
    (list (string-to-number (car nums))
          (string-to-number (car (cdr nums))))))
```

という関数だったものがissueで示された関数に置き換えられている。

修正前の関数も記述するのは`el-patch-validate-all`という関数でパッチ前の関数が変更されていたりしないか確認出来るようにするためだ。もしパッチ前の関数に変更があれば、以下のような警告が出力される。
(実は`el-patch-defun`でパッチ後の関数を定義するだけでも良いが必ず警告が出てしまうのでお勧めしない)

```
Warning (el-patch): Definition of defun `google-translate--search-tkk' differs from what is assumed by its patch
```

心配性な人はinit.elの最後に`(el-patch-validate-all)`を追加しておくとよいだろう。

# おわりに

el-patchの大体の使用感はつかめたかと思う。
el-patchには上で紹介したもの以外にも様々な構文が用意されているため、あとはREADME.mdを読んで適切なものを使用してもらえれば良いと思う。
Shellの基本を学ぶ（９）スクリプトを実行する様々な方法

# ファイルからの実行

## hash-bang を使った実行
Bashのサブプロセスがスタートする。ファイルの実効権限が必要。

## hash-bang のない場合

下記の通り。実行権限は必要ない。

```bash
bash yourscript
```

`bash -x yourscript` でデバッグモードになる。

```bash
$bash -x mvext jpg txt
+ [[ 2 -ne 2 ]]
+ for f in *"$1"
+ mv -- -a.jpg -a.txt
+ for f in *"$1"
+ mv -- a.jpg a.txt
+ for f in *"$1"
+ mv -- b.jpg b.txt
+ for f in *"$1"
+ mv -- c.jpg c.txt
```

## 現在のシェルのプロセスでファイルを実行

`source` もしくは、`.` シノニム。

```bash
$ source yourscript
$ . yourscript
```

`.bashrc` で使われている方法。

# バックグラウンドとnohup

## & バックグラウンド実行

`yourscript &` でよい。現在のインタラクティブセッションから切り離される。標準入力から読もうとすると止まってしまう。ターミナルが終了しても、バックグラウン実行したい場合は、`nohup yourscript &` 

## 低いプライオリティで実行したい場合

`nice`

```bash
nohup nice yourscript &
```

## サンプル

_stillhere_

```bash
#!/bin/bash

declare -i i=0
while true; do 
  echo "still here $((++i))"
  sleep 1
done
```

これを実行して、ターミナルを閉じても、ちゃんと動作する。


TERM 1

```bash
nohup stillhere > stillhere.log &
[kill this terminal]
```

TERM 2

動き続ける。

```bash
$tail -f still.log
still here 5
still here 6
still here 7
still here 8
still here 9
still here 10
still here 11
still here 12
still here 13
still here 14
still here 15
still here 16
still here 17
still here 18
still here 19
still here 20
still here 21
still here 22
still here 23
still here 24
still here 25
still here 26
still here 27
still here 28
still here 29
still here 30
still here 31
```

# exec

I/O をリダイレクト出来るので、ログなどに便利。`exec > logfile 2> error.log`

次のコードで結果が自動でlogfile にはかれる。

_stillhere_

```bash
#!/bin/bash

declare -i i=0

if [[ $1 == "-l" ]]; then
  exec >logfile
fi
declare -i i=0
while true; do 
  echo "still here $((++i))"
  sleep 1
done
```

# クーロン

## At 

特定の時間にスクリプトを動かす。

```bash
at -f yourscript noon tomorrow
```

## Cron

Mac はlaunchd 
Ubuntu は　 Upstart

# set と　shopt

Bash の振る舞いをカスタマイズする。

## set

### `-x`
全ての実行されたコマンドを引数付きで表示する。

### `-u`
初期化していない変数や、exits があるとエラーをはく

### `-n` 
コマンドを読むが実行しない

### `-v`
全てのコマンドを読んで表示する。`-n` と合わせると、コマンドを実行せず表示出来る。

### `-e` 
コマンドが失敗したらexit する（ただし、if, while, until || && 以外)

## shopt

`-s`でオプションを設定し、`-u`で設定の解除

* `shopt -s nocaseglob` パス名のケース（大文字小文字）を無視する
* `shopt -s extglob` 拡張パターンマッチングを使用可能する
* `shopt -s dotglob` 隠しファイル(.) を使用可能にする。
* `set -o noclobber` リダイレクトでファイルを上書きしない
*
rbenvで指定したい[バージョンがない]ときの対応

## rbenv
機能としてはrailsそんなできない私からする感覚だと、とりあえずrbenvを使ってrubyのバージョンを合わせるような切り替えスイッチ的な感覚


## 本題の指定したいバージョンがないときの対応
今回はいつものように `git clone xxx` をして、そのあと`rails s`をすると
当然のごとく`version 2.4.5 is not installed(set xxxxx)` とか出てくる


`rbenv versions`　→現在インストールされているものが見える
`rbenv local 2.xxx` →指定したversionに切り替え
`rbenv install 2.x` →　ない場合はこれで一旦インストール

今回はこの時になかったので

`brew upgrade ruby-build`をしてアップグレード
`rbenv install -l` ※今までこっちでしてましたけど左のやつでいけることをさっきしった`rbenv install -list`

これでみると、指定したいversionが表示されており、インストールできる


## 記事のまとめ
最初このrbenvがどうとか
versionがどうとか
ほんと意味プーすぎて教えてもらったときにこういってくれたらなぁ〜って感じで思ってましたが
とりあえず、コマンドぽちぽち入力して対応すれば感覚つかめますね！（圧倒的無駄なやり方笑）
net use ～ /deleteしたのに、再度net useで繋ごうとすると1219エラー発生

net use ファイルサーバ /user:user名 パスワード
net use ファイルサーバ /delete
net use ファイルサーバ /user:user名 パスワード

上記の順番で実行したら1219エラーが発生した、そこのあなた。
/deleteの直後に「/no」を付ければOK。
つまり、
net use ファイルサーバ /delete /no

デフォルトがYesらしいので、/noを付けずに実行すると
接続情報？がメモリ？に残ったまま(net useで表示されなくなっても)に
なるので、1219エラーが発生する模様。
fastlaneのビルドを数秒短縮できるかもしれないtips

タイトルで全部説明出来そうだったので、思わせぶりなタイトルになってしまった。

# 対象
- CarthageやCocoapodsを使っている
- fastlaneでbadgeプラグインを使っている

上記に当てはまらない方は関係ないです。

# 不要なバッジ処理

アイコンにバージョンバッジを付けたい場合Fastfileで以下のように書くことが多いと思う。

```
add_badge(shield: "#{@version_number}-#{@commit_hash}-white")
```

が、このような書き方で実行すると、

```
\[13:50:07]: Start adding badges...
\[13:50:07]: '../App/Carthage/Module/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-iTunes.png'
\[13:50:08]: '../App/Carthage/ModuleB/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-iTunes.png'
...
```

のような感じで、CarthageやCococaPodsでCheckoutしたExampleプロジェクト内のアイコンにも処理が行われることがある。（これが十数秒かかったりする）
なので、

```
add_badge(shield: "#{@version_number}-#{@commit_hash}-white", glob: "/App/Core/Assets/Assets.xcassets/AppIcon.appiconset/*.{png,PNG}")
```

といった感じでglobでメインのアプリだけを指定してあげれば、この無駄な処理が省ける。
globは内部でcurrent_pathと連結されるので`/`から始める点に注意。
pipの簡単なまとめ

[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしているryota_miraidenshiです。
今回は、Pythonを勉強している中でpipというものが出てきたので調べてわかったことをまとめておきたいと思います。

#pipとは
pipの主な目的はPythonのパッケージを管理することです。
公式が出しているパッケージはPythonインストール時に一緒にインストールされますが、追加したいパッケージはこのpipを使ってインストールしていきます。

#pipのバージョンの確認
```
pip -V
```
上記のコマンドでインストールされているpipのバージョンを確認できます。


#pipを使ったパッケージのインストール

```
pip install パッケージ名
```

上記のコマンドでパッケージのインストールができます。
パッケージを消したい場合はinstallの部分をuninstallにすればOKです。


#おすすめパッケージ
パッケージをインストールできるのはわかったけど具体的に何をインストールすればいいか分からないと思います。
そこでおすすめのパッケージを二つ紹介します。

###pandas
これはpythonは機械学習や深層学習で使用される言語ですが、それらの精度に大きく関係するのがインプットするデータの質です。
そのデータの質をあげるには不適切なデータを削除するなどの前処理が必要で、そのデータ処理の基本ツールとしてこのpandasが使われます。

###matplotlib
これはpythonでグラフを描画するときに使用されるパッケージです。
画像ファイルだけでなく、簡単なアニメーションやインタラクティブなグラフも作ることができます。


#終わりに
プログラム初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正しますのでどんどん指摘してください。
NestedScrollView内にRecycleViewを置くとスクロールがずれる問題について

# この記事について
NestedScrollView内にあるViewを置いてからRecyclerViewを置いた時に、RecyclerViewの上端にスクロールされてしまい、最初に置いたViewが隠れてしまう問題に遭遇したので、対処法をメモする。

# 問題の詳細
```
<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="このViewが隠れてしまう" />

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
</android.support.v4.widget.NestedScrollView>
```

上記のようにレイアウトを作って、RecyclerViewにAdapterをセットした場合、RecylcerViewの上端にスクロールされた状態で表示され、TextViewは上にスクロールしないと表示されなかった。

# 解決策
```
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="true"
        android:orientation="vertical">

        ~ 省略 ~ 

    </LinearLayout>
```

NestedScrollView直下のViewGroup（今回はLinearLayout）に `android:focusableInTouchMode="true"` をつける

# 参考
https://stackoverflow.com/questions/36923948/recycleview-steals-focus-when-inside-a-nestedscrollview
4 Values whose Sum is 0

- [4 Values whose Sum is 0](http://poj.org/problem?id=2785)
- 蟻本(p147)に載ってた問題

- 蟻本の「くじびき」と同じようなアプローチでやっていく（P25）



### 問題

要素数nの整数リストA, B, C, Dが与えられます。各リストから1つずつ取り出したとき、その和が0となるような組み合わせの個数を求めなさい。ただし、1つのリストに同じ値が複数個含まれている場合、それらは異なるものとして数えます。



### 制約

- $1 \leq n \leq 4000​$
- $|A_i|, |B_i|, |C_i|, |D_i| \leq 2^{28}\ (0 \leq i < n)$



### 入力例1

```
6
-45 22 42 -16
-41 -27 56 30
-36 53 -37 77
-36 30 -75 -46
26 -38 -10 62
-32 -54 -6 45
```



### 出力例1

```
5
```



## O(N^4)

- 一番愚直な方法。TLEする

```cpp
#include <iostream>
#include <algorithm>
using namespace std;

int N;
int A[4444];
int B[4444];
int C[4444];
int D[4444];

int main() {
  cin >> N;
  for (int i = 0; i < N; i++) {
    cin >> A[i] >> B[i] >> C[i] >> D[i];
  }

  sort(D, D+N);

  int ans = 0;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      for (int k = 0; k < N; k++) {
        for (int l = 0; l < N; l++) {
          if (A[i] + B[j] + C[k] + D[l] == 0) {
            ans++;
          }
        }
      }
    }
  }

  cout << ans << endl;

  return 0;
}
```



## O(N^3logN)

- $a + b + c+  d = 0$を$a + b + c = -d$に式変形する。
- $a, b, c$のみをを全探索すると、dを全探索しなくてもdが確定できる。
- なので、a, b, cを全探索してdを二分探索で見つける。d の配列はあらかじめソートしておく必要がある。
- `lower_bound`と`upper_bound`を使うと$[left, right)$の区間で値を求められる。なのでright-leftが同じ値の個数となる。
- この解法でもTLEする

```cpp
#include <iostream>
#include <algorithm>
using namespace std;

int N;
int A[4444];
int B[4444];
int C[4444];
int D[4444];

int main() {
  cin >> N;
  for (int i = 0; i < N; i++) {
    cin >> A[i] >> B[i] >> C[i] >> D[i];
  }

  sort(D, D+N);

  int ans = 0;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      for (int k = 0; k < N; k++) {
        int num = - A[i] - B[j] - C[k];
        int left = lower_bound(D, D+N, num) - D;
        int right = upper_bound(D, D+N, num) - D;
        ans += right - left;
      }
    }
  }

  cout << ans << endl;

  return 0;
}
```



## O(N^2logN)

- $a+b+c+d=0$を$a+b = -c-d$に変形する。
- あらかじめ$a+b$について全通りの計算結果を配列に記録しておく。これは$O(N^2)$。
- 次に、$-c-d$を全通り試す。そのとき、値が$-c-d$になるような$a+b$がいくつあるかを二分探索で求める。
- この方法は半分全列挙という名前のアルゴリズム。

```cpp
#include <iostream>
#include <algorithm>
using namespace std;

int N;
int A[4444];
int B[4444];
int C[4444];
int D[4444];
int AB[4444*4444];

int main() {
  cin >> N;
  for (int i = 0; i < N; i++) {
    cin >> A[i] >> B[i] >> C[i] >> D[i];
  }

  // A+Bの組み合わせをあらかじめ全て求めておく
  int cnt = 0;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      AB[cnt] = A[i] + B[j];
      cnt++;
    }
  }

  // 二分探索できるようにするためにソートしておく
  sort(AB, AB+cnt);

  // -C-Dの組み合わせを全列挙。等式が成り立つようなABの個数を足し合わせていく
  int ans = 0;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      int num = - C[i] - D[j];
      int left = lower_bound(AB, AB+cnt, num) - AB;
      int right = upper_bound(AB, AB+cnt, num) - AB;
      ans += right - left;
    }
  }

  cout << ans << endl;

  return 0;
}
```



## まとめ

1. 全探索。$O(N^4)$
2. 値を3つ固定。$O(N^3logN)$
3. 変数を半分ずつにする（半分全列挙）。$O(N^2 logN)$



## メモ

- [四平方定理](https://yukicoder.me/problems/no/800)の類題なので解いてみた。
【メモ】herokuでアプリが起動しない時のググり経緯

<img width="545" alt="スクリーンショット 2019-03-16 19.29.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/329941/55dd23fb-30a4-8ec8-4041-dc0de424a1de.png">
いつも見るこの画面。
いい加減、この表示からしっかり抜け出せるようになるためメモします。

各目次、参考文献のタイトルです。
中には今回の原因と関係ないものもありますが、気にしないでください。

##参考記事一覧

###①Ruby on RailsのファイルをHerokuのデプロイする方法
https://akihiko-s.com/heroku-deploy-rubyonrails/

Config/database.ymlを

```
production:
  <<: *default
  database: db/production.sqlite3
```
↓

```
production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5
```
に変更。変化なし。


###②heroku run rails db:migrateのエラー発生時の解決法
https://qiita.com/wann/items/6966f1022ce823a56cc5

node.jsのversionをアップデート。
`$ nvm install v8.0.0`

変化なし。

###③Rails tutorial １章でheroku loginできない時[Cloud9]
https://qiita.com/hama1/items/a86fde879326e5feb9ef

CLIのpluginが何も無いためアップデート。
`$ heroku plugins:install heroku-repo`

変化なし。

###④heroku へデプロイでエラー「The page you were looking for doesn’t exist.」
http://stuby.hatenablog.com/entry/2014/02/02/163544

assetsをプリコンパイルしてなかったのが原因かも?
`$ rake assets:precompile`

変化なし。

###⑤HerokuにWebアプリを公開する方法
http://0gravity000.sunnyday.jp/ProgramingNote/2016/08/24/tip_07_01_001/

パイプラインを作成し、Connect to GitHubを実施。

変化なし。

###⑥Heroku + rails4.2 + Deviseで本番環境，ログアウト画面に遷移する際にエラー
https://ja.stackoverflow.com/questions/10980/heroku-rails4-2-deviseで本番環境-ログアウト画面に遷移する際にエラー


JavaScriptが正常に読み込まれていないため、ローカルにpublic/assetsディレクトリがあるなら消してcommit→pushで良いとのこと。

変化なし。

………

##結果

上の⑥をやった後より、しばらく期間が空いてしまいました…

ただ原因を色々な人に聞いてるうちに、cloud9側の操作によるものだと言う意見が多く出ました。
現役のエンジニアはローカル環境を基本としているので、なかなか答えが出にくいそうでした。

ローカルの環境に早く身を投じるのが良いと言う結果になりました。