uso

雑記いろいろ
★書いてある内容に保証は一切ありません。
 ご自身で判断をしてください。

php-fpm(dcoker)

2024-04-03 19:17:19 | 日記

Dockerファイル
-----------
# ベースイメージを指定
FROM php:7.4-fpm

# 作業ディレクトリを設定
WORKDIR /var/www/html

# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
git \
unzip \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libzip-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd pdo pdo_mysql zip

# Composerをインストール
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Composerのキャッシュをクリア
RUN composer clear-cache

# Laravelアプリケーションのソースコードをコピー
COPY . .

# Laravelのキャッシュをクリア
RUN php artisan cache:clear
RUN php artisan config:clear

# アプリケーションのポートを公開
EXPOSE 9000

# サーバーを起動
CMD ["php-fpm"]

----------------


docker-compose.yml
----------------
version: '3'

services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:9000"
volumes:
- .:/var/www/html
----------------

これで
docker-compose up -d --build

アクセス
http://localhost:8000


外部のDBに接続する方法
Laravelの.envファイルを設定する
DB_CONNECTION=mysql
DB_HOST=外部データベースのホスト
DB_PORT=外部データベースのポート
DB_DATABASE=データベース名
DB_USERNAME=ユーザー名
DB_PASSWORD=パスワード


Mouse

2022-11-14 13:22:45 | 日記
https://www.inasoft.org/talk/h202005a.html

# .NETのCursorクラスを利用するためにSystem.Windows.Formsをロード
add-type -AssemblyName System.Windows.Forms

# mouse_event APIを利用するための準備
$signature=@'
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
'@

$SendMouseEvent = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru

echo "Ctrl+Cで終了します。"

# マウス移動
$MOUSEEVENTF_MOVE = 0x00000001

# スリープ秒数
$SleepSec = 50

# マウスの振れ幅
# ・マウスの移動イベント生成用の振れ幅
$MoveMouseDistance = 1
# ・マウスの座標を左右にずらす用の振れ幅
$MoveMouseDistanceX = 1

# 偶数回数目は左へ、奇数回数目で右へずらすためのフラグ
$Flag = $true

# 永久ループ
while ($true) {
# スリープ
Start-Sleep $SleepSec

# 現在のマウスのX,Y座標を取得
$x = [System.Windows.Forms.Cursor]::Position.X
$y = [System.Windows.Forms.Cursor]::Position.Y

# マウス座標を少しずらす(マウスイベントを監視するOS(スクリーンセーバー、スリープ)対策)
$SendMouseEvent::mouse_event($MOUSEEVENTF_MOVE, -$MoveMouseDistance, 0, 0, 0)

# マウス座標を少し右にずらす(マウスイベントを監視するOS(スクリーンセーバー、スリープ)対策)
$SendMouseEvent::mouse_event($MOUSEEVENTF_MOVE, $MoveMouseDistance, 0, 0, 0)

# 座標を監視するアプリ対策(座標を左か右に1ピクセル分ずらすだけにする)
if ($Flag) {
$x += $MoveMouseDistanceX
$Flag = $false;
}
else {
$x -= $MoveMouseDistanceX
$Flag = $true
}
[System.Windows.Forms.Cursor]::Position = new-object System.Drawing.Point($x, $y)
$x = [System.Windows.Forms.Cursor]::Position.X
$y = [System.Windows.Forms.Cursor]::Position.Y
}

PowerShellの実行権限を変えて、ファイル実行する必要あり。
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.3
# 変更
Set-ExecutionPolicy Bypass
# 確認
Get-ExecutionPolicy -List

[work]質とスピード

2020-07-13 00:52:52 | 日記

■以下のサイト内容まんま

ソフトウェア開発の「品質vs.スピード」、本当は何を犠牲にしているのか【デブサミ2020】
https://codezine.jp/article/detail/12245

プロジェクトマネジメントにはQCD(Quality:品質、Cost:コスト、Delivery:納期)という概念があり、
トレードオフの関係になると言われている。
しかし、ソフトウェア開発においては逆の効果をもたらす

■本当に犠牲にしているのは、品質ではなくシステムの保守性

開発に与えられた「時間」に対して「予算」「品質」「スコープ」が限られている場合、どれを犠牲にすべきかという問題だ。
多くの現場では、品質を犠牲にして、スピードを得ようとする。

しかし、品質を犠牲にすれば短期的にはスピードが得られるが、中期的には逆効果になり、長期的には致命傷になる。
本当は何を犠牲にしているのか、そして、この短期・中期・長期とは、どのくらいの期間を指すのか?

■品質とは(補足)
操作性や信頼性など「○○性」がつく言葉であらわされる物が対象。
英語では「Usability」や「Reliability」など、末尾に「ility」がつく多くの言葉が該当する。

ソフトウェアの品質
・お客様から見える外部品質
・見えない内部品質

内部品質を作り込んだ結果として、外部品質として定義される特性の実現に近づくことができる。
内部品質は結果ではなく原因であり、良いソフトウェアが備えているべきものだ
(『レガシーコードからの脱却』から引用)。
品質を犠牲にしてスピードを得ようというとき、この内部品質の保守性(Maintainability)や柔軟性(Flexibility)を犠牲にしている

■保守性を犠牲にしても、中長期的にスピードは上がらない
保守性の低さという技術的負債が蓄積された結果、いろんなところが裏で手をつないで、足を引っ張りあっい、
ひとつひとつの変更に余計な時間がかかるようになっている。
その結果、単位時間あたりの生産量は下がる。つまり、保守性を落とした結果、スピードも落ちてしまう。

■スピードを落として時間をかけたら、保守性は向上するか?
技術力のある人はある程度急いで作ったとしても一定以上の品質のコードを書くし、
意図的に品質を落としたとしても速度はあまり上がらない。
逆に、技術力が高くない人が時間をかけて作ったとしても、その人の技術力以上の品質のコードは書けない

保守性とスピードは、トレードオフの関係ではない。

■コードの品質を高く保っていたからこそスピードは速くなる
むしろ品質を高めることで、デリバリーが高速になることが多い。
低品質を受け入れることで、プロジェクトが速くなることはない。
高品質を要求することで、プロジェクトが遅くなることもない。
むしろ品質を高めることで、デリバリーが高速になることが多い。
品質基準を下げてしまうとデリバリーが遅くなり、予測できなくなってしまう。

コードの品質を高く保っていた「からこそ」速くなると言える。

■『質vs.スピード』という二律背反の関係は、局所的なものでしかない。
大域的には、片方を犠牲にした場合、知らぬうちにもう一つも犠牲にしている。

品質が劣化すれば、リードタイムが増加する。
品質は悪いと基本的に手戻りを生む。
手戻っている時間は学びを生まない時間となる。
品質を下げるという判断が、学びの速度低下を許すことになる。

「品質を捨てて速度を上げよう」は、品質が劣化して手戻りが発生するだけで、結局はリードタイムの増加に跳ね返る。
そして、リードタイムが増加すると仮説検証プロセスも回らなくなる。


■Facebookの元エンジニアであるEvan Priestley氏の言葉「本当の関係」
 内部品質がスピードを生み
 スピードが学びのループを生み
 学びのループが外部品質を生み
 外部品質が競争力を生み
 競争力が売り上げを生み
 売上が内部品質を育む

■どうやって個々人の品質とスピードを上げていくのか?
品質とスピードを上げる方法が、個人のレベルに依存しているとしたら、どうやって個々人の品質とスピードを上げていくのか。
これには正解はないが、「ソフトウェアの開発に最初から最後まで関わるという経験がとても重要だ」(Evan Priestley氏のコメント)
いろいろなフィードバックを自分で受け止めて、設計者として能力を上げることが決定的に重要だと思うと述べた。

■品質の効果は、1か月以内にあらわれる
およそ4回で手動テストと自動テストのコストが逆転する。
「内部品質への投資の損益分岐点は1か月以内に現れる」(マーティン・ファウラー)
1か月以内であれば、内部品質への投資の受益者は自分たち自身である。
エンジニアとしてのプライドやモラルのために品質に投資するのではなく、自分たちの損得の話になる。

■最後に
品質と速度についてトレードオフを意識するとき、実際には何と何を天秤にかけているのか
「若者が育つ機会」
「新技術の調査」
「多様性の確保」
が犠牲になっているのではないか

docker

2020-03-28 17:49:22 | 日記
敷居が高いけど、勉強してみた。
dockerというよりdocker-composeがメイン。楽だし。

ここを参考にvueの環境を作ってみた際のメモ。
https://qiita.com/rh_taro/items/ca08b930f704275286a4

------vue環境作る

===Dockerfile
FROM node:13.12.0-alpine3.10

WORKDIR /usr/src/app

RUN apk update && \
npm install --no-optional -g @vue/cli

★バージョンはDocker Hubで探す
 https://hub.docker.com/_/node/
 alpineの最新にしてみた(軽いらしい)
★--no-optionalを入れないとWARNがいっぱい出る、npm×Linuxの問題?
 ↓は出てしまうが、少ないしOKとしておく・・・、大量には出ない
 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/@vue/cli/node_modules/chokidar/node_modules/fsevents):
 npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.12: wanted {"os":"darwin","arch":"any"} (current:{"os":"linux","arch":"x64"})


===docker-compose.yml
version: '3'
services:
app:
build: .
ports:
- 9050:8080
privileged: true
volumes:
- ./app:/usr/src/app
tty: true
stdin_open: true
command: /bin/sh

ビルド
docker-compose build

実行
docker-compose up -a

作ったコンテナに入ってsh
docker-compose exec app sh

vue cliでプロジェクト作る
vue create .
→質問は適時必要なものを答える

時間がかかるがappフォルダに色々入るので、
yarn serve

ホストに戻って
http://localhost:9050
→vueの画面出てくると成功

------途中でわからなくて調べたこと色々
起動方法について(dockerコマンドはまた別モノ)
http://docs.docker.jp/compose/faq.html
docker-compose up
docker-compose run -it
docker-compose start
→up ・ run ・ start の違いは何ですか?

一般的には docker-compose upを使う。
docker-compose run コマンドは「ワンオフ」(one-off;1つだけ、偶発的) または「アドホック」(adhoc;臨時)なタスクの実行に使います。
docker-compose start コマンドは既に作成済みのコンテナの再起動には便利です。しかし止まっているコンテナを起動するだけであり、新しいコンテナは作成しません。

コマンド基本色々
http://docs.docker.jp/get-started/part2.html
チートシート
docker build -t friendlyname . # このディレクトリ内にある DockerCile でイメージ作成
docker run -p 4000:80 friendlyname # "friendlyname" の実行にあたり、ポート 4000 を 80 に割り当て
docker run -d -p 4000:80 friendlyname # 同じですが、デタッチド・モード
docker container ls # 全ての実行中コンテナを表示
docker container ls -a # 停止中も含めて全てのコンテナを表示
docker container stop <hash> # 指定したコンテナを丁寧に停止
docker container kill <hash> # 指定したコンテナを強制シャットダウン
docker container rm <hash> # マシン上から指定したコンテナを削除
docker container rm $(docker container ls -a -q) # 全てのコンテナを削除
docker image ls -a # マシン上の全てのイメージを表示
docker image rm <image id> # マシン上の特定のイメージを削除
docker image rm $(docker image ls -a -q) # マシン上の全てのイメージを削除
docker login # CLI セッションで Docker の認証を行いログイン
docker tag <image> username/repository:tag # レジストリにアップロードする <image> にタグ付け
docker push username/repository:tag # タグ付けしたイメージを送信
docker run username/repository:tag # レジストリにあるイメージを実行

未使用イメージ一括削除
docker rmi `docker images -q`

npmで大量のwarnが出る
https://docs.npmjs.com/cli/install
→解決できず、とりあえず--no-optional入れて逃した
→少し調べたら、同じようなことを調べているサイトがあった
 https://haiju.hatenablog.com/entry/2018/04/23/134809
 MacOS以外にnpmをインストールすると出るらしい・・