OmniAICreator/Qiita-1.07M huggingface dataset:
「暗号技術入門　秘密の国のアリス」のまとめ

# 概要
古典暗号の説明から始まり、対称暗号や公開鍵暗号などの基本的な考え方や認証などに関連する情報が分かりやすくまとまった本です。暗号やセキュリティに関連する知識を全く持たない完全な初心者でも読み進めることができるくらいの難易度でした。



# 学習内容


## 鍵配送問題

共通鍵暗号の仕組みなどを学び、暗号化の仕組みに関してはある程度理解が深まったところである問題が出てきます。

そもそも共通鍵暗号で共有するべき鍵はどのように配送すればよいのでしょうか。
通信路を通じて安全に鍵を共有できるのであれば、そもそも暗号化技術などは要らないはずです。

実際に利用されている鍵の配送には主に以下４つの方法が利用されています。


・鍵の事前共有
・鍵配布センターの利用
・Diffie-Hellmanの鍵交換
・公開鍵暗号の利用



### 鍵の事前共有
これは実際に人に会って、USBや口頭で鍵を伝えるような方法です。一番最初に思いつきそうな方法ですが、直接会うのが困難であったり、利用する鍵の数が膨大になるというような問題があり、あまり現実的ではありません。利用される場面は限られてきます。

### 鍵配布センターの利用
暗号化通信を行うたびに鍵配布センターに暗号化ようの鍵を用意してもらう方式です。
アリスとボブが暗号化通信を行うステップは以下の手順になります。

step1. アリス、ボブは自身の鍵を鍵配布センターに登録する。

step2. アリスは鍵配布センターに「ボブと通信したい」申し出る。

step3. 鍵配布センターは疑似乱数生成器を利用してセッション鍵を生成する。

step4. 生成したセッション鍵をアリスの秘密鍵で暗号化したものをアリスに送付する。同様にボブの秘密鍵で暗号化したものをボブに送付する。

step5. アリス、ボブは自身の秘密鍵で復号して入手したセッション鍵を利用して通信を始める。



### Diffie-Hellmanの鍵交換

別の記事でまとめます。



### 公開鍵暗号の利用

公開鍵を利用した鍵交換になります。
今回もボブとアリスが暗号化通信を行う際を考えてみましょう。

step1. ボブは公開鍵とプライベート鍵のペアを生成し、公開鍵をアリスに送ります。
　　　　(アリス以外の人物が盗聴し、公開鍵が盗まれるかもしれませんが問題ありません。)

step2. アリスは送られてきた公開鍵を利用して送りたいメッセージを暗号化し、ボブに送ります。
　　　　（公開鍵では復号ができないので問題ありません。）
step3. ボブはプライベート鍵を利用して復号化します。



鍵配送問題をうまく解決している感じがしますが、欠点がいくつかあります。

（１）アリスが受け取った公開鍵が本当にボブのものであるか保証（認証）ができないからです。そのため、man-in-the-middle という攻撃が行われる可能性があります。
（２）公開鍵暗号は共通鍵暗号と比較して処理が何百倍も遅い。


このうち（２）に関しては、ハイブリッド暗号化方式を利用することで処理速度の問題を解消することができます。



# 終わりに

もう少し深くまで内容を追加していきます。
設計書を作るときに意識している重要なこと

システムエンジニアを始めたばかりの頃はドキュメント作成を任されても何をどう書けばいいかよくわかりませんよね、、
私も基本設計書を書いてレビュー依頼を出しては沢山の指摘を頂き、ヒーヒー言いながら修正しました😅

設計書のレビュー・差し戻しを経験していく中で、私自身が気がついたことや上司からもらったアドバイスを基本設計書を書くときに確認することで、設計書の指摘が以前よりも少なくなりました。

この記事では基本設計書を書くときに確認すべき大切なことを３つ共有させていただきます。

基本設計書を適切に書くことによって、システムの保守性やプログラムをつくるときに悩む必要がなくなるため、より生産性が上がります！

## 基本設計書を書くときに確認すべき大切なこと

### 誰に向けて・なぜドキュメントを書くのか考える
作った基本設計書は誰のために・なぜ書くのかを明確にしないと設計書の内容が伝わりにくくなります。
基本設計書は、詳細設計あるいはプログラム製造を行うときに開発者が参考するために書くドキュメントです。
そのため、大雑把な表現や同じ概念を指しているのに少し違う言葉を使わないようにする必要があります。
以下に私が意識していることを列挙します
```
- プロジェクトに参加したばかりのエンジニアでも理解できる内容・表現であるか
- エラー種別が明確であるか（システムエラー：500, アプリケーションエラー：400 etc...）
- DBテーブルの名前・カラム名が正しい名前か
- プロジェクトで共通して使用されている言葉で書かれているか
```

### データのINPUT / OUTPUTを確認しながら設計する
**システム設計では何をしているか一言で言えば`データのINPUT / OUTPUTを定義すること`です。**
どのようなデータを取り出して、編集するのか、ただ表示するのかという出力があるのが一連の流れです。
そのため、基本設計書を作成するときは設計書に書いたデータのI/Oの内容が正しいかSQLクエリを実行してみて確かめます。

### 再利用できる文章を書く・使う
ある程度成熟しているプロジェクトだと、既に画面・機能の設計書が作られていると思います。
その場合は、他の似たような処理を参考にして書くことでパズルのように設計ができます。
例えば、エラー処理の内容を書くときに毎回自分で書いていたら表現の仕方が何通りもできてしまって複雑な設計書になります。
そのため、エラー処理の時のテンプレートを用意しておいて、エラー種別（システムエラー：500, アプリケーションエラー：400 ) やエラーメッセージの箇所だけ書き換えるだけで良いようにするとより早くドキュメントが出来上がります。

## おわりに
設計書を書かないチームもありますが、設計書による言語化は技術力を高めてくれると思います。
まだ私自身新人で設計に関してはわからないことだらけです。
またレベルアップしたら設計書の書き方に関する記事を書きたいと思います。
MUI

### MUI
- MuitiLine
テキスト複数行で入れる時
https://mui.com/material-ui/react-text-field/#multiline

marginTop:mt で略して表記可能
- Paper
サイドバーっぽくできる

親要素に下記を指定
display flex
justyfy-content center
align-items center

Buttonタグ
margin使わないほうが良い
【EAS】zsh: command not found: easのエラーが出た時の解決法

## はじめに
以前ExpoとReactNativeでIOSアプリを開発し、EAS Buildができるようになったため、EAS Buildでアプリをビルドしてみたいと思い、格闘しています🥺

## エラー内容
まず下記のコマンドでeas-cliをインストールします。
```
$ npm install -g eas-cli
```

その後EASを使用するため、ログインをします。
```
$ eas login
```

すると、「eas」のZshコマンドが見つかりませんと言うエラーが...💥
```
zsh: command not found: eas
```

## 解決方法
```
export PATH=$PATH:~/.npm-global/bin
```

## 参考記事
https://stackoverflow.com/questions/72874829/i-am-trying-to-install-eas-cli-and-am-getting-the-error-zsh-command-not-found
メソッド、レシーバー(image)

~~~umarepo_show.html.erb

<%@cook.images.each do |image| %>
        <div class="cook_hoge">
        <div class="cook_image">
          <%= image_tag image %> 
        <% end %>

は、 <%= image_tag image %> でeachで回せる


<%@umarepos.each do |umarepo| %>
        <%umarepo.images.each do |image| %>
        <%= image_tag image %> 
        <% end %>
      <% end %>




@umareposには、Umarepoクラスのオブジェクトの配列がはいっる。
imagesというメソッドのレシーバはUmarepoクラスのオブジェクトじゃないといけない。
結果、@umareposの中からひとつづつ取り出して、
umaprepo.images
とする。
➀バッチ処理機能、タスクスケジュール機能（Laravel）

## 始めに
Laravelのバッチ処理機能を実装したので
備忘録として記事にしました。
２部構成となっております。（➀、➁）
　➀：バッチ処理機能
　➁：タスクスケジュール機能（Laravel機能）

バッチ処理：特定の日時に指定した処理を実行できる処理のこと。
タスクスケジュール機能：Laravel内でバッチ起動の日時を設定することができる機能


## 環境
| 開発環境    |バージョン |
|-----------|------------|
| __Laravel__ | 8.83 |
| __PHP__     | 7.3  |
| __Server__  | Amazon Linux |

## 手順
__1, Laravel内にcronとの連携処理を登録する__
__2, Laravel内に処理したい内容を実装する__
__3, cronに実行コマンドを登録、実行する__

## 1, Laravel内にcronとの連携処理を登録する

バッチ登録用のファイルを作成します
``` 
// バッチ登録用のファイルを作成する
$ php artisan make:command BatchCommand
Console command created successfully.

// 確認する
ls -la ./app/Console/Commands/
-rw-r--r-- 1 userName 197121 1260 Nov 21 10:34 BatchCommand.php
``` 

作成したファイルを編集します
```php:BatchCommand.php
namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Http\Controllers\BatchController;

class BatchCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    // 実行するコマンドの名前です（引数も設定可能）
    protected $signature = 'command:batchTest';

    /**
     * The console command description.
     *
     * @var string
     */
    // コマンドの説明文です（適当でOK）
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * バッチコマンド処理内容（処理したい内容を書き込みます）
     */
    public function handle()
    {
        // 処理したいクラスをインスタンス生成します。
        $batch = new BatchController();
        $batch->test();
    }
}
```

手動でバッチ処理ができているかどうか確認します。
`php artisan command:batchTest`

## 2, Laravel内に処理したい内容を実装する
バッチ処理にて処理したいクラス、Controllerを作成します。
```php:BatchController.php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

/**
* バッチコントローラークラス
*/
class BatchController extends Controller
{

    /**
    * バッチ処理
    */
    public function test()
    {
        Log::debug(__FUNCTION__);
        Log::debug('バッチ処理完了しました');
    }
```

## 3, cronにコマンドを登録、実行する
```
* * * * * * 自分のプロジェクトまでのパス/artisan command:batchTest
```
「 * * * * * * 」にバッチ処理する日時を設定することができます。 
（ 参考資料：https://www.yoheim.net/blog.php?q=20190902 ）

__バッチ処理する日時をLaravel内で設定することも可能です。__
こちらをご覧ください
__↓ ↓ ↓__

https://qiita.com/fuku_rin/items/ac0b01c91baa43b71256


## 終わりに
最後まで読んでいただきありがとうございました。
ご指摘、ご意見ありましたらメッセージいただけますとありがたいです。
よろしくお願いします。

## 参考資料
Laravel バッチ処理の実行
https://qiita.com/hotate_chan/items/05f67096d8080b79390d

Laravelでバッチ(コマンド)処理を作成する方法のまとめ
https://codelikes.com/laravel-batch-command/

Laravelのタスクスケジューラを使う
https://qiita.com/toontoon/items/777c427345780411da8b
Xcodeカラーの設定方法

今回は前にXcodeを触っていて再び触った時に忘れていたことがあったので、すぐ思い出せるように自分用のメモとなります。

Xcodeでカラーの設定方法です。
Xcode Version 14.2

# Xcodeでカラーの設定方法

Assets.xcassetsを開きます。

右クリックでNew Color Setをクリック

カラー名を入力する。
![スクリーンショット 2023-01-15 13.25.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/0c014d6d-c3aa-1c58-5bd6-d9a4f95992ca.png)

右側の一番右のアイコンをクリックする。
![スクリーンショット 2023-01-15 13.29.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/5645fe13-8d8d-674e-7d5b-b8cb873617c1.png)

カラーの設定したい方をクリックする。
![スクリーンショット 2023-01-15 13.29.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/2f37b890-cae7-e730-f98a-ea17f8bec2f5.png)

右下に画像のようなのが表示されるので色の設定をします。
![スクリーンショット 2023-01-15 13.31.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/d4963d2f-6e81-55a5-ded0-3b91aa332678.png)


以上です。
マイクラチュートリアル2 階段

``` lua
for n = 1, 2 do
  for n = 1, 4 do
    turtle.forward()
    turtle.placeDown()
  end
  turtle.forward()
  turtle.turnLeft()
  turtle.forward()
  turtle.turnLeft()
  for n = 1, 4 do
    turtle.forward()
    turtle.placeDown()
  end
  turtle.forward()
  turtle.turnRight()
  turtle.forward()
  turtle.turnRight()
end
```
C言語のポインタについて個人的学習メモ

## Summary

2022年前半にコンピュータサイエンス初学者としてCS50を一通り実施。すべて無料で初学者向けの大学の授業を受けられるという素晴らしいサービス。そのなかで、Week1-5はC言語、Week6以降はPythonを学ぶのだが、個人的に躓いたC言語のポインタについてメモ

## 内容

### ポインタとはなにか

C言語のポインタ(pointer)とは、データを指し示す（参照する）値で、データが格納されているメモリの位置（メモリアドレス）のこと。（人を指す「人差し指」は英語で pointer finger、人差し指で「あの人です」と人を指し示すことができる）
ポインタ変数はメモリアドレスを格納できる変数で、データがどこにあるかを指し示すことができる。

```c
int c =3;     // int変数cを宣言し、値として3を格納
int *p = &c;  // ポインタ型変数pを宣言し、変数cのメモリアドレスを格納 (0x0eff1018のような値)
```

変数`c`はint型変数として定義され、変数の値としてint型データ`3`を格納している。
変数`p`はint型データを指し示すポインタ型変数として定義され、`3`が格納されている変数`c`のメモリアドレスを格納している。(ポインタ変数の定義方法は変数名の前に`*`を指定し、変数のメモリアドレスは変数名の前に'&'を指定する) 
変数の値を参照するとき、変数名の前に`*`を指定することでポインタ変数の参照先データを表すことができる。`*p`の値は`3`となる。
（`*`を付けない単なる`p`の値は上記コメントに書いた0x0eff1018のような値）

## なぜ必要なのか

そもそもコンピュータとはバイナリコードを実行して動いてる（バイは2、バイナリは2進数）
バイナリコード：0101010…
これはなぜかというと、コンピュータがもともとは0、1の入力に合わせて出力を変える論理ゲートによって作られ、論理ゲートの集合体がレジスタ・カウンタ、そしてCPUとなっている。そのため、なにかデータを保存するときも例えば日本語や数字をそれぞれバイナリに変換した上で、CPUの特定の場所に保存を行っている。その場所を示しているのがポインタである。
逆に保存する場所がない、となるとメモリ不足となりCPUは処理を行えない(スタックオーバーフロー)。PyothonやJSなどコード実行におけるメモリの割当を自動で行うため、気にしなくても良いが、C言語は自分でメモリを指定し場所を確保する必要がある。

## ポインタによってできること

データに直接触れることなく(例えば関数の外などから)データの内容を操作することが可能

ポインタを使うことによりData Structureを作成、操作することが可能

特に後者のデータストラクチャについては最初理解が難しいが、データを効率的に読み込み、保存、利用(検索など)するためのデータ保存方法と理解した。代表的なData Structureは4種類ほどあり、Linked DataやHash table、B-treeなどがある。なぜポインタが関わってくるかというと、例えばLinked listでは一つのデータの中に次のデータの位置を示すポインタを入れておくことにより、データごとの順序を作ることが可能。

## 躓いたポイント

ポインタが何を示しているかはおおよそ分かるが、その具体的な使い方やなぜ必要なのか、がはじめ全く理解できなかった。そもそもメモリを割り当てる、Data Structureを作る、というのが他言語だと自動化されていることも多く、その理解からする必要があった
ただしこの理解は、Conputer Scienceをさらに学んでいく上でもとても有益だったため、個人的には非常に良い学びであった


## 学習に当たり参考にしたサイト

1. CS50 
2. Youtube 河口研チャンネル・Kawaguchi Lab
  https://www.youtube.com/watch?v=t9DpkD1zHPw
Django REST frameworkでローカルの画像を返すAPIを作る

# 概要

Django REST frameworkで画像を返すAPIを作成した。

# 実装

- macOS Catalina(v10.15.7)
- Python: 3.8

## 開発


はじめに、画像を保存するパスを指定する。例えば`media/`に保存する場合は、下記のように指定する。

```python:settings.py
MEDIA_ROOT = os.join(Path(__file__).resolve().parent.parent, 'media')
```

画像を取得するAPIのエンドポイントを設定する。今回はエンドポイントを`api/v1/image`に指定する。

```python:urls.py
from django.urls import path

from .views import ImageSet

urlpatterns = [
    ...省略...
    path("api/v1/image", ImageSet.get_image),
]

```

`view.py`に画像を返す処理を作成する。`media/${画像ファイル名}`に保存されている画像に対して、`/api/v1/image?image_url=${画像ファイル名}`で画像のパスを指定して、画像を取得できるようにする。


```python:views.py
import os

from django.conf import settings
from django.http import Http404, HttpResponse
from rest_framework.decorators import api_view
from rest_framework.request import Request

class ImageSet:

    @api_view(["GET"])
    def get_image(request: Request):
        # image_urlのクエリパラメータから画像のパスを取得する
        image_url = request.query_params.get("image_url", None)
        if not image_url:
            return Http404
        file_path = os.path.join(settings.MEDIA_ROOT, receipt_url)
    
        if not os.path.exists(file_path):
            return Http404
    
        with open(file_path, "rb") as fh:
            response = HttpResponse(fh.read(), content_type="image/png")
            return response

```

# 動作確認

`settings.py`に指定した`MEDIA_ROOT`(今回であれば`media`パス)にテスト用の画像を保存する。

- `media/test_image.jpg`


その後、下記のURLにアクセスして画像が表示されていることを確認する。


- http://localhost:8000/api/v1/image?image_url=test_image.jpg
マイクラチュートリアル1の解答コード 家の建築

```lua
turtle.up()
for n = 1, 5 do
  for n = 1, 4 do
    for n = 1, 5 do
      if turtle.getItemCount() == 0 then
        for n = 1, 16 do
          turtle.select(n)
          if turtle.getItemCount() ~= 0 then
            break
          end
        end
      end
      turtle.forward()
      turtle.placeDown()
    end
    turtle.turnLeft()
  end
  turtle.up()
end
```
windowsのキー割当てを変更してみる

# 目的
中古でWindowsマシンを購入しました。
中古なんでスペック優先で選んだので、それ以外のこだわりは妥協しました。
でも、でも・・・キーボードの配列に若干の不満が。
![aDSC_0544.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/7bc84f57-7b3e-c113-1f5b-dd602cee1819.jpeg)
左側のShiftキーを押そうとすると、矢印キーを押しちゃう…誤字だらけ…。

と、いう事でキーボードのレイアウト変更ができ中を調べてみたら
「PowerToys」の「Keyboard Manager」で変更できるとのこと。

# やってみよう！

## 「PowerToys」のインストール

### ダウンロード
https://github.com/microsoft/PowerToys/releases 

Intell PCなので「PowerToysSetup-0.66.0-x64.exe」をダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/a228d068-871b-6f5c-e116-0caaf5b58b9b.png)

### インストール

規約を読んで「Install」を押下する。　※「Options」でインストール先を変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/b115e4ad-f40a-e3b8-bde3-5bfca2c9c421.png)

インストール中に画面操作はありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/b73802a3-83fa-c4bd-94d0-a01a954f7a41.png)

サクッと完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/5bc5c383-edd5-22fb-397f-2bc2624a0d07.png)

アプリケーションが自動起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/a38e2fd7-b1e1-153f-170b-61b1094612e5.png)

## 「Keyboard Manager」を触ってみる

「Keyboard Manager」を選択すると設定画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/606fa3ef-d6c5-3999-065f-165dd619eff7.png)

「設定を開く」を押下したら設定開始です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/3b2e5cc9-eb4e-007b-af93-a7b98cc4907b.png)

今回は「キーの再マップ」を使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/4adbfc14-7830-0ab0-c4b6-d17eccf823ea.png)

「直接入力」を押してキーボードの割り当てを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/bd9dc57a-75b5-b157-7ab9-a6d45766f7a0.png)

キーボード入力を求めてくるので変更するキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/83cd3a18-1dd2-dea5-a517-33381fd19664.png)

今回は「UP」と「右Shift」キーに変更します。
変更したいキーとなる「UP」を押下！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/6568e867-8756-95f6-341a-d732bc29b8b6.png)

割り当てたいキーを押下！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/f5c72be8-44e3-769f-b8ff-941d02f6d547.png)

それ以外のキーも設定していきます。設定が終わったら「OK」を押下して終了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/12ca1504-bfc3-68ce-a81e-ab4c58a4ec5b.png)

これで設定終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/a6c2cbbf-d810-e8e2-1b89-d76153074804.png)

# 結果
設定ができたので試してみました。

## 1つ問題点が発覚。
「UP」の代わりに「右Shift」を押下するようになったので、文章を書くときに5行上に行こうとするとOSのこいつがでてくる（笑）
「簡単操作キーボードの設定～」のリンクを押下して無効にしていく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/ab17b10b-af52-a368-33af-a159b9dcb0a3.png)

「固定キー機能」の「＞」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/266744c3-f4bc-1afc-2d4d-34d5488129fb.png)

「固定キー機能用のキーボード ショートカット」を「オフ」にして完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113634/6368ffb2-6bb5-9ec2-a071-86c643a88f73.png)

## あとは使ってみる
しばらく使ってみます。
LaravelのStorageファサードで発生したエラー

初めて投稿させていただきます。
LaravelのStorageクラスでputメソッドを使用した時にエラーが発生したのでメモに残しておきます。

# 問題

ローカルに保存したjsファイルをSFTPで保存しようとしたところエラーが発生しました。

```
$filePath = 'directory/test.js'
$file = Storage::disk('local')->get($filePath);
Storage::disk('sftp')->put($file,$filePath);
```
エラー文を翻訳してみると「破損したパスが検出されました」
```
Corrupted path detected: { jsファイル内容 }
```

# 解決
原因は単純なことでした。
パスに問題があるということで不要なスペースやスラッシュが入っていないか確認してみましたが見当たらず、少し悩みましたが単純にputメソッドに渡す引数の順番が反対になっておりました。
正しくは下記のようになります。

```
Storage::disk('sftp')->put($filePath,$file);
```

# まとめ
凄く単純なことですが、ファイルの扱いってエラーが発生するとファイルは破損しているんじゃないか？putメソッドでjsファイルは保存できないんじゃないか？など色々考えてしまいますがエラー文をしっかり理解して対応することが必要ですね。

非常に単純なエラーではありますが誰かのお役に立てれば幸いです。

参考リンク
[Laravel 8.x ファイルストレージ](https://readouble.com/laravel/8.x/ja/filesystem.html)
TARアーカイブ作成ライブラリ

世界一シンプルな C# / .NET 向け TAR アーカイブ作成ライブラリです。なんとアーカイブの作成しかできません。その代わりに `unsafe` が不要（C# 7.3 以降）、追加の `DLL` の導入も不要、バニラ C# で動きます。

有名どころのライブラリは Zip・GZip・RAR など複数のフォーマットに対応しているのは良いものの、Zip は既に不要だったり、多機能すぎてあらゆる操作が大仰になっていたりだったので、tar 作成部分だけを既存ライブラリから抜き出しました。

`System.IO.Compression` がいまだに対応していない tar フォーマット、後方互換性のために tar アーカイブの書き出しだけは出来るように、という需要もまだまだあるでしょう。


https://github.com/sator-imaging/CSharp-TarArchiver


# 使い方

`TarStream` を開いて string、byte[] または Stream を書き込むだけで tar アーカイブが作れます。`System.IO.Compression` と組み合わせて `.tar.gz`（`.tgz`）も作成できます。


```csharp
using SatorImaging.TarArchiver;
using System;
using System.IO;
using System.IO.Compression;

public class Sample
{
    static void Main(string[] args)
    {
        if (args.Length == 0 || string.IsNullOrWhiteSpace(args[0]))
            throw new ArgumentNullException(nameof(args));

        // open TAR stream and export as a .tar.gz format
        using (var targz = new FileStream(args[0], FileMode.Create, FileAccess.Write))
        using (var gzip = new GZipStream(targz, CompressionLevel.Optimal))
        using (var tar = new TarStream(gzip))
        {
            // writing data
            tar.Write(@"path/to/the/file.txt", @"Hello, World.");
            tar.Write(@"path/with/multibyte/文字列.txt", @"ひらがなカタカナ漢字");
            tar.Write(@"yet-another-folder/byteArray.txt", new byte[] { 84, 65, 82, 13, 10 });  //TAR[CR][LF]
            tar.Write(@"root.txt", "");
            tar.Flush();  // done in TarStream.Dispose() anyway
        }

    }
}
```


# Unity

Unity 2021.3 でテスト。Unity Package Manager (UPM) を使う場合は以下のURLを。

- Lastest: `https://github.com/sator-imaging/CSharp-TarArchiver.git`
- v1.0.0:  `https://github.com/sator-imaging/CSharp-TarArchiver.git#v1.0.0`


`src/Sample.cs` がある状態だと Unity エディターにメニューが追加され、テストファイルを書き出すためのダイアログが使用できます。

![](https://dl.dropbox.com/s/5qkzw1j4a0ony5a/CSharp-TarArchiver.png)




# TARアーカイブ

ロングネーム対応でちょっとヘッダーが面倒だけど、それ以外は単純。

ヘッダー＋ファイルを書き込んで512kのブロックに足りない部分をゼロで埋める、をファイルの数だけ繰り返して最後に２ブロック（1024k）を 0 で埋めれば終わり。

1MiB を丸ごとゼロで埋める終端表現はかなりダイナミック。


[tar - Format of tar archives - IBM Documentation](https://www.ibm.com/docs/en/zos/2.5.0?topic=formats-tar-format-tar-archives)




--


ヘッダーが固定長だったらスゲー楽に読み込み機能付けられるんだけも。



以上です。お疲れ様でした。
【Swift】csvファイル読み込み時のエラー対処

#### 概要
SwiftのStoryboardでcsvファイルを読み込む際に、
エラーで１時間くらい躓いたので、備忘録を残しておきます。
#### 発生したエラー
```
Unexpectedly found nil while unwrapping an Optional value
```
#### 該当コード 
```
func loadCSV(fileName:String) -> [String] {
        let csvBundle = Bundle.main.path(forResource: fileName, ofType:"csv")!
        do{
            let csvData = try String(contentsOfFile: csvBundle,encoding:String.Encoding.utf8 )
            let lineChange = csvData.replacingOccurrences(of: "\r", with: "\n")
            csvArray = lineChange.components(separatedBy: "\n")
            csvArray.removeLast()
        }catch{
            print("エラー")
        }
        return csvArray

    }
```
[こちら](https://qiita.com/YutaMatsuura715/items/f5d2903637bfee776411)を参考にcsvファイルを読み込もうとしたところ、上記のエラーが発生しました。
（※引用元のコードは正しいです）

エラーの文でググると、
「ファイルパスが間違ってる」「存在しないファイルを開こうとしている」
といった内容がヒットしますが、
何度確認してもファイルに問題はなかったので、なかなか原因がわからず躓いてしまいました。
#### 原因と解決策
原因はファイル作成時にありました。
下の画像のTargetsのところにチェックを入れる必要があり、それをしないとファイルを認識してくれなくなるようです。
![スクリーンショット 2023-01-15 11.27.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113630/eb9efd6c-f9ae-6605-f031-69d2818ed8c0.png)
チェックを入れてファイルを作り直したら、ちゃんと認識してくれました。
スマートコントラクトの脆弱性を理解してBugハンターになろう

## はじめに

この記事ではスマートコントラクトの脆弱性を理解することを目的としています。
Solidityで書かれたコントラクトをもとに14の脆弱性を紹介していきます。
記事の執筆にあたり、以下の方の動画を参考にさせていただきました。

https://www.youtube.com/watch?v=4Mm3BCyHtDY&list=PLO5VPQH6OWdWsCgXJT9UuzgbC8SPvTRi5

ぜひ上記の動画を一度見てからこの記事を読んでいただければと思います。
この記事では各スマートコントラクトの脆弱性についてまとめた記事を一覧としてまとめています。

Solidityスキルを1段階あげたい方やバグ・バウンティに参加したい方、バグハンターを目指している方には参考になるのでぜひ一つずつ読んでいただけると嬉しいです。

## Bug Bounty

Bug Bounty（バグバウンティ）とは「**脆弱性報奨金制度**」という意味で、コントラクトに脆弱性がないか発見することで、報酬をもらうことができます。
Bug Bountyは頻繁に開催されているので、参加を目指してこの記事でスマートコントラクトの脆弱性を学んでいってください。

Bug Bountyについてより詳しくは以下の記事を参考にしてください。

https://chaldene.net/bug-bounty

## Reentrancy Attack

https://chaldene.net/solidity-reentrancy-attack

## OverflowとUnderflow

https://chaldene.net/solidity-overflow-underflow

## SelfDestruct

https://chaldene.net/solidity-selfdestruct

## Private Dataへのアクセス

https://chaldene.net/solidity-private-data

## Delegatecallの危険性

https://chaldene.net/solidity-delegatecall

## 擬似乱数生成の脆弱性

https://chaldene.net/solidity-random

## Dos攻撃

https://chaldene.net/solidity-bug-bounty-dos

## フィッシング攻撃

https://chaldene.net/solidity-bug-bounty-tx-origin

## 悪意のあるコードを隠す方法

https://chaldene.net/solidity-bug-bounty-hide-code

## Honeypot

https://chaldene.net/solidity-bug-bounty-honeypot

## Front Running攻撃

https://chaldene.net/solidity-bug-bounty-front-running

## block.timestampの脆弱性

https://chaldene.net/solidity-bug-bounty-block-timestamp

## extcodesizeの脆弱性

https://chaldene.net/solidity-bug-bounty-extcodesize

## Signature Replay

https://chaldene.net/solidity-bug-bounty-signature-replay

## 最後に

今回はスマートコントラクトの脆弱性についての記事をまとめてきました。
参考になっていれば幸いです。

もし何か質問などがあれば以下のTwitterなどから連絡ください！
普段はSolidityやブロックチェーン、Web3についての情報発信をしています。
Twiiterでは気になった記事などを共有しているので、ぜひフォローしてくれると嬉しいです！

https://twitter.com/cardene777
[TableauミニTips]メジャーの軸をViz上部に配置する方法

Tableauで下記のようなVizを作成した際、「売上」の軸がチャートの下に表示されます。
これが上にあるといいのに、、、と思うことがありますが、書式設定ではできないようです（ディメンションであれば「分析」＞「表のレイアウト」から設定できますが）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1945012/07d1c584-2084-bb2f-de9d-cc9f46809710.png)

軸のタイトルだけであれば、ダッシュボードにしてテキストボックスを上にくっつければ解決しますが、スクロールしてもヘッダを残しておきたいとか、
目盛りも欲しいんだ、とかそういう要件には対応しきれません。

力技かつ「なんだそれだけかよ」って感じですが、二重軸にして無理やり上にも軸ヘッダを作れば解決です。

* 二重軸にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1945012/5750c9bc-c7a0-ea8e-c6c1-525486f1a3ec.png)

* 下側の軸を「軸の編集」から、目盛りなし、タイトルなしにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1945012/050d1c3c-8ca3-89a9-8746-d116e5858f83.png)

で出来上がりです。注意点は
* マーク数が増えるので性能には優しくない
* 下側の軸を「ヘッダーの表示」チェックを外して非表示にすると上も消えてしまうのでこの方法だとダメ
* 下側の軸があった部分のスペースが残る（高さは変えられるが、上側の高さとも同期してしまう）
* スペースが残ることにより罫線も下側にはみ出す
あたりでしょうか。

こんなことやらなくてもボタン一発で上に表示させてくれればいいのに。今後の機能追加を願います。

おしまい
react-rails でレンダリングされないという話

追記：2023/06/11

React のコンポーネントが表示できたりできなかったりしたのは webpacker がおかしかったのが原因ぽい

Rails 7 系からモジュールバンドラとして esbuild がデフォルトで使用されるらしいので全部 webpacker に移行した
&&
node 18 から node 16 にして`bin/webpack`のコンパイルがエラー無しで通るように修正したら治った

Rails 7 系以上で react-rails を使用している場合は webpacker への完全移行をやってみてください

これより下がもとの記事になります。（一応残しておく）

---


# react-rails を導入しようとして詰まった
https://github.com/reactjs/react-rails

このREADME通りにすすめても hellow world component が表示されない。。。

## やったこと

javascript_pack_tag を app/views/layouts/application に記述する

```
<%= javascript_pack_tag 'application' %> 
```


## 結果

表示されるようになった



## 他にやった & 関係ありそうなこと

### node のアップデート

react-rails のインストール手順をやりなおして進めていくと node のバージョンで怒られたので 12 -> 18 に更新した。

これ関係あるかもしれない。もし javascript_pack_tag 指定しても駄目なら node のバージョン見直そう。


## 他にやったこと & 関係無さそうなこと

### turbo をオフにする
詳しい原因はわからないが、悪さしている可能性があるのでやってみた

```
<body data-turbo="false">
```

これで全ページの turbo がオフになる。

でも最終的には turbo オンにした状態でも hello world component が表示されたのであんまり関係無さそう

## 感想

しれっと表示されないみたいな状態なのでとても苦しかった
結局３〜５回目のトライぐらいでやっと表示できた。。。。
PrePoMaxによる片持ち梁の大変形の解析

# はじめに
有限要素法では、変形量が小さく、かつ、材料に生じる応力が弾性域内の場合に線形で解析しますが、それ例外の場合は非線形での解析が望ましいです。ここではPrePoMaxを用いて、片持ち梁の大変形を線形と非線形で解析して結果を比較します。

# やり方
モデルは、断面寸法が10mm×10mm、長さ500mmの片持ち梁で、材料はPrePoMaxのMaterial Libraryに登録されているPOM（ヤング率2600MPa、ポアソン比0.3859）としました。メッシュは最大サイズを2.5mmとして作成し、境界条件は片側の端面を完全固定、もう片側の端面にSurface Tractionとして20Nを加えました。
境界条件を設定したモデルのようすを図1に示します。

<img width="600" alt="スライド1.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729073/370dbae3-54de-187d-e5d2-3cebc6fb3ce4.jpeg">

図1　メッシュと境界条件を設定したモデルのようす

このモデルについて、線形で解析した結果を図2と図3に示します。これらの図には変形前のモデルの形状も載せてあります。線形解析では荷重位置を固定して解析するため、変形後のモデルは伸びた形状となっています。加えて、固定側に比べて荷重側のモデルの厚さが厚くなっており、形状が不自然に見えます。

<img width="600" alt="スライド4.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729073/215d61b0-4b3f-cf73-86c9-9585a11085cd.jpeg">

図2　線形による解析結果（長さ方向の垂直応力）

<img width="600" alt="スライド5.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729073/2bb8d6db-9a59-4658-0d7a-71eabd086c0d.jpeg">

図3　線形による解析結果（たわみ）

これに対して、非線形で解析した結果を図4と図5に示します。変形後のモデルの形状は自然なものとなっています。非線形解析では、荷重位置はモデルの変形に応じて変えていくため、モデルは自然な形に変形していきます。

<img width="600" alt="スライド10.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729073/dcb9ecf6-ad77-5eef-82d9-fca1d3c18014.jpeg">

図4　非線形による解析結果（長さ方向の垂直応力）

<img width="600" alt="スライド9.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729073/2dcbd82c-4acf-cde7-3d2a-19c3754c374a.jpeg">

図5　非線形による解析結果（たわみ）

# 終わりに
非線形解析により、望ましい大変形の形状が得られました。

# 参考
- [やさしく見直すCAE技術　第4回「線形と非線形」](https://www.terrabyte.co.jp/discover/index.php/2019/05/31/post-634/)
【JavaScript】正規表現 RegExp

# 正規表現オブジェクトは何に使われるか
ある文字列が、指定したパターンと部分的もしくは全体的にマッチしているかどうか判定するのに使います。
正規表現オブジェクトは、
```javascript
regexp = new RegExp(調べたいパターン, フラグ);
```
のように記述します。

# 使用例
``調べたいパターン``の詳しい記述方法は[Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp)を参照してください。以下の例では、「Kの後に数字が3つ続くもの(大文字と小文字は区別しない)」の部分マッチングを行っています。
```javascript
var names=[
  "K545",
  "King",
  "K626",
  "K545Mozart",
  "5K545",
  "k545"
]

const regexp = new RegExp("K\d{3}",'i');

names.forEach(str => {
  if(regexp.test(str)){
    console.log(str);
  }
});
```
出力結果は以下になります。
```
K545
K626
K545Mozart
5K545
k545
```
Visual Studio Code内で、サクッとFlutterの新規プロジェクトを作成する方法

今回は「Visual Studio Code」で、Flutterの新規プロジェクトのショートカットの方法について解説です。<br><br>私は普段、プログラミングを独学で進めています。最近はプログラミング言語「Dart」を使って、フレームワーク「Flutter」を用いたスマホアプリの開発に取り組んでいます！


## 参考
[【Flutter】Android Studio をM1 Macにインストールしてflutterの開発環境を作る](https://rutinelabo.com/flutter_androidstudio_m1/)



最初のうちは「Android Studio」というエディタで開発環境を作っていましたが、やはり以前から使っていたVScodeの方が断然使いやすい！！という事もあり、最近はVSCodeとIOSシュミレータでスマホアプリの開発をしています。

<br>`今回は、MacにてVSCodeでFlutterの新規プロジェクトを作成して、ホットリロードまでやってみますので、ぜひ参考にしてみて下さい。`


<br>ターミナルからエディタを起動させることで、ショートカットができます。かなり便利なので、備忘録的なもので、記録しておこうと思います。

* Flutterでアプリ開発をしている方

* VScodeを使用している方



# 開発環境はこんな感じ

そこまで、大きく影響してこないと思いますが、現在の開発環境についても紹介しておきます。Macをご使用になられている方であれば、そのまま次の手順に進んでもらってもOKです。


# 開発環境
* MacBook Air（M1 2020）
* macOS：macOS Ventura
* 使用エディタ：Visual Studio Code
* flutter --version：Dart 2.18.6 • DevTools 2.15.0


また、Visual Studio Codeには、拡張機能の項目に「Dart」と「Flutter」をインストールしておいてくだい。

![CleanShot 2023-01-15 at 10.09.25@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842980/e8891cfe-c4cf-91e1-5316-bdace4da2b24.png)


# VSCodeでFlutterの新規プロジェクトのショートカット方法

<b>それでは、早速Flutterのプロジェクトを作成していきましょう！

<br>わざわざ、ターミナルを立ち上げて、コマンドでプロジェクトの立ち上げをしなくていい分、かなり楽ちんに作業でできます。<br><br>


<b>1.VScode、コマンドパレットの起動

VSCodeのメニューから［表示］＞［コマンドパレット］を選びます。ここでもショートカットキーとして「⌘ ＋ ⇧ ＋ P」を使えると便利ですよ！


![CleanShot 2023-01-15 at 10.15.04@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842980/440fbef1-3b56-5a4f-1ba4-1c9dbc8b600f.png)



<b>2.Applicationの選択

次に「Application」を選択してください。そのほかもあなたがパッケージなど開発環境に応じて、選択するものを変えていただいてもOKです！

![CleanShot 2023-01-15 at 10.17.51@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842980/2825d36c-4553-3bde-28f8-6e15d18f37f4.png)
<b>3.フォルダの選択

今回開発するFlutterのプロジェクトをどのフォルダに保存するかを選択しましょう。私の場合には、「 Flutter」と名前をつけたフォルダに保存していきます。

![CleanShot 2023-01-15 at 10.18.38@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842980/2418ccfc-12b6-d88b-576f-47f4155bfda1.png)

<b>4.プロジェクトの名前をつける

今回開発していくプロジェクトの名前をつけましょう。

お好みのものでOKですが、自分のフォルダの整理がしやすかったり、一目で何のアプリかを分かりやすいものの方がいいでしょう！


![CleanShot 2023-01-15 at 10.18.49@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842980/475c361c-2bfb-bd5e-a5c8-efd6da284d6a.png)


そうすることで、Flutterプロジェクトが用意されます！


![CleanShot 2023-01-15 at 10.34.07@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842980/ea670baf-5eb2-aa36-3770-5f4a8f42ce1b.png)



[st-step step_no="5"]アプリを起動させる[/st-step]

最後に仮想端末をアプリを実行してみましょう。右下の項目を選択し、今回プロジェクトを実行する端末の種類を選びましょう。


<b>私の場合にはiOSシュミレータを立ち上げました。

端末が用意できたら、最後に「F5」キーで実行してみましょう。Flutterの場合はカウンターアプリが立ち上げります。


# まとめ：VScodeでサクッとFlutterを作成使用！！

以上、Visual Studio Code内で、サクッとFlutterの新規プロジェクトを作成する方法でした！<br><br>
プロジェクトを立ち上げる際に、わざわざターミナルを開く必要がないので時短にもなりかなり使いやすいかと思います。基本的にはあなたが使いやすいエディタをとことん極めたらいいかと思いますので、他におすすめのものがあれば、メッセージなどでも教えていただけると嬉しいです。
PowerBIよりエクスポートされるファイル名をdata.csvから変更する

1.視覚化→ビジュアルの書式設定→全般→タイトルを選択。
2.タイトルテキスト内にタイトルを指定する。
3.エクスポートしてみるとファイル名がdata.csvより変更されている。

ん？タイトルは表示したくない？
あーそれは無理なので、文字の色を背景色と同じようにして隠すのがいいかもねー
JSTQBのALを申し込むまでにはまった2つの罠

# 最初に
私は現在3年目を迎えたQAエンジニアです。
JSTQBのAL(アドバンストレベル)の受験資格を満たしたので申し込んでみたのですが、
2度リジェクトされ、1度アカウントロックされてしまいました。
今後皆様に同じ道を通らないようにしてもらうために記載します。

※記載内容は`January 15, 2023`時点のものですので、お気を付けを。

# まずは登録する
### このURLから登録をスタート。
https://qualification-jstqb.com/examinee/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1102019/45fd7e24-aada-48af-f0b7-5f060a74e2c1.png)

### 経歴審査申請をする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1102019/c51ef6a6-3555-7442-8096-76c2fda776a2.png)

ここが罠その1です。
残念ながら、自分は通過してしまったので当該ページを表示することが出来ませんでした。

ポイントはこれ
**たとえ同じ会社に勤めながら複数案件を経験していたとしても、案件ごとに毎回同じ所属会社の情報を入力する必要がある。**
(同じ会社に所属しているから全部まとめて一つの枠に書いちゃおう、はダメ。)

これを行わないと、こんなメールが来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1102019/ed69f083-6a08-3abb-dfed-722ed5f736b9.png)
QAの立場からすると、「づつ」ではなく「ずつ」だよ、というバグの起票を行いたいのですが、まあそんなことより内容がわかりづらい。。。
自分は、CBTに移る前の経歴申請書を見てようやく意味を理解することが出来ました。
要は、自分で入力するデータはこんな感じに埋められているんだな、と想像することが大事でした。
これが経歴書の記入例です：https://www.juse.or.jp/sqip/qualification/jstqb/file/al_career_sample.pdf


### 試験を申し込んで、決済する
晴れて審査に通過したら、試験を申し込みますが、ここにも罠があります。
試験会場を選び、日程を選択したあとの、`最後の決済情報を入力する画面`です。
(ここも申し込み後には表示できませんでした。)

ポイントはこれです
**たとえ、入力必須と書いてある項目でも、入力してはいけないものは入力してはいけない**

確かに、申し込みスタートの時点でこんな注意書きはありました。
```
ご注意(支払情報と請求情報の入力について)
試験予約を進めますとクレジット決済画面(支払情報と請求情報の入力)に遷移します。
この画面では、“支払情報“と“請求情報“を入力する場所がありますが、
請求情報は変更せずに支払情報のみ入力してください。
請求情報を入力されますと正しく処理がされずエラーとなる可能性があります。
複数回エラーが発生するとセキュリティのためロックされ、
ロック解除には申請が必要になります。
```
しかし、人間の性として、入力必須と書いてあったら、入力必須なんだなー、と思ってしまうじゃないですか。
これが罠その2です。
たとえ請求情報に`必須項目`と記載があっても入力してはいけません。
5回目くらいのチャレンジでアカウントロックされてしまいます。

ロック解除はホーム画面右上の問い合わせから行うことが出来ます。

# 最後に
JSTQBのテストは最近コンピュータ方式に変わったので、今は色々不具合がありそうです。
自分はまだ受験してないので、頑張って勉強します。
皆様のご健康とご多幸を願って、締めます。
Linux学習記録③【tune2fs】【syslog】【/etc/rc*.d】

# 復習！モジュールとは
個人的にはポケモンでいうところの「わざ」のようなものだと考えています。

わざマシンを使ってフシギバナに「じしん」を覚えさせたり、ラグラージに「れいとうビーム」や「ふぶき」を覚えさせたりと、、また忘れさせて別のわざを覚えさせることも可能ですよね。

ちなみに公式ドキュメントでは「メインとなるカーネルのプログラムに組み込んで使用する小さなパーツのようなプログラム」だと書いています。

新しいデバイスや機能を追加した時に対応するモジュールをカーネル本体に取り付けて利用します。

モジュールを利用せずとも使用できるが多数のプログラムをつけてしまうとカーネルのサイズが大きなってしまうため

モジュールを利用し必要なデバイスや機能だけをつけることができる。そのため、ポケモンでいうところのわざと覚えた方が良い。

参考ドキュメント

https://linuc.org/study/knowledge/343/


# 復習！ファイルシステム
PC内でのデータは物体ではないのでわかりやすい概念としてファイルとして可視化させている。

linuxではHDDやCD-ROM、マウスなどのデバイスもファイルとして扱う仕組みとなっている。

設定を変える時もテキストベースでファイルを開いて編集して設定変更を行う。

またファイルシステムではVFSという仮想のファイルシステムを使用しており、
exit2、exit3といったファイルシステムに入出力するインターフェースの役割をする。

現在のLinuxではext4までありスタンダートとなっている。

ちなみにこのファイルシステムがないと「セクタ」というディスクの区画を指定して取り出さなければならない。
このような操作は面倒なのでファイルシステムが存在する。

参考ドキュメント

https://lpi.or.jp/lpic_all/linux/intro/intro10.shtml



https://eng-entrance.com/linux-make-filesystem


# tune2fsについて
exit2、exit3ファイルシステムのパラメータを調整するコマンド、またLPIC201の問題集にもよく出てくるコマンド

-j:更新記録を記録するexit3ジャーナルをファイルシステムに追加する

-C 回数:マウントした回数を手動で設定

-L:ボリュームラベルを設定

-U:UUIDを設定


参考ドキュメント

https://atmarkit.itmedia.co.jp/ait/articles/1803/23/news031.html

https://tech.pjin.jp/blog/2017/02/06/the-questions-of-lpic-part2-the-origin-of-commands-no6/


# syslogについて
結論から言うとシステムの活動記録。
様々な事象をログファイルに記録したり他の機器やプログラムからの出力を指定した出力先に送ることが可能である。

ネットワーク機器からのログをサーバに収集するなどの用途で使用される。

何かエラーが起きた場合やこれまでの出力を確認をしたい場合は必ず使用する常用コマンドだと覚えておくこと。

またrsyslogもよく使われる。
rsysrogは各種デーモンやプログラムからログを収集しファイルを出力する機能を持つ。

使用するには、、、
①モジュールの読み込み
②使用する作業ディレクトリの指定
③書式設定
④読み込みを行う設定ディレクトリの指定

これらの準備を行ってログの出力元と出力先を設定する。（詳しくは参考ドキュメント）

ちなみにこれらを設定するにはファシリティ、プライオリティ、出力先の設定をする必要がある。

■ファシリティ：メッセージの生成元のことを指す。

■プライオリティ：出力メッセージの重要度のことを指す

■出力先：出力先のことを指す


ファシリティでauthやcron,deamonなどのログの生成元を選択する。

プライオリティでメッセージの重要度を決める。ほとんどのログは重要度が低いものになる。たくさん出てしまうと重要度の低いログで埋もれてしまうのでプライオリティを設定して見つけ出せるようにしておく。

出力先はコンソールに出力したり（/dev/tty1）ログファイルに出力することも可能（/var/log/message）


参考ドキュメント

https://www.wantanblog.com/entry/2021/01/09/190904#syslog


# tcpdumpコマンドについて

tcpdumpコマンドはネットワークを流れるパケットをキャプチャ、フィルタリングを行うためのソフトウェア。

Aから流れてきたパケットがBというところまで到達しているなどの追跡を行うGPS的なものだと覚えておくこと。

-iのオプションでキャプチャを行うネットワークインターフェースを指定したりする。



参考ドキュメント

https://linuc.org/study/samples/200/


# /proc/bus/pccardについて

pcmiciaデバイスの情報が描かれるサブディレクトリ。
pcmiciaはPCカードと呼ばれるデバイスの１つ。パーソナルコンピュータのメモリーカードのようなもの

参考ドキュメント

http://www.linuxcertif.com/man/5/proc/ja/

# /etc/rc*.dについて

/etc/rc*.dは０から6まであり７つのディレクトリに分かれている。
rcに続く数字はランレベルを表している。
このディレクトリに収められるファイル名の特徴として
Sから始まるものとKから始まるものがある。

Sはstart、サービス開始の処理が行われてKはサービス停止の処理が行われる。

アルファベットの後ろにある二桁の数字はスクリプトの実行順を決めている。

参考ドキュメント

https://linuc.org/study/knowledge/515/


他にもこんな記事書いています！


https://qiita.com/mmurm/items/38a4dd6269f3eb54b1bf


https://qiita.com/mmurm/items/c8fb19cc757ba3727f02


https://qiita.com/mmurm/items/6863f8409ee37dfbbe2d

https://qiita.com/mmurm/items/f548de5c951bf822a5ff
データドリブン組織になるための要素

## データドリブンとは？
データドリブンとは、経験や勘だけでなく、<strong>収集したデータをもとに意思決定をする手法</strong>です。しかし、データドリブンは経営層など、一部の人だけが使う手法ではありません。
経営層だけでなくビジネスアナリスト、セールスマネージャー、人事のスペシャリストなど、組織内のあらゆる立場にいる人々の誰もがデータを用い、より良い意思決定を行っていく必要があります。

### データドリブンによる効果
#### 1. 経験や勘に根拠を与え再現性が生まれる
<dl>
<dd>これまでのビジネスにおける経営判断の大きな根拠となっていた経験や勘に、データによる根拠を与えられるようになったことは大きなメリットといえます。なぜなら、経験や勘は個人の能力に依存する要素であり、どうしても再現性が低くなってしまうリスクがあるからです。
しかし、経験や勘がデータの観点から裏づけられれば、担当者が変更したとしてもデータをもとに同様のロジックで意思決定できるようになります。データドリブンを実践することは、業務の属人化を防ぐことにつながります。
</dl>

#### 2. ボトルネックを特定できる
<dl>
<dd>ビジネスにおいては、思わぬところにボトルネックが潜んでいることがあります。一見してボトルネックがどこにあるかわからない場合、それを見つけ出して解決に導くには、どうしても時間がかかってしまいます。 しかし、データを収集して分析することができれば、思わぬところに潜んでいたボトルネックを早期に発見することができるのです。
よりパーソナライズされたマーケティングやサービスが可能になる
消費者のニーズが多様化している現在では、できるだけ一人ひとりに最適化された商品やサービスを提供することが、他社との差別化につながります。 消費者に関するさまざまなデータを収集し、それらのデータをマーケティングや商品開発に活かすことで、よりパーソナライズされたサービスが可能になるのです。
</dl>

### 具体的な事例
+ 事例1: ***Amazon***
Amazonは、顧客の購買履歴や検索履歴を分析することで、個々の顧客に最適な商品を推薦するシステムを構築しています。このデータドリブンなアプローチにより、顧客満足度が向上し、売上も増加しています。
+ 事例2: ***Netflix***
Netflixは、視聴データを活用して新しいコンテンツの制作や配信を行っています。視聴者の好みや視聴履歴を分析することで、人気のある番組や映画を予測し、視聴者に最適なコンテンツを提供しています。
+ 事例3: ***Starbucks***
Starbucksは、店舗の売上データや顧客のフィードバックを分析することで、メニューの改善や新商品の開発を行っています。データに基づく意思決定により、顧客のニーズに応える商品を提供し続けています。

### データドリブンを実現する要素
データドリブンな組織になるためには、ツール導入だけで実現できません。また優秀な人材を採用しただけでも同様です。理想とする組織になるためには、以下の3要素が全て揃っている必要があります。

+ ***Data Culture***：業務や経営に必要な活動にデータを重視する行動やマインド
+ ***Data Literacy***：ツールを利用してデータ分析や可視化を行えるスキル・知識
+ ***Data Infrastructure***：ツールやシステムがネットワークに繋がれ、最新のデータをいつでも使える状況

### Tableauによるデータドリブンへのアプローチ
データドリブンへの変化をサポートしてくれるのがTableauです。Tableauはビジュアル分析プラットフォームです。Tableauが変化を促進すると言える理由は下記の通りです。
+ フルパッケージな機能を持つため、データ準備に始まり可視化、分析、ガバナンスまでと企業活動に必要なことをTableauで一貫して行える
+ ユーザーフレンドリーな操作で機械学習や統計などの高度分析も簡単に実践できる
+ 盛んなコミュニティ活動を通して、分析や可視化手法を高め続けることができる
+ 簡単な操作や美しいビジュアライゼーションを通して、ユーザーの好奇心や満足を高めることで、データがより身近なものに感じることができる

### まとめ
+ データドリブンは、データファーストで意思決定を行うこと
+ データドリブンを実現するには3要素が揃っていること
+ Tableauは組織がデータドリブンに変化することを強力にサポートする


### 参考
データドリブンとは？注目される理由やメリット、注意点などを解説 (tableau.com)
データカルチャー | テクノロジーとカルチャーでビジネス上の意思決定を促進 | Tableau
Tableau（タブロー）とは？｜Tableau
Tableauについて簡単に説明


# タブローとは
Tableau はデータドリブンな課題解決を変革し、組織のデータを最大限活用することを可能にするビジュアル分析プラットフォームです。
百聞は一見に如かずではないですが、こちらのリンクの動画を視聴ください。
https://www.tableau.com/ja-jp/why-tableau/what-is-tableau#video

### 製品特徴
+ 美しいビジュアライゼーション
+ 直感的な操作を可能とするUX
+ AIや統計等の分析を簡単に行える
+ 様々な外部ソースとの連携

### 製品体系
+ Tableau Desktop
+ Tableau Cloud
+ Tableau Prep
詳細、以下イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408049/27298b87-3cb4-c200-f38d-95f5809c0179.png)


### 価格体系
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408049/cf2c4cce-7345-ca95-214d-af9b42df5747.png)


### コミュニティ活動
Tableauは他のBIツールと比べて、ユーザーコミュニティの活動が世界的に活発に行われており、コミュニティ参加を通じてユーザーは、Tableauスキルの向上だけでなく、分析力やビジュアライゼーションの質を高めることが出来ます。
参加者の声をお聞きください
https://www.tableau.com/ja-jp/why-tableau/what-is-tableau#content-319140

上記リンクはグローバルコミュニティの活動ですが、日本でもコミュニティは盛んに行われており、このコミュニティに参加することで、Tableauの使い方だけでなく、データをする上でのマインドやビジュアライゼーションの方法等のデータカルチャーに触れることが出来ます。

### タブローの変遷
2003年にTableau softwareがシアトルで設立。
もともとはスタンフォード大学で米国防総省のバックアップのもと1997年に研究開始され、2003年に同大学のメンバーで会社設立された。2017年には売上高＄877Mを達成する。
2019年にSalesForceに買収され、同社の一部となる。

### 参考
Tableau プラットフォーム | 世界トップクラスの分析環境
PowerPoint Presentation (tableau.com)
Tableau（タブロー）とは？｜Tableau
開発者に調査を丸投げしてはいけない話

　「数字が合わない、調べろ」
外国為替予約の現在残高と、期間中毎日積み上げた残高の合計（＝積数）数値が合わないそうだ。
　そういう場合は「このデータが積数に反映されてないようだ」程度までは調べてから言ってほしいものだが「システムが悪いんだろう」と一方的に押し付けてきた。

　当時の関係者はとっくに引退している時効案件なので今更であるが、他山の石として。
　同じように丸投げされた人が「こんなことになった例がある」と抗弁する材料として。

　そのとき最若手だった私は素直に対応した。200万件のレコードをSQLを打ち込んで絞ってゆく。途中からトランス状態になって打ちまくった。

　どうやら要因となるレコードが絞り込めた。見てみるとわかりやすい特徴があった。
　通常、企業はドル円相場の変動リスクを回避するために為替予約をしておくものだが、してなかったんだな。どうやら相場がいい方に動けばそのまま、悪い方に動けば銀行に「遡って為替予約しておいたことにしておいて」と頼んで（命令して）損をしないようにする。
　これなら残高には跳ねるが、予約期間中に毎日残高を合計することによって算出される積数には反映しない。（一晩でも経過すれば夜間バッチで積数を調整するのだけれども。）

　これで問題解決！なのだがそれでいいのか？
　事務ミスなら仕方ないが、
明らかに利益供与だろう！
　しかも、北緯１度のひとつの支店に集中。相手企業も同じ名前が並ぶ。実は西半球と東半球の境目にほど近い支店にも一つだけあったが、相手の企業名は同じ。つまり、意識して組織的にやっている。

　とりあえず「これが違うよ」と一覧を送ったが、お礼すら言ってこない。
　別件で電話で話したとき「こないだの積数が違う件、どう？」と問うと
「ああ、あれはもういいから」。
でスルーされた。
　なるほど<strong>もういいんだな</strong>、許可はもらったものとして、ウン十年の時を超えて警告を発するもの。
　システム開発者に調査を丸投げするととんでもないものがヒットするという実例だ。
　当時新聞社にタレ込めば大きなネタになったのを黙ってたんだから感謝してくれ。
　そもそも「ごめん、あれ黙っといて」という一言さえなかったんだ。

　なので後輩たちよ。「システムが悪いんだろ」と無茶振りされたらこういう実例を出して回避してくれたまへ。しかし、システム部門をこうやって軽視するから・・・せめて懐柔して口止めしろよな～汎用機でJCLをサブミットしながら検索結果を待つ、というのがどれくらい大変か、想像できない人がほとんどだろうが、相当の腕だし、推理力だぞ・・・きちんと敬意を払わないとシステム障害で有名になっちゃうぞ。

　しかしあの会社、為替予約オープンで差益を稼いでいた取引があったわけだけど、社として承認していたのだろうか？してないんだろうなあ、儲かるときだけオープン／損しそうなときは予約、なんて明らかに不自然だろ。内部監査があれば一発である。
　なんとなく帳簿の上では全部為替予約しておいて、差益が出たときは未計上にして、ようするにポケットに入れていたような気がする。そのほうが自然だ。
　あくまで推測であるが。

　システムとは関係ないけど、国内メーカーの時計というとそれ以来CASIOしか買っていない。SEIKOは高いから。もう一つの有名どころを買わないのは、ダーティーなイメージを持ってしまったからだ。さすがに名指しまでは避けよう。
Rustでファイルに切り出したコードをモジュールとして呼び出す

Rustでファイルに切り出したコードをモジュールとして呼び出す方法

## まとめ

```rust
mod ファイル名  // 例 mod sample

fn main() {
    ファイル名::関数名;  // 例 sample::hello();
}
```

## 詳細
例として、標準入力された値を文字列として返すモジュール
### ファイル

```
src/
  ┠ main.rs
  ┗ read_buffer.rs
```

### コード

```rust: src/read_buffer.rs
use std::io;

pub fn return_as_string() -> String {
    let mut buffer = String::new();
    io::stdin().read_line(&mut buffer).expect("Failed to read line.");
    return buffer.trim().to_string();
}
```

```rust: src/main.rs
mod read_buffer;

fn main() {
    println!("{}", read_buffer::return_as_string())
}
```
※ src配下のファイル名を `mod XXX` として呼び出すことができる
### 実行
```bash
$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/read-buffer`
Hello!  # ← Input
Hello!  # ← Output
```
Pre-attentive attributeなビジュアライゼーション

# Pre-attentive attributeとは
Pre-attentive attributeは脳の機能の一つです。ここは、空間記憶(Spatial Memory）の部分で、私たちが無意識に見たものを理解するのに影響します。
脳には大きく2つの機能に分かれています。
 1\. 本能：この領域は、迅速、自動、衝動的、無意識、感情的、ステレオタイプです。
 2\. 理性：このシステムは遅く、意識的で、反射的で、分析的であり、複雑な決定を下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408049/ddc55126-c2f5-88d1-9672-5fb07cf1cdc3.png)

2つとも人間には必要な機能だが、2は身体的負荷が高く、日常生活の大部分を1をもとに生活している。
Pre-attentive attributeは脳の1の部分にリンクしているため、Pre-attentive attributeをよく理解することで、人間が無意識に目を引く場所をコントロールすることができる
Pre-attentive attributeを利用して、ビジュアライゼーションを通してあなたが相手に伝えたいことを理解してもらうことができる
これを理解してビジュアライゼーションをデザインすることは、データ分析、認知科学、広告、教育、ゲームデザイン、写真、ソーシャルメディアデザイン、その他多くの職業に求められる。

# Pre-attentive attributeの種類と比較
Pre-attentive attributeは形状、色、位置の大きく分類される。さらに、形状は長さや幅、大きさ等の8種類、色は2種類に細分化される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408049/459e5aed-da1b-730f-0cac-ada8ed0ea029.png)
また、Pre-attentive attributeの3つの分類に強さの順序をつけるならば、ケースバイケースなところはあるが、位置＞色＞形状の順番となる。

# Pre-attentive attributeの使用例
Pre-attentive attributeを利用してデータビジュアライゼーションを改善する例を示します。以下は売上と利益のテーブルです。この表の中から最大値と最小値を見つけるには全ての数値に目を通す必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408049/b27945f8-2e32-4a03-54f7-be3f0dc6a436.png)
表形式データ


次は表形式データの負の値だけに色をつけることで赤字を強調してみます。赤字の数を数える場合は有効かもしれませんが、それ以外の場合はやはり全データを確認する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408049/cabaf927-da41-f989-a21f-7c60f765f754.png)
赤字データに色をつけたテーブル


次は、売上と利益のそれぞれに大きさに応じたグラデーションを設定して、感覚的に値の比較しやすくしています。しかし、売上と利益を区別することが簡単ではありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408049/9a72c800-cbbd-6fd5-c4ea-83be976a6be8.png)
色のグラデーションによる売上と利益のテーブル

最後に、売上を長さで、利益を色で表現したビジュアライゼーションを示します。相手はすぐに最高の売上と最低の利益を見つけることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408049/da295e79-88a8-5e51-3621-d6645a3372ac.png)
売上を棒グラフで、利益を色で表現したビジュアルデータ


# まとめ
Pre-attentive attributeは脳が無意識に物体を認識、理解する部分であり、この特性をビジュアライゼーションに活かすことで、自分の伝えたいことを相手にスムーズに理解してもらうことができます。

# 参照
Designing with your brain in mind — Using Pre-attentive Attributes | by Elias Nordlinder | Medium
Preattentive Attributes of Visual Perception | DataViz | Tableau Public
ビジュアル分析を選ぶ理由- タブロー (tableau.com)
Googleプロジェクト管理：企画書とプロジェクト憲章の違い

# はじめに

わたしが [Google プロジェクト管理:プロフェッショナル認定証で得られた素晴らしい体験][google]を、要点をまとめ小さく分割して、わかりやすく簡潔に紹介していきます。

興味があれば、ぜひ ***"Google プロジェクト管理:プロフェッショナル認定証"*** を受講してみてください。

[google]: https://qiita.com/mapami/items/317ae776a2268fd54c8f

https://jp.coursera.org/professional-certificates/google-project-management

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/a1cc3407-8d1d-b37c-1d3a-50bf9ea5159f.png" width="800">

# ドキュメンテーション

ドキュメンテーションはプロジェクトマネージャーの重要な役割の一つです。

あなたのチームは、プロジェクトの特定の分野に深く取り組んでいるかもしれませんが、プロジェクトの異なる分野すべてを認識し、コミュニケーションをとっているのは、チーム内であなただけであるかもしれないのです。もし、ある決定がチームのメンバーのタスクに影響を与えるのであれば、彼らはそれを知る必要がありますよね？

#### 価値

- 明確で一貫性のあるドキュメンテーションは、透明性と明確なコミュニケーションを確保することができます。ドキュメンテーションは、プロジェクトの舞台を整えるのに役立ちます。
- プロジェクトの初期に行われた決定を保存し、プロジェクトのライフサイクルの後半に参加するチームメンバーにとって参考となる情報を提供することができます。
- 決定事項を文書化することで、それまで考慮しなかったタスクやスケジュール、コストなどを発見することができます。
- プロジェクト終了後に見直すことができる歴史的な記録を提供します。学んだことを将来に生かすことができます。

# 2つのタイプの文書

### プロジェクト企画書（Project proposal）

プロジェクト企画書は、プロジェクトの一番最初に作成される文書です。

この文書の目的は、***<font color="MediumVioletRed">プロジェクトを開始するべきだと関係者を説得する</font>*** ことです。

そして、通常、組織のシニアリーダーが提案書を作成します。プロジェクト企画書は、望ましいゴールとインパクトを理解するための格好の出発点となります。

### プロジェクト憲章（Project charter）

***<font color="MediumVioletRed">プロジェクトを明確に定義し、目標に到達するために必要な詳細をまとめた正式な文書</font>*** です。プロジェクト憲章は、プロジェクトを整理し、何をすべきかの枠組みを設定し、その詳細を他の人に伝えるのに役立ちます。

# 企画書と憲章の違い

### 作成タイミング

- 企画書は、プロジェクトライフサイクルの中で、プロジェクト憲章よりも早い段階で作成されます。企画書は、プロジェクトを進めるために会社に影響を与え、説得することで、開始のフェーズをスタートさせます。
- 憲章は、開始フェーズの最後に作成されることが多いです。しかし、その目的は、プロジェクトの重要な詳細をより明確に定義することです。

### 使用タイミング
- 企画書は、プロジェクトの初期段階でのみ使用されます。
- 憲章が ***<font color="MediumBlue">プロジェクトの全期間を通じて参照すべきポイント</font>*** として機能します。

# プロジェクト憲章について

### プロジェクトの利益

プロジェクト憲章は、***<font color="MediumVioletRed">プロジェクトの利益がコストを上回る</font>*** ことを明確にするものです。

[以前紹介したコストベネフィット分析][ref1]を行う際に、いくつかの質問をすることがあります。

- このプロジェクトは、どのような価値を生み出すのか？
- このプロジェクトによって、私の組織はどれだけのお金を節約できるでしょうか？
- このプロジェクトのために、人々はどれくらいの時間を費やさなければならないのか？

[ref1]: https://qiita.com/mapami/items/3cd148984ebacc70a352

これらの質問に対する答えを憲章に記載することになります。このような情報を含めることで、あなたとステークホルダーがプロジェクト価値に同意していることを確認できます。


### プロジェクト憲章の承認

また、プロジェクト憲章は、あなたとステークホルダーがプロジェクトの詳細について合意するのを確実にするのに役立ちます。プロジェクト憲章の承認は、経営陣の支持を意味し、また、プロジェクトが組織のニーズに合致していることを確認するための重要なステップとなります。ステークホルダーとプロジェクトスポンサーがプロジェクト憲章をレビューし、承認した後、あなたはプロジェクトを進める権限を得ます。

### 形式

プロジェクト憲章にはいくつかの形式があり、プロジェクトや組織によって異なる情報が含まれています。また、チャーターの情報は、読者や特定のステークホルダーのニーズに応じて調整されることもあります。

- マーケティング担当役員をステークホルダーとしてプロジェクト憲章を作成する場合、プロジェクトが組織のブランドにどのような影響を与えるかについて憲章に記載することが考えられます。
- ステークホルダーが最高技術責任者であれば、プロジェクトの維持に必要なエンジニアリングリソースのコストに関する情報を憲章に盛り込むかもしれません。

形式や対象者にかかわらず、プロジェクト憲章を作成することは、計画段階に入る前に、全員が今後の進め方に同意していることを確認するためのベストプラクティスである。プロジェクト憲章は、生きた文書です。つまり、***<font color="MediumBlue">プロジェクトの進行に伴って進化していく</font>*** ものです。プロジェクトマネージャーとして、あなたはプロセスを通して憲章を見直し、改良していきます。
ARC154回答メモ

0.はじめに
　久々な気がするARC。
　Aの難易度が若干下がった気がしました。
　B問題以降は、ちょっと解法が見えなかったので
　1時間で切り上げてしまいました・・・。

1.A - AABCDDEFE
　解き方はすぐわかりましたが、実装にてこずりました。
　TLEを警戒して実装しましたが、解説読んだらそんなに
　気を使わなくてもよさそうでした。

　考え方１（間違）
　　美しい整数の各桁をAAbcDDEfEとし、
　　ADEとbcfを1つの数字ととらえ、1～999までは
　　bcfをカウントアップしていき、1000までいったら
　　ADE(100からスタート)を1カウントアップしていく
　　→DEよりbcの方が上位のため、カウントアップ方法が
　　全然駄目であるときにテスト段階で気づく。

　考え方２
　　入力例２に着目
　　882436→998244353
　　上一桁目
　　　8→AAが取りうる値をリストとした場合、
　　　（A=["11","22","33","44","55","66","77","88","99"]）
　　　A[8]の値”99”
　　上２～３桁目
　　　bcと同じ
　　上4桁目
　　　Dと同じ
　　上5桁目
　　　Eと同じ
　　上6桁目
　　　1をマイナスするとfと同じ
　　
　　入力を分解してつなげると解が出るなと気づき実装
　　上6桁目を計算するときだけー1をしていたら、0の時にうまくいかなかったりと
　　てこずりましたが、インプットから1をマイナスした後に計算すればよいことに
　　気づきAC。

　https://atcoder.jp/contests/arc153/submissions/38009984


以上
Googleプロジェクト管理：プロジェクトのリソース

# はじめに

わたしが [Google プロジェクト管理:プロフェッショナル認定証で得られた素晴らしい体験][google]を、要点をまとめ小さく分割して、わかりやすく簡潔に紹介していきます。

興味があれば、ぜひ ***"Google プロジェクト管理:プロフェッショナル認定証"*** を受講してみてください。

[google]: https://qiita.com/mapami/items/317ae776a2268fd54c8f

https://jp.coursera.org/professional-certificates/google-project-management

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/a1cc3407-8d1d-b37c-1d3a-50bf9ea5159f.png" width="800">

# プロジェクトのリソース

プロジェクトマネージャーとして、リソースの必要性を理解することは、目標達成のために非常に重要です。そこで、プロジェクトの開始フェーズでは、プロジェクトを完成させるために、まだ獲得しなければならないものは何かと自問することが重要である。

プロジェクトのリソースには、通常、

- 予算
- 人材
- 資材

が含まれます。

早期にリソース計画を立てることは、チームを成功に導くための素晴らしい方法です。なぜなら、チームメイトが時間通りに予算内で仕事をするために必要なものを手に入れれば、プロジェクトの目標を達成するための準備が整うからです。

では、プロジェクトマネージャーが扱うリソースをいくつか紹介しましょう。

### 予算

予算とは、プロジェクトが完了するまでにかかる金額の見積もりである。ほとんどのプロジェクトは、適切な材料やソフトウェアを購入したり、仕事を完了するためにベンダーを雇ったり、プロジェクトが完了した後にマーケティングを行うなど、費用のための資金が必要なため、予算があります。

開始フェーズでは、ステークホルダーやプロジェクト関係者と話し、プロジェクトを完了させるために必要なタスクを把握します。ここで、***<font color="MediumBlue">隠れたコスト</font>*** を明らかにするための質問をすることもあります。例えば、

- 製品にかかる税金を計算する必要があるか？
- 追加料金の有無は？

これらの情報はすべて、予算を作成するのに役立ちます。予算は、ベンダーからの提案を入手して比較し、今後のコストを計算し、プロジェクトに出入りするすべての資金を追跡するために使用します。

予算とプロジェクト憲章をセットにして、ステークホルダーが承認のためにレビューすることが多いでしょう。

### 人材

人材とは、プロジェクトのタスクを実行するために必要な人たちのことです。例えば、プロジェクトマネージャーであるあなたも人材です。また、社内の人間ではできないようなユニークなスキルを持ち、特定のタスクをこなす社外の人間も人材になり得ます。

### 資材

これは、プロジェクトを遂行するために必要なアイテムです。

例えば、ITプロジェクトであれば、コーディング作業を行うためのハードディスクやコンピューターなどが材料になります。また、無形の資材もありえます。例えば、オンラインストレージ、ソフトウェアプログラム、従業員研修などもマテリアルとみなされる場合があります。適切な人材と予算でプロジェクトを成功させるためには、あらゆる可能性のある資材を考慮することが重要です。

# ツールの活用

ツールとは、プロジェクトマネージャーやチームがリソースを管理したり、作業を整理したりするのを容易にするための補助ツールです。タスクを管理し、予算を管理し、チームメイトとコラボレーションする。Google Docsのような生産性向上ツールやAsanaのような作業管理ソフトウェアなど、世の中にはあらゆる種類のツールが存在します。ツールは進捗管理に欠かせないものなので、プロジェクトのどの段階でも最優先に考えておきたいものです。
Googleプロジェクト管理：なぜプロジェクトは失敗してしまうのか

# はじめに

わたしが [Google プロジェクト管理:プロフェッショナル認定証で得られた素晴らしい体験][google]を、要点をまとめ小さく分割して、わかりやすく簡潔に紹介していきます。

興味があれば、ぜひ ***"Google プロジェクト管理:プロフェッショナル認定証"*** を受講してみてください。

[google]: https://qiita.com/mapami/items/317ae776a2268fd54c8f

https://jp.coursera.org/professional-certificates/google-project-management

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/a1cc3407-8d1d-b37c-1d3a-50bf9ea5159f.png" width="800">

# プロジェクトが失敗してしまう理由

今回、プロジェクトが失敗するいくつかの主な理由を探り、開始フェーズでの不手際がどのようにプロジェクトの失敗につながるかを検証していきます。

### 失敗①不明確な期待

プロジェクトの開始段階において、以下のような質問に答える必要があるのを覚えているだろうか。

- 最終目標は何か？
- 期待される成果物やスケジュールは何か？
- 予算は？
- ステークホルダーは誰か？

プロジェクト開始時に、***<font color="MediumBlue">必要な質問をし、決定事項を文書化し、プロジェクトの真の範囲を理解する</font>*** 時間を取らないと、失敗につながる可能性があります。

結局のところ、道順がわからなければ、目的地にたどり着くことはできないのです。

### 失敗②非現実的な期待

上司の機嫌を取りたいのはやまやまですが、つい非現実的な期待をしてしまい、プロジェクトを最初から失敗に終わらせてしまうことがあります。

例えば、あるプロジェクトが、その詳細さと労力から2週間かかると予想されるにもかかわらず、1週間で完了させようとすると、統合されたスケジュールを満たすだけのリソースが確保できなくなります。その結果、品質に問題が生じる可能性が高くなります。

***<font color="MediumBlue">納期に合意する前に、プロジェクトの要件を理解する</font>*** ことが重要です。

ベストプラクティスとして、非現実的な期待を抱かせないために、***<font color="MediumBlue">プロジェクト開始時に確定した日付を約束しない</font>*** ことです。そうすれば、より多くの情報を得ることができ、計画段階での期待値をより適切に管理することができます。

### 失敗③コミュニケーションのミス

明確なコミュニケーションは重要です。情報がタイムリーに伝達されず、適切な情報（リスク、決定事項、スコープの変更など）が含まれていない場合、または正しいステークホルダーに送信されていない場合は、失敗する可能性があります。

ステークホルダー分析を行い、RACIチャートを使って、どのステークホルダーに情報を提供し、相談すべきかを理解することは、効果的なコミュニケーション戦略を構築するための素晴らしいスタートとなります。

プロジェクトマネージャーとして、必ずしも全員のコミュニケーションスタイルに合わせる必要はありませんが、どのようにコミュニケーションが行われるかについて、期待値を設定することは必要です。プロジェクトを始めるにあたって、チームや関係者のコミュニケーション・ニーズを理解するために時間をかけてください。電子メールを嫌って電話で会話する人もいれば、文書でのコミュニケーションを好む人もいますし、対面でのミーティングを好む人もいます。

### 失敗④リソース不足

リソースには、チームメンバー、予算、材料などが含まれます。残念ながら、適切な計画を立てないと、リソースがすぐにオーバータスクになったり、枯渇してしまったりすることがあります。

プロジェクトマネージャーは、チームメンバーについて、次を考慮していない場合があります。

- 複数の仕事を掛け持ちしており、与えられた仕事を時間通りに正確にこなすために必要な時間を割くことができない。
- 特定のタスクを完了するために特定のスキルが必要である。

もう一つのよくある間違いは、プロジェクト経費の計算を間違えてしまうことです。例えば、1万ドルのプロジェクト予算があるとします。材料費に1万ドル必要で、さらにその材料を輸送・設置しなければならないとしたら、プロジェクトを完了するのに十分な資金がありません。プロジェクトの遅延や問題を避けるために、前もってリソースの必要性を明確にし、その可用性をリーダーに確認する必要があります。

### 失敗⑤スコープクリープ

スコープは、プロジェクトの作業や成果物に何が含まれ、何が含まれないかという包括的な枠組みを提供するものです。開始フェーズでスコープを定義することで、必要なリソース、そのリソースに関連するコスト、作業を完了するために必要なスケジュールを特定することができます。プロジェクトのスコープが大きくなり、スコープへの影響が把握されないために、プロジェクトが失敗することがあります。

例えば、当初は3つの成果物が含まれるプロジェクトを任されたとします。プロジェクトの途中で、ステークホルダーから2つの成果物を追加するように要求されましたが、成果物の増加による影響を反映するために、スケジュール、予算、チームメンバーの変更が行われていませんでした。

プロジェクトマネージャーとしては、成果物が変更になった場合、***<font color="MediumBlue">その変更がスケジュール、予算、品質に与える潜在的な影響を確実に把握する</font>***　必要があります。このため、開始フェーズですべてを文書化しておくことが非常に重要なのです。スコープクリープが発生した場合の対処方法を計画し、スコープ変更を承認する権限を持つ者を明確にしておく。

# 参考

https://project-management.com/7-lessons-to-learn-from-a-failed-project/