OmniAICreator/Qiita-1.07M huggingface dataset:
Career Tips for Engineering Students from the Experts

Beginning a journey in engineering can be daunting, especially for students. Obtaining expert advice may boost confidence and pave the way for a successful career. Engineers depend on crucial insights to guide their career paths and evolve as professionals. If you have decided to start a career in engineering, getting expert advice would be beneficial.

What an Engineer Does: Before we dive into career advice, let's define what an engineer does. Engineers innovate within restrictions, developing complex systems and structures while considering rules and budgets. They solve problems with maths, science, and technology.

Pursuing Engineering Colleges in Tamil Nadu? Explore here

Here are the top 7 career tips for engineering students to become a successful engineer

(1) Choose a Reputable Engineering College: Choosing a recognized engineering college establishes a solid foundation for your engineering education by providing high-quality learning and career possibilities.

In Villupuram Engineering College, you can,

(2) Set Your Goals: Set specific career objectives early to steer your academic and professional pursuits. Setting objectives allows you to stay focused and motivated throughout your career path.

(3) Pursue your Interests: Explore various engineering sectors to find your area of interest. Choosing things that interest you boost engagement and improve your learning experience.

(4) Continuous Learning & Practicing: college in Villupuram Engineering is a dynamic discipline requiring ongoing skill growth and knowledge gain. Regular practice and learning keep you current in the industry and can help you grow professionally.

(5) Accept your Failures: Accept your failures as a chance to develop and learn new things repeatedly. Analysing errors allows you to find areas for development and build resilience in overcoming challenges.

(6) Enhancing Soft Skills: Some essential skills for success in engineering are communication, teamwork, and leadership. Spending time and effort in improving your soft skills will supplement your technical knowledge and increase your employability.

(7) Build a Career Path: Outline clear short and long-term career goals to stay focused.

In conclusion, following these tips can set a strong foundation for success. Embracing opportunities and leveraging experience can pave the way for a fulfilling Villupuram college of engineering career.

As a best Tamil Nadu engineering college, we take pride in providing these golden opportunities to our students.
Google Colabでファイルを解凍する方法

python初心者はgoogle colab でpythonを動かしてみるのが良いが、githubにあげられているコードを使用する際にどうすればよいのか当時わからなかったため、投稿。

### ファイルのコピーと解凍

1. ファイルを現在のディレクトリにコピーする
   ```python
   !cp "○○.zip" .  # 「.」は現在のディレクトリを示します
   ```

2. ファイルを解凍する
   ```python
   !unzip sbd_clsimg.zip
   ```

注意: `unzip`の後にはURLではなく、ファイル名を記載する。

### 例
間違い:
```python
!unzip https://github.com/jyhjinghwang/SegSort/blob/master/dataset/voc12/sbd_clsimg.zip
```

正しい方法:
```python
!unzip dataset/voc12/sbd_clsimg.zip
```

こちら↓を参考にしました、ありがとうございます。
https://kenko-keep.com/colab-cp-unzip/
チームが国際化！？と思ったら日本語で普通に開発しているお話

# はじめに

プロジェクトチームメンバーにアメリカ出身の方が加入して約三ヶ月が経ったので振り返りをしてみます。

# 振り返り
- メッセージが英語で飛んできてちょっと驚いた
しかし、業務に関わる用語で構成された文章だったので理解に苦しむことは無さそうという印象でした。

<font color="Red">**ちなみに私と初めてやり取りしたメッセージはこちら**</font>

 メンバー「Ok I have set the appointment for 16:00 to 16:40.  Please check at your earliest convenience.」

私「Got it.(変な言い回しだったら教えてください)」

メンバー「No problem! Please do the same for me in Japanese!」

<br>

- 日本語で話して普通に通じる
前職も日本で働いていたということで、日本語である程度の意思疎通が可能で驚きました。
ただ、テキストベースだと読解に時間がかかるという感じでした。
業務手順を記載したマニュアルや情報を一元化しているWikiを元に説明する際はゆっくり話したり、範囲選択して今どこについて説明しているかを明確にするように心掛けていました。

<br>

- 英語ドキュメントの検索や内容把握のスピードが速い
当たり前のように早くて助かっていました。以前にとあるライブラリのissueにバグチケットのプルリクが出ていることを教えていただいたことがあります。(プロジェクトで利用しているライブラリに依存していたため、プロジェクトが起動できない状況になったことがあります)

<br>

- ジョークが面白い、ノリが良い
最近の口癖は「カンキョウ、ケシマスカ？」
私が「もう手順バッチリですね！私がいなくても問題なさそうですね:relaxed:」と言うと決まって返してきます。
これがアメリカンジョークってやつです多分。


# おわりに
この数か月間新鮮です。自分もちゃんと英語ドキュメント読もうと感じました…
【AtCoder】メモ型再帰

## ポイント

- メモ用の配列を用意する
- メモされている場合、その値を返却する（再計算しない！）
- メモされていない場合、メモ用配列にメモをしてからその値を返却する

## 例題

[ABC340C - Divide and Divide](https://atcoder.jp/contests/abc340/tasks/abc340_c)

```C++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

map<ll, ll> m;
ll rec(ll n) {
  if (n == 1) return m[1] = 0;
  if (m.count(n)) return m[n];
  
  ll n1 = (n + 1) / 2, n2 = n / 2;
  return m[n] = (n + rec(n1) + rec(n2));
}

int main() {
  ll N; cin >> N;
  cout << rec(N) << endl;
}
```
“水”の抵抗値

# “水”の抵抗値はいくつ？

深さ20cm程度のバケツに溜まった水を検知するための、水センサーを作ろうとしていて、そもそも「水」の抵抗値はいくつなのだろうか？ と思った次第です。


https://www.google.com/search?q=%E6%B0%B4+%E6%8A%B5%E6%8A%97%E5%80%A4

ググってみると、↓次の情報が・・・

![R.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/4024adce-9226-5174-feb3-33b1f3159028.png)

実際のバケツに1cmほど水が溜まった状態で、テスター棒を突っ込んで測ってみると 1.5MΩ ぐらいとなりました（えっ、こんなに高い？　使ったテスターがポンコツなのか？）

> ちなみに、この「水」は、エアコンの室内機から放出される「水」です（空気中の水分の結露水）。<br>訳あって、室内で受ける必要があって・・・

次のYouTube動画では、10KΩ と言っていた・・・。

https://www.youtube.com/watch?v=GNDTQUs1bns

測り方で随分な差が出るなと思いました。この差は、水の体積の差でしょうか?? プローブ側の面積の差でしょうか??


# RasPi Pico で測ってみる

次の配線をして計測します。

![water.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/024d7f13-bcb8-b415-a2b4-51c42c54b79c.png)

赤と青の細い（28AWG）錫メッキ銅線を割り箸に這わせて、2cmほど溜まった水に漬けました。

<img width="200" alt="probe.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/96ccae5d-9df8-5935-8399-7dfc5e6bae61.png" />

<img width="180" alt="ssd1306.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/c2eae95d-7c82-a5dc-0e33-db3b6636958c.png" />

コードは、次のとおり。

```python
from machine import Pin, I2C, ADC
from ssd1306 import SSD1306_I2C
import framebuf
import machine
import utime

i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=200000)
oled = SSD1306_I2C(128, 64, i2c)

adc0 = ADC(Pin(26))

while True:
  adc0_value = adc0.read_u16()
  voltage = adc0_value * 3.3 / 65535
  print(f"{adc0_value} {voltage}")

  oled.fill(0)
  oled.text(f"{adc0_value} : {voltage}", 0, 0)
  oled.show()
  utime.sleep(1)
```

分圧の抵抗を 1MΩ と 20KΩ にしたときで、得られる値に大きく差が出ました。
（100回ほど取得した値の平均値）

|	分圧抵抗	|	ADC値	|	電圧値	|	水の抵抗値	|
|	-:	|	-:	|	-:	|	-:	|
|	1MΩ	|	56120	|	2.82V	|	167.8KΩ	|
|	20KΩ	|	31628	|	1.59V	|	21.4KΩ	|

分圧の傾向は 20KΩ を採用します（冒頭の表に「水」の抵抗値が近い）。

（7cmほどで12KΩ程度と）水位が上がるにつれて、抵抗値が徐々に下がっていきます。

今回は、バケツの水位が `“1cm付近”`と `“8割付近”`の区別ができればよくて、厳密な水の抵抗値が必要ではないので、この結果で良しとします。
（7割ぐらいでブザーを鳴らす）
Ruby safe navigation operator (ぼっち演算子)

# 概要
Ruby on Railsを勉強していて
あまり見かけない演算子が出てきたので
メモとして残しておきます。

# 例
```.ruby
user && user.authenticate(params[:session][:password])
```
のような論理値（boolean値）の条件式を
```.ruby
user&.authenticate(params[:session][:password])
```
という風に短縮して記述できる。
🐞開発環境のアイコンの虫を採集してみた

# バグ、その姿とは

Visual Studio Codeのアイコンを見ていて思ったわけである。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/9a16f0dd-956a-7009-bd4a-3871d93276e4.png)

なんだこの左下の……？
あー、バグね。デバッグね。わかるわ。
虫、大人になってからめっきり触れなくなっちゃったなあ……。

バグって言ったら、やっぱこいつのイメージだよなあ。

でも最近別のタイプの虫を見たんだよなあ……。

🐛←こいつです。
コミットメッセージの冒頭に絵文字をつけて、わかりやすくする表示です。

https://qiita.com/oekazuma/items/0ce5082a07fe5c942de3

バグっていうかワームな気がするけど、ま、いねぇもんなさすがにあのシルエットの虫は絵文字にはと……と思ったら🐜、🐝、🐞みたいな、特にシルエットの似ている🐞もいたりするわけですよ。

# bugとは？
> 1小さな虫（解説的語義）
半翅はんし類の昆虫（true bug）；((英))ナンキンムシ（bedbug）；
 ((米))（俗に）昆虫，虫（◆アリ・ハチ・ハエ・ゴキブリのほか，クモ・エビなども含む）

[goo辞書](https://dictionary.goo.ne.jp/word/en/bug/)より引用

半翅類の昆虫っていうのは、カメムシとからしいです。
たぶんVisual Studio Codeの虫はカメムシに近いんじゃないかと思います。どうでしょうか？

ってわけで、いろいろなソフトのバグ（だいたいはデバッグの文脈）がどんな虫か収集してみました。
見た目系の話なので、バージョンによっても変化するようです。
虫も環境で変化するんだね。
**いかがでしたか？**

# VisualStudioCode

改めて、VisualStudioCodeはこのタイプの虫。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/5b92d673-c4cc-1695-66ab-5839299f6196.png)


# Eclipse 

統合開発環境Eclipseのバグはこのタイプの虫。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/41e9c94f-e5b2-39e0-f6d9-03b20ba1c8ba.png)

# E2 Studio 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/e4466a45-4a3d-6bf7-956c-f509b3d269b1.png)

Eclipse系なので、E2 Studioも同じ虫である。

# Android Studio
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/a1eb0061-5cb7-7e81-3474-94a78e6199ee.png)

この手の虫ですね。かわいいけど緑だぜ。
へっへっへ。

# PyCharm

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/2780c3f8-0419-30e0-9860-12038bf17b2a.png)

おや……！？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/54b4b932-80f6-914a-4239-06c8b719c7a3.png)

この虫はAndroidStudioと同種じゃないかな！？
（同じ素材サイトとかなのだろうか？）

別バージョンのスクショを探してみたら横向きの虫だったりもしました。

# Oracle SQL Developer 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/aa6ae094-2ff3-4829-c54a-d9ef84be55d8.png)

おやあ、**テントウムシ**だあ！

[Oracle SQL Developerを使用したPL/SQLの開発とデバッグ](https://www.oracle.com/webfolder/technetwork/jp/obe/db/sqldev/r30/plsql_debug_obe/plsql_debug_otn.htm)より引用。

# DataSpider Cloud

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/42eeb430-b5c0-38d2-ed1e-84e1e6438d26.png)

あらあ、珍しい黄色い虫だ！

[DataSpiderCloud サービスの開発](https://doc.dataspidercloud.com/v1/help/ja/servista/service_practice.html)より引用。

# Firebase

焚火とくれば虫もやってくることでしょう……と思ったけどWebだしなあ。

### あ！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/897ae5e2-e40a-ea60-cbbe-02c62375cb2a.png)

にょきっとした虫がいますね。足がないタイプだ。

[Firebase イベントをデバッグする](https://firebase.google.com/docs/analytics/debugview?hl=ja)より引用。

# むすび
探してみたら結構虫がいるようです。やっぱりカメムシ系という印象が強いんですが、🐛のほうがかわいくはあるかもしれない。ほかにもテントウムシや、レアなパターンもあります。

（もちろん、デバッグのアイコンが虫ではないソフトもたくさんあります。）

開発環境を守って、豊かなバグの生態系を守りましょう。
みなさんも昆虫採集をしてみてはいかがでしょうか？
OpenFOAMのfixedProfile

# fixedProfileという境界条件
Function1の機能で分布をもった境界条件を設定できるfixedProfile。あまり情報がないのでつかってみました。

# 例
```cpp
 <patchName>
    {
        type            fixedProfile;
        profile         table;
        profileCoeffs
        {
            file                "UProfile";
            format              csv;
            nHeaderLine         0;
            columns             (0 (1 2 3));
            separator           ",";
            mergeSeparators     no;
            outOfBounds         clamp;
            interpolationScheme linear;
        }
        direction        (0 1 0);
        origin           0;
    }
```

fixedProfileのソースのコメントみると，上のような例があります。

## directionの意味
最初これがわからなくて苦労しました。fixedProfileは1次元的な分布を設定する境界条件です。2次元的な分布を作れません。分布のある方向をここで指定します。

xy平面上に考えているpatchがあるとして，x方向に分布があるなら
```cpp
direction (1 0 0);
```
とします。


## refColumn
patchでのfaceの座標をreferenceとして位置をみにいくので，座標に関わる情報のある列を指定します。各faceの中心座標を設定するので大丈夫です。ただし，上にあるように1次元的な分布しか設定できないので，x座標，y座標，z座標のいずれか1つの並びしか設定できません。

direction (1 0 0)になってるなら，境界面上のfaceのx座標が並んでいる列を指定します。

## profile
OpenFOAMが古いと，profileにcsvFileを指定できましたが，新しいやつではprofileはtableにして，formatでcsvを指定します。
決定木によるカプランマイヤー生存時間分析

決定木使ったシンプルな生存分析です。

分類や回帰でも使用されるrpart()関数ですが、目的変数がSurv()関数になっています。
Surv()のパラメータはイベント発生までの時間とイベントフラグです。

```survival.R
library(survival)
library(rpart)
library(partykit)

head(stagec)
# pgtime pgstat age eet    g2 grade gleason     ploidy
# 1    6.1      0  64   2 10.26     2       4    diploid
# 2    9.4      0  62   1    NA     3       8  aneuploid
# 3    5.2      1  59   2  9.99     3       7    diploid
# 4    3.2      1  62   2  3.57     2       4    diploid
# 5    1.9      1  64   2 22.56     4       8 tetraploid
# 6    4.8      0  69   1  6.14     3       7    diploid

dat <- stagec
tfit <- rpart(Surv(pgtime,pgstat)~., data = dat)

# Decision Tree
p.fit <- as.party(tfit)
plot(p.fit)
```
![survtree.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1031677/26316e4b-692e-48d8-84d0-a0dc53f70c9a.png)

各ノードの曲線の値が知りたい場合は、ノード番号でデータを抽出してカプランマイヤー推定の関数を実行すると詳細が出てきます

```R
# 左から2番目のノードの詳細がみたい
> # survival rate in nodes
> d5 <- dat[tfit$where==5,]
> summary(survfit(Surv(d5$pgtime,d5$pgstat)~1))
Call: survfit(formula = Surv(d5$pgtime, d5$pgstat) ~ 1)

 time n.risk n.event survival std.err lower 95% CI upper 95% CI
  2.9     19       1    0.947  0.0512        0.852            1
  4.9     17       1    0.892  0.0724        0.760            1
  7.6      8       1    0.780  0.1220        0.574            1
  8.0      5       1    0.624  0.1703        0.366            1
```

全ノードの曲線を同じグラフで見たい時

```R
dat$node = as.factor(tfit$where)
plot(survfit(Surv(dat$pgtime, event = dat$pgstat) ~ dat$node), col = dat$node)
legend("topright", legend = levels(dat$node), col = as.numeric(levels(dat$node)), lty = 1)
```

![km.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1031677/3e63924a-4c20-3e5f-6e4e-d2ee942b4994.png)

#### 参照
https://cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf
https://stackoverflow.com/questions/30700627/using-a-survival-tree-from-the-rpart-package-in-r-to-predict-new-observations
Vue Router の基礎: ルーティングとネストされたコンポーネント

Vue3 の Composition API で、Vue Router を効率的に利用し、ナビゲーションの制御、ページ遷移、パラメータの受け渡しを実装します。

### 1. 準備

まずは、プロジェクトに Vue Router をインストールします。

```bash
npm install vue-router
```

次に、`main.ts` ファイルで Vue Router を初期化します。

```javascript
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';

createApp(App).use(router).mount('#app');
```

### 2. ルーティング設定

`router/index.ts` ファイルで、ルーティング設定を行います。

```javascript
import { createRouter, createWebHistory } from 'vue-router';
import HomeView from '../views/HomeView.vue';
import AboutView from '../views/AboutView.vue';

const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView,
  },
  {
    path: '/about',
    name: 'about',
    component: AboutView,
  },
  {
    path: '/products/:id',
    name: 'product',
    component: ProductView,
    props: true, 
  },
];

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes,
});

export default router;
```

この例では、`HomeView`、`AboutView`、`ProductView` といったコンポーネントを定義し、それぞれに対応するパスを設定しています。

`ProductView` は、`products/:id` のようにパラメータを含んだパスを使用しており、`props: true` を設定することで、パラメータをコンポーネントに渡すことができます。

### 3.  setup 関数での Router の利用

コンポーネントの `setup` 関数内で、`useRouter` を使用して Router インスタンスを取得します。

```vue
<script setup>
import { useRouter } from 'vue-router';

const router = useRouter();

</script>
```

### 4.  ナビゲーションの制御

`router.push()` メソッドを使って、別のページへ遷移できます。

```vue
<script setup>
import { useRouter } from 'vue-router';

const router = useRouter();

const onNext = () => {
  router.push('/about');
};
</script>

<template>
  <button @click="onNext">次のページへ</button>
</template>
```

`router.replace()` メソッドを使うと、現在の履歴を置き換えて遷移できます。

### 5.  パラメータの受け渡し

`ProductView` のような、パラメータを持つページでは、`$route.params` でパラメータにアクセスできます。

```vue
<script setup>
import { useRouter } from 'vue-router';

const router = useRouter();

</script>

<template>
  <div>
    <h1>商品詳細 - {{ $route.params.id }}</h1>
    <!-- 商品情報など -->
  </div>
</template>
```

`router.push()` でパラメータを渡す場合、オブジェクトで指定します。

```vue
router.push({
  name: 'product',
  params: { id: 123 },
});
```

### 6. まとめ

Composition API を使用することで、Vue Router との連携がよりシンプルになり、コードの可読性も向上しました。

* `useRouter` を使用して Router インスタンスを取得
* `router.push()`、`router.replace()` でページ遷移を制御
* `$route.params` でパラメータにアクセス
今回は基礎的な使い方についてまとめましたが、他にも使い方がありそうなので今後記事にまとめたいと思います。
ScrapyCloudのAIがすごかった

## はじめに
[ScrapyCloud](https://www.zyte.com/scrapy-cloud/)という`scrapy`というPythonスクレイピングライブラリのためのクラウドサービスがあるのを知ってはいましたが、使ったことがなかったので使ってみたらすごかったので紹介します。
何がすごいかというと、AIによるスクレイピングによってコードを一切書かずにスクレイピングができるという点です。


## はじめ方

アカウント作成と同時にクレジットカード登録が必要になりますが、無料枠があるのでそれを超えない利用であれば料金はかからないようです。

## 使い方

アカウント登録を済ませた後、プロジェクトを作成し、Spiderを新規作成します。
そこで、Zyte's AI-Powered Spidersを選択します。

![a3e4f0334b0b6e1709a5e6cb4c46785e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403148/35775da5-968c-49c7-04b1-783e716eaab3.png)

その後、スクレイピングしたいサイトのURLを入力するだけで、自動的にスクレイピングが開始されます。

`csv`, `json`, `xml`などの形式でデータをダウンロードすることができます。

実際にスクレイピングされたデータは以下の通りです。
データ化された後はPythonで煮るなり焼くなり好きなように使うことができます。
![スクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403148/114fdfc3-aea1-c755-afe0-b49cdb41b5a1.png)

## 料金について

リクエストをするのにZyte APIが使われているようで、100件リクエストして、$0.72分使われていました。1リクエスト1円みたいな感じですね。
![cost](https://scrapbox.io/files/66694c0e704cf2001d79cde6.png)

## まとめ

ScrapyCloudは、AIによるスクレイピングによってコードを一切書かずにスクレイピングができるという点がすごいと思いました。
コードを1mmも書かずにスクレイピングができるのなら、支払う価値はあるかもしれません。
Active Directoryを使ってPCにファイルを配布する方法

# 概要

Active Directoryを使ってPCにファイルを配布する方法を説明します。
グループポリシーオブジェクトを使用してファイルを配布する方法に焦点を当てます。

## 作業内容

### 事前準備
配布したいファイルをファイルサーバーに配置し、ネットワーク共有を設定します。
ここでは例として `\\server\share\file.txt` を使用します。

### 手順

1. **グループポリシー管理コンソール (GPMC) を開く**
    - **操作**: `gpmc.msc` を実行してグループポリシー管理コンソールを開きます。


2. **新しいGPOを作成**
    - **操作**:
        - [ドメイン] または [組織単位 (OU)] を右クリックし、[新しいGPOの作成] を選択します。
        - GPOの名前を入力します（例: "File Distribution GPO"）。

3. **GPOを編集**
    - **操作**:
        - 作成したGPOを右クリックし、[編集] を選択します。

4. **スクリプトを設定**
    - **操作**:
        - [コンピュータの構成] または [ユーザーの構成]（どちらでも可）を展開します。
        - [ポリシー] > [Windowsの設定] > [スクリプト (スタートアップ/シャットダウン)] または [スクリプト (ログオン/ログオフ)] に移動します。
        - [スタートアップ] または [ログオン] を右クリックし、[プロパティ] を選択します。
        - [スクリプト] タブで、[追加] をクリックし、配布したいファイルをコピーするスクリプトを指定します。

5. **スクリプトファイルの作成**
    - **操作**:
        - 配布スクリプトを作成し、ネットワーク共有またはローカルに保存します。以下は例です。

        ```bat
        @echo off
        xcopy \\server\share\file.txt C:\path\to\destination /Y
        ```

        - スクリプトファイルのパスを指定します。

6. **GPOを対象のOUまたはドメインにリンク**
    - **操作**:
        - GPMCで、GPOを適用したいOUまたはドメインを右クリックし、[既存のGPOのリンク] を選択します。
        - 作成したGPO（"File Distribution GPO"）を選択します。

7. **GPOの適用を確認**
    - **操作**:
        - コマンドプロンプトを開き、対象のコンピュータで次のコマンドを実行してGPOが適用されていることを確認します。

        ```shell
        gpupdate /force
        ```

        - コンピュータを再起動し、ファイルが正しく配布されたか確認します。
KWIK TRIP'S DATABRICKS: DRIVEN OPERATIONAL INSIGHT REVOLUTIONのまとめ

# はじめに
本記事は、Databricksのイベント「Databricks Data + AI Summit 2024」の「KWIK TRIP'S DATABRICKS: DRIVEN OPERATIONAL INSIGHT REVOLUTION」の講演内容をまとめた記事です。

Quick TripのデータエンジニアであるLogan Carlson氏とソリューションアーキテクトのSid氏が登壇し、Databricksを活用した取り組みについて詳しく説明しました。

## Quick Tripとは

Quick Tripは、6つの州にまたがるコンビニエンスストアおよびガソリンスタンドチェーンで、そのフライドチキンが特に有名です。Quick Tripは、自社製品の多くを自社で生産しており、これにより毎日新鮮な食品を提供することが可能です。

## データサービスチームの設立

2年前に設立されたQuick Tripのデータサービスチームは、データアナリストとエンジニアで構成され、旧来のデータウェアハウスの統合と報告を維持しつつ、Databricksのような最新のデータプラットフォームを採用してデータ革新と変革を推進しています。このチームは、内部のIT組織内およびビジネスユニット内で信頼を構築することを目指しています。

## 主なユースケース

* **ストリーミングデータの統合**:
  Quick Tripのデータサービスチームは、全社の燃料ポンプからのリアルタイムストリーミングデータを統合し、予測メンテナンスの機械学習ユースケースを探求しています。これにより、燃料ポンプのフィルターが劣化した際の対応が迅速化され、顧客の待ち時間が減少します。

* **データの統一プラットフォーム**:
  内部のソフトウェア開発チームが開発したアプリケーションのデータを単一のデータプラットフォームに統合することで、データの信頼性が向上し、運用コストと複雑さが削減されました。

## 技術的実装

Quick Tripのデータプラットフォームの構築には、最新の技術とアーキテクチャが活用されています。以下に、その具体的な実装方法について詳しく説明します。

### データアーキテクチャの選択

- Quick Tripは、Databricks、Azure、およびメダリオンアーキテクチャを使用したスケーラブルなデータアーキテクチャを採用。
- メダリオンアーキテクチャは、データをブロンズ（生データ）、シルバー（精製データ）、ゴールド（集計データ）の3層に分けて管理。
- データの整合性と信頼性を確保し、データの流れが明確に、データ品質が保証される。

### データの収集と処理

- Azure Event HubsとAWS Kinesisを使用して、店舗およびIoTデバイスからのストリーミングデータをリアルタイムで収集。
- 収集されたデータはAzure Data Lake Storage (ADLS)に保存。
- Databricksのストリーミング機能を用いてリアルタイムに処理。
- データの遅延を最小限に抑え、即座に分析や予測に利用可能。

### データの変換と精製

- 収集された生データは、DatabricksのDelta Live Tables (DLT)を使用して精製。
- DLTは、データパイプラインの自動化とデータ品質の保証を提供。
- データのクレンジング、変換、および集約を効率的に実施。
- シルバーレイヤーにおける精製データを生成し、ビジネスインテリジェンスや機械学習に利用可能。

### データの保存と提供

- 精製されたデータは、DatabricksのサーバーレスSQLを使用して保存。
- サーバーレスSQLは、コンピューティングリソースの自動スケーリングを提供し、コスト効率を向上。
- データはPowerBIと接続され、リアルタイムのビジネスレポートとして提供。
- ビジネスユーザーは最新のデータに基づいて迅速な意思決定が可能。

### 機械学習と予測分析

- Quick Tripでは、DatabricksのMLflowを使用して機械学習モデルの管理とデプロイを実施。
- MLflowは、機械学習モデルのライフサイクル管理を簡素化。
- モデルのトラッキング、バージョニング、およびデプロイを一元管理。
- 予測メンテナンスや需要予測など、さまざまな機械学習ユースケースを効率的に実装。

### セキュリティとガバナンス

- Quick Tripは、Unity Catalogを使用してデータのセキュリティとガバナンスを管理。
- Unity Catalogは、データアクセスの制御、データのカタログ化、および監査ログの一元管理を提供。
- データの安全性とコンプライアンスを確保。
- データの共有とコラボレーションを促進し、企業全体でのデータの有効活用を支援。


## 今後の計画

* Quick Tripは、オープンソース技術を使用して独自の機械学習ソリューションを構築し、内部の特定の要件に合わせてカスタマイズする計画を立てています。これにより、データ駆動の運用洞察がさらに強化され、将来的なビジネスニーズに対応できるようになります。

* Quick Tripの成功は、シンプルなアーキテクチャの維持とベストプラクティスの遵守にあります。これにより、市場投入のスピードが向上し、全体的な効率が向上しています。セキュリティリスクや移り変わる部品が多いため、共通のガバニングソリューションを実装することが重要です。


## まとめ
Databricksを活用したQuick Tripの取り組みは、他の企業にとっても参考になる事例であり、データ駆動の運用洞察を目指す企業にとって貴重な教訓となるでしょう。Quick Tripの成功事例は、データの力を最大限に活用することで、ビジネスの効率と顧客満足度を大幅に向上させる可能性を示しています。

## Databricks Champion からのコメント
まさにDatabricksのベストプラクティスに沿った取り組みが紹介されていますね。
Databricksを利用することで、データの保存・変換・機械学習への活用を同一環境で実現できており、さらにそれらのセキュリティやガバナンスの管理を Unity Catalog が担ってくれています。
こちらの事例はDatabricks をこれから使い始めてみたいといった方にはぴったりの内容になると思います！

***
2024年6月10日~13日にサンフランシスコおよびオンラインにて開催されるDatabricks社主催の年間最大規模のカンファレンスイベント、「Databricks Data＋AI Summit 2024」が開催中！
ナレッジコミュニケーションではイベント開催に伴い、「生成AIの最新トレンドと業界別ビジネスインパクト」をコンセプトに最新アップデート情報やセッションレポートをお届けする特設サイトを公開しておりますのでぜひチェックしてください！

https://www.knowledgecommunication.jp/product/databricks-data-ai-summit-2024.html
PythonでSJISとUTF-8に対応したQRを作る

# 漢字コード対応版QRコード生成
WidnowsのPythonでファイルを読む際、漢字コードが交じるとSJISで読んでいるのか、UTF-8で読んでいるのかを明らかにしないとエラーが起きる。

なので以下のようなコード読んでみないとどちらかがわからない。

``` mkqr.py
import sys
import os
import qrcode as qrl

args = sys.argv
fn = ''
enc='utf-8'

# -s でSJIS　-uでUTF-8のQRを出力する
for arg in args:
    if arg=='-s':
   	    enc='shift-jis'
    elif arg=='-u':
   	    enc='utf-8'
    else:
        if os.path.exists(arg):
   	        fn=arg
        else:
   	        print("{} Not found".format(arg))

buf=''
try:
    with open(fn) as f:
        buf=f.read()
except:
    with open(fn, encoding="UTF-8") as f:
        buf=f.read()

encbuf=buf.encode(enc)
qr=qrl.QRCode()
qr.add_data(encbuf)
qr.make()
img=qr.make_image()
img.save('QR.png')
```

テキストファイルのエンコードを先に調べればもっとスマートに書けるにかも・・・

とりあえず動いたのでまずは良し！！
バグってたらごめんなさい。
ソースはご自由に変更してくださいね。
Github Actionsを学習する上で必要になる前提知識

個人的「質はともかく継続する」10日目です
だいぶネタが厳しくなってきましたが、質はともかく継続！

# Github Actionsを学習する上で必要になる前提知識

業務で急遽、人に教える必要性が出てきたので、
思いつく限りまとめてみます。

- Gitの使い方
- GitHubの使い方

まぁ、このへんは当然ですよね。

- CI/CDに付いて説明できる

なんのために使うのかを抑えるうえで必要な知識かな。

- 仮想化、コンテナ
- docker

Actionsは主にUbuntuで動かすことが多く、
記述もdockerベースで書くことが多いので。

- YAML

dockerベースだと、当然YAMLも知ってる必要がありますね。

- Shellスクリプト

Ubuntu上でスクリプトを実行させることが多いので、
コレも必要。

ひとまずこれだけあれば、なんとかなるかな？
【C#】Mutex名にパスは入れられない

### 現象
起動時に外部から読み込むファイルパスごとに重複起動を制御するようなメソッドを作りたい！
→ System.ThreadingのMutexオブジェクトを生成する際に、第二引数`name`に相対パスや絶対パスを含むとエラーとなりました。

### コード
```C#
public bool IsProcessAlreadyStarted(string mutexName)
{
    //Mutex名はプロセス名+引数とする
    string currentProcessName = Process.GetCurrentProcess().ProcessName;
    string applicationMutexName = currentProcessName + "_" + mutexName;

    //Mutexオブジェクトを作成
    Mutex mutex = new Mutex(false, applicationMutexName);

    bool hasHandleMutex = false;
    try
    {
        //ミューテックスの所有権を要求する
        hasHandleMutex = mutex.WaitOne(0, false);
    }
    catch (AbandonedMutexException)
    {
        //別のアプリケーションがミューテックスを解放しないで終了した時
        hasHandleMutex = true;
    }

    //ミューテックスを得られた場合は多重起動していない
    return !hasHandleMutex;
}
```

引数mutexNameに`".\hoge.txt"`のようにファイルパスを入れるとSystem.IOのエラーが発報されます。

> ハンドルされていない例外: System.IO.DirectoryNotFoundException: パス '{プロセス名}_.\hoge.txt' の一部が見つかりませんでした。

Mutex名に絶対パスをそのまま入れてみたりしたけど結果は同様。パスがちゃんと通っているか などは関係ないようです。
どうもバックスラッシュ(`\`)が入っているのがダメらしい…？

### 解決方法
mutexName内のバックスラッシュを適当に置き換えると解決しました。
```C#
public bool IsProcessAlreadyStarted(string mutexName)
{
    //Mutex名はプロセス名+引数とする
    string currentProcessName = Process.GetCurrentProcess().ProcessName;
    //バックスラッシュをスラッシュに置き換え
    string applicationMutexName = currentProcessName + "_" + mutexName.Replace("\\", "/");

    //Mutexオブジェクトを作成
    Mutex mutex = new Mutex(false, applicationMutexName);

```

解決はしたけど、結局なぜこのエラーを投げるのかはわからず…。
HCP Terraform への Policy as Code 導入にはファーストステップとして Terraform Registry の Policy Libraries を使うと良さそう

Terraform Registry の Policy Libraries を利用した HCP Terraform への Policy as Code 導入を行ったため紹介します。

# HCP Terraform
HCP Terraform はチームでの Terraform 利用を支援する SaaS です。

https://developer.hashicorp.com/terraform/cloud-docs

> HCP Terraform is an application that helps teams use Terraform together. It manages Terraform runs in a consistent and reliable environment, and includes easy access to shared state and secret data, access controls for approving changes to infrastructure, a private registry for sharing Terraform modules, detailed policy controls for governing the contents of Terraform configurations, and more.

# Policy as Code
Policy as Codeは、セキュリティのルール、基準、条件をコードで定義・管理する方法です。

https://glossary.cncf.io/ja/policy-as-code/

HCP Terraform には Policy as Code を実践するための機能が備わっており、Sentinel もしくは OPA が利用できます。

https://developer.hashicorp.com/terraform/cloud-docs/policy-enforcement

# Policy Libraries
Policy as Code を実践していこうとなった際に具体的にどのようなポリシーを用意すべきか検討する必要があります。しかし、初期段階ではポリシーの洗い出しが出来てなかったりするので、まずは一般的なセキュリティフレームワークの内容をチェックしてくれるポリシーを利用したいと思うこともあると思います。そんな時は Terraform Registry の Policy Libraries の出番です。Policy Libraries には CIS ベンチマーク等をチェックするポリシーが公開されており、利用者は参照するのみでポリシーを利用できます。なお Policy Libraries には Sentinel ポリシーのみが公開されています。

https://registry.terraform.io/browse/policies

# Policy Libraries にて提供されているポリシーを HCP Terraform で利用してみる
以下に Policy Libraries にて提供されているポリシーを HCP Terraform で利用するまでの手順を記載します。HCP Terraform におけるポリシー設定にはいくつか方法がありますが、今回は VCS 連携の手順を記載します。

https://developer.hashicorp.com/terraform/cloud-docs/policy-enforcement/manage-policy-sets#policy-publishing-workflows

## HCP Terraform と連携する VCS を用意する
ポリシーファイルを管理する VCS を用意します。後の手順でこの VCS と HCP Terraform を連携します。今回は VCS として GitHub を利用します。

## Policy Libraries から利用するポリシーを選択し、ポリシーファイルにポリシー定義を記載する
Policy Libraries から利用するポリシーを選択すると、ポリシー定義のコードスニペットが表示されるので、これをポリシーファイルに転記します。

![hashicorp_aws-networking-terraform___Terraform_Registry.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266372/f67516cd-941b-19f6-c173-13c1ea0124cc.png)

VCS 連携する場合はポリシー定義には `sentinel.hcl`という名前で単一ファイルに記載する必要があるため注意してください。

## HCP Terraform にて Policy Sets を設定する
HCP Terraform の Policy Sets 設定画面からポリシーファイルを格納した VCS と連携します。その際にどの Project もしくは Workspace に対してポリシーを定義するか設定することが可能です。

https://developer.hashicorp.com/terraform/cloud-docs/policy-enforcement/manage-policy-sets#create-policy-sets

# Policy Libraries で公開されているポリシーはまだまだ少ない(2024/06時点)
Policy Libraries はまだ Beta 機能ということもあり、公開されているポリシーも数十個程しかありません。HashiCorp 社含め企業が提供しているポリシーに限定するとさらに数は少なくなります。GA のタイミングでポリシーが拡充されることを期待します。

# まとめ
Terraform Registry の Policy Libraries を利用した HCP Terraform への Policy as Code 導入の概要と手順を記載しました。Policy as Code を導入したいけど、どこから手を付けたら良いか分からないという場合にはファーストステップとして Terraform Registry の Policy Libraries を使うと良さそうです。
Windows10を初期化する方法とは？事前にやっておきたい6つの準備や起動できない場合の対処方法を詳しく解説–情報システム部門を刺激するメディア「情シスのじかん」より

「情シスのじかん」は、情報システム部門のプロフェッショナルを対象としたメディアです。実務に役立つノウハウや革新的なアイデアを提供し、学びとネットワーキングの場を提供することを目指しています。最新の技術動向やベストプラクティス、成功事例を通じて、情シス担当者のスキルアップをサポートします。

ここで、Qiitaの読者の皆様向けに、「情シスのじかん」で公開された記事をピックアップ＆サマリ紹介します！Qiitaは技術者向けの情報共有プラットフォームとして、より実践的で具体的な技術情報を提供する場です。情シスのじかんは、特に情報システム部門に特化した内容を中心にしていますが、両者の強みを活かして、プロフェッショナルの皆様に有益な情報をお届けします。

### Windows10を初期化する方法とは？事前にやっておきたい6つの準備や起動できない場合の対処方法を詳しく解説
![windows10initialization_情シスのじかん.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816554/479038e0-6c74-7164-8b99-d88ae7d2be25.png)

この記事では、新しいシステムやデバイスの初期設定の基本手順とその重要性について解説しています。初期設定は、セキュリティの確保やパフォーマンスの最適化に直結するため、正確かつ迅速に行うことが求められます。初期設定の具体的なステップやチェックリストも提供されており、新人のIT担当者にも役立つ内容です。

https://josys.wingarc.com/josys-keyword-initialization

### 情報システム部門を刺激するメディア「情シスのじかん」とは？
![情シスのじかんbyWingArc1st (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816554/89afaa7e-b941-a10a-c813-8485daca4502.png)

初めまして、『情シスのじかん』です。
近日遂に、日本中の情シス部門のあなたを刺激するメディアが発足します！🚨
さぁ、テクノロジーを飼い慣らし、仕事や生活の質を向上させ、一緒に未来を切り拓きましょう。皆様の生活リズムに合わせた情報発信で、常に寄り添い、共に未来を切り拓くためのメディアです。

ぜひ、情報システム部門の皆様の活動の取材をさせてください。

https://josys.wingarc.com/about
[解決済み]特定のIDを持つユーザーのみが閲覧可能なページ作成

**[解決しました](#解決20240618)**
<br>
**勉強中の教材: [Brad Schiff - Let's Learn Laravel: A Guided Path For Beginners](https://www.udemy.com/course/lets-learn-laravel-a-guided-path-for-beginners/?couponCode=ST20MT50724)**
レッスン35

```:環境
Laravel 11.6.0
PHP 8.3.7
```
# 目的
Gateを使って、特定のIDが付けられたユーザーのみに閲覧許可されたページを作る。
今回の場合はidAdminが1のユーザーが対象であり、0のユーザーは非対象。

# 問題
教材では`AuthServiceProvider.php`にGateの設定をしていたが、Laravel11からはサービスプロバイダが`AppServiceProvider.php`のみとなる。
[Laravel11リリースノート - サービスプロバイダ](https://readouble.com/laravel/11.x/ja/releases.html#service-providers)

そのため`AuthServiceProvider.php`は削除し`AppServiceProvider.php`にGateの設定をしてみたところ、idAdmin1のユーザーでも閲覧拒否ページに飛んでしまった。
(ちなみに`AuthServiceProvider.php`に設定をしても結果は変わらない。）

# 設定
```:web.php
Route::get("/admins-only", function() {
    if (Gate::allows("visitAdminPages")) {
        return "Only admin.";
    }
    return "You cannot view this page";
});
```
```:AppServiceProvider.php
Gate::define("visitAdminPages", function(User $user) {
    return $user->idAdmin === 1;
});
```

# 結果
idAdminが1または0どちらでも「You cannot view this page」と表示されてしまう。

# 余談
一つ前のレッスンでidAdmin1のユーザーのみ、他人の投稿を編集・削除できるように設定し、正しく動いた。
誤字脱字はGPTに確認済み。
色々調べていると、bootstrapディレクトリに`providers.php`があるらしいのだが俺の環境にはない…。見様見真似で作ってみるがそううまくはいかず。
[こちら](https://www.socym.co.jp/download/1408/Laravel11_Support_Guide_1_0.pdf)を参考に`AppServiceProvider.php`を変えてみるも結果はかわらず。↓
```:AppServiceProvider.php
Gate::define("visitAdminPages", function(User $user) {
    if ($user->idAdmin === 1) {
        return true;
    }
        return false;
});
```
# 解決(2024/06/18)
```:環境
Laravel 11.6.0
PHP 8.3.7
```
兄にいろいろ案を出してもらいながらなんとか解決しました。
具体的な解決方法は確定していないものの、おそらく
- キャッシュクリア
- Laravel再起動

この2つが解決方法だったのではないか…という感じでした。

Log出力、dd出力で原因を探っていくうちに「`AppServiceProvider.php`が読み込めてなくね？」と言うところまで行きつき、キャッシュクリアと再起動という提案をもらってやったら…。
うおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお

ちなみになんやかんやいじりましたが、結局解決後のコードは[このまま](#設定)です。
# **<font color="#FF0000">あ</font><font color="#FF3300">り</font><font color="#FF6600">が</font><font color="#FF9900">と</font><font color="#FFCC00">う</font><font color="#FFFF00">谢</font><font color="#CCFF00">谢</font><font color="#99FF00">T</font><font color="#66FF00">h</font><font color="#33FF00">a</font><font color="#00FF00">n</font><font color="#00FF33">k</font><font color="#00FF66">Y</font><font color="#00FF99">o</font><font color="#00FFCC">u</font><font color="#00FFFF">감</font><font color="#00CCFF">사</font><font color="#0099FF">합</font><font color="#0033FF">다</font><font color="#0000FF">M</font><font color="#3300FF">e</font><font color="#6600FF">r</font><font color="#9900FF">c</font><font color="#CC00FF">i</font>**
「情シスのスキルマップ」とは？求められるスキルやおすすめな資格も紹介–情報システム部門を刺激するメディア「情シスのじかん」より

「情シスのじかん」は、情報システム部門のプロフェッショナルを対象としたメディアです。実務に役立つノウハウや革新的なアイデアを提供し、学びとネットワーキングの場を提供することを目指しています。最新の技術動向やベストプラクティス、成功事例を通じて、情シス担当者のスキルアップをサポートします。

ここで、Qiitaの読者の皆様向けに、「情シスのじかん」で公開された記事をピックアップ＆サマリ紹介します！Qiitaは技術者向けの情報共有プラットフォームとして、より実践的で具体的な技術情報を提供する場です。情シスのじかんは、特に情報システム部門に特化した内容を中心にしていますが、両者の強みを活かして、プロフェッショナルの皆様に有益な情報をお届けします。

### 情シスのスキルマップとは？求められるスキルやスキルアップにおすすめな資格も紹介–情報システム部門を刺激する“キーワード”
![5d6b684f13417133908dbcffc89b66eb.jpg (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816554/66d2e42f-4b5b-2986-e4f7-5adac64209ba.jpeg)
この記事では、システム管理者に必要なスキルを体系的に整理したスキルマップの重要性と活用方法について紹介しています。スキルマップは、個々のスキルレベルの把握や、組織全体のスキルギャップの特定に役立ちます。また、効率的な教育計画の策定やキャリアパスの明確化にも貢献します。システム管理者としての成長や組織全体のスキル向上を目指す方に必見の記事です。

https://josys.wingarc.com/josys-keyword-josys-skillmap

### 情報システム部門を刺激するメディア「情シスのじかん」とは？
![情シスのじかんbyWingArc1st (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816554/89afaa7e-b941-a10a-c813-8485daca4502.png)

初めまして、『情シスのじかん』です。
近日遂に、日本中の情シス部門のあなたを刺激するメディアが発足します！🚨
さぁ、テクノロジーを飼い慣らし、仕事や生活の質を向上させ、一緒に未来を切り拓きましょう。皆様の生活リズムに合わせた情報発信で、常に寄り添い、共に未来を切り拓くためのメディアです。

ぜひ、情報システム部門の皆様の活動の取材をさせてください。

https://josys.wingarc.com/about
PostgreSQLコマンド操作(PSQL)

RDS for PostgreSQLを構築して、ユーザのDBを取り込んだテストを実施することになった。実データ同様のデータベースを構築する必要が出てきた。
この準備に作業なステップは以下の通り
①RDS上でのデータベースの作成
➁スキーマの作成
③テーブルやインデックスの作成
RDS for PostgreSQLの構築は、AWSの管理コンソールから実施できるため、➁と③が実施できるようになることが必要要件である。

ローカル操作端末にPSQLコマンドが使えるようになった(PostgreSQLのクライアントをインストールされた)前提で、必要な手順を記載する。

## 管理者による接続
まずは、RDSの登録後にAWS管理コンソール記載の接続先URLに、登録時で指定のIDとパスワードで接続する。
```
psql -h test-db.hogehoge.ap-northeast-1.rds.amazonaws.com -p 5432 -U postgres -d postgres
```

## ユーザの作成
今回必要な操作を実施するためのユーザを登録する。
```
create user sctest with password 'Passpass';
```
CREATE ROLE
と表示され、ユーザ sctest が作成される。

## スキーマの作成
```
create schema sctest;
```
スーキマ sctest が作成され、要件のうち➁が完了

## ユーザへのDB操作権限の許可
作成済みのユーザには権限がなく、何もできないため、権限の強いロールを割り当てる。
```
ALTER schema sctest OWNER TO sctest;
```
強い権限という意味では、DBのオーナー権限を付与することでもできる。(以下は DB"postgres"のオーナーをユーザ sctestに付与する例)
ALTER DATABASE postgres OWNER TO sctest;
他に必要な要件があれば、更に実行しておく。
RDSのスーパーユーザ権限の付与: GRANT rds_superuser TO sctest;
DB作成権限の付与: alter user sctest CREATEDB;
ユーザ作成権限: alter user sctest CREATEROLE;
PSQLコマンドを抜ける
```
exit
```
## 作成したユーザでの操作
### PSQLコマンドでのDB接続
PSQLコマンドを使い、作成したユーザで接続する。
```
psql -h test-db.hogehoge.ap-northeast-1.rds.amazonaws.com -p 5432 -U sctest -d postgres
```
この時点でテーブルを作成してみたところ、テーブルはpublicスキーマにできてしまうことが判り、スキーマは明示的に移動する必要であることが判った。

### スキーマの移動
スキーマの移動は set search_pathを利用する
```
set search_path to sctest;
```
「SET」がエラーなく戻った後、current_schemaを確認する。
```
select current_schema;
```
想定したスキーマが表示されていればOK。
```
postgres=> select current_schema;
 current_schema
----------------
 sctest
(1 row)
```


## DB操作
### テーブル/索引の作成
```
create table taurin2000 (
  id character varying(8) not null
  , cntrcd character(6) not null
  , prod_name character varying(128)
  , prod_comment character varying(255)
  , update_count integer
);
```
CREATE TABLE
と表示され、コマンド成功が確認できれば、正しく権限が付与されている。(今回の③の要件もクリアしている)
操作は割愛するが、インデックスも同様に管理できる。

### 確認(コマンド操作)
SQL(SELECT)を実行してみる。
```
select * from taurin2000;
```
カラムが表示される。データは入ってないので、0行の結果となる。
 id | cntrcd | prod_name | prod_comment | update_count
----+--------+-----------+--------------+--------------
(0 行)
### データを入れてみる
```
INSERT INTO taurin2000(id, cntrcd, prod_name, prod_comment, update_count) 
      VALUES ('11111111', '111111', 'prod_name1', 'comment hogehoge', 0);
```
INSERT 0 1

### データ確認
```
select * from taurin2000;
    id    | cntrcd | prod_name  |   prod_comment   | update_count
----------+--------+------------+------------------+--------------
 11111111 | 111111 | prod_name1 | comment hogehoge |            0
(1 行)
```

## おまけ - コマンド以外の操作
コマンド以外のGUIツールで操作できると、SQLを組み立てなくても操作ができるので便利である。ここではPostgreSQL標準のpgAdminの例を添付しておく。

### pgAdminによる確認
pgAdminを起動すると、GUIツールが起動される。
メニューからPSQLを起動することもできる。
![PGAdmin0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/26abfe39-1124-c9c8-c3dc-ec9194d3695a.png)

せっかくのGUIツールなので、SQL操作なしでのデータ確認をしてみる。
![PGAdmin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/298463a1-fbf3-080c-89af-cd4adb6e270d.png)
いちいち大量のテーブル名カラム名等を打ち込む必要がないだけでなく、筆者のように、SQLの知識があやふやな人間にとっては、利便性を感じる。
筆者は他のツールも使っているので、機会があれば、照会したい。
OGPタグのまとめ

# OGPタグとは
OGPタグとは「Open Graph Protcol」の略です。OGPタグは、FacebookやX（旧Twitter）、Slack、LinkedInなどのSNSでシェアした際に設定したWEBページのタイトルや画像、詳細情報などを共有することができます。

# OGPタグを利用するメリット
正確な情報をユーザーに伝えることができるためです。
例えば、URLをシェアした際に、タイトルや画像が表示されないと、ユーザーがURLをクリックするかどうかを判断することが難しくなります。
そのため、OGPタグを利用することで、URLをシェアした際に、正確な情報をユーザーに伝えることができます。

# OGPタグの設定方法
OGPタグは、HTMLのheadタグ内に記述します。
以下に、OGPタグの設定方法を示します。
1. head要素に、以下のようにOGPタグを記述します。
`prefix="og: http://ogp.me/ns#"`
2. headerタグ内のmetaタグに、以下のようにOGPタグを記述します。
``` html
<meta property="og:url" content=" WebページのURL" />
<meta property="og:type" content="Webページの種類" />
<meta property="og:title" content="Webページのタイトル" />
<meta property="og:description" content="Webページの説明文" />
<meta property="og:site_name" content="Webサイト名" />
<meta property="og:image" content=" Webサムネイル画像のURL" />
```

- og:url
WebページのURLを指定します。相対パスではなく、絶対パスを指定します。
- og:type
Webページの種類を指定します。様々なtypeがありますが、一般的には「website」を指定します。
 - website: WebサイトのTOPページ
  - article: 記事ページ
  - blog: ブログページ
  - profile: プロフィールページ
  - video: 動画ページ
  - music: 音楽ページ
  - book: 書籍ページ
  - product: 商品ページ etc.
- og:title
Webページのタイトルを指定します。
- og:description
Webページの説明文を指定します。
- og:site_name
Webサイト名を指定します。
- og:image
Webサムネイル画像のURLを指定します。相対パスではなく、絶対パスを指定します。

# まとめ
OGPタグを利用することで、URLをシェアした際に、正確な情報をユーザーに伝えることができます。
OGPタグは、HTMLのheadタグ内に記述し、og:url、og:type、og:title、og:description、og:site_name、og:imageを指定します。

# 参考
- https://ogp.me/
Mac Homebrewって何？おすすめのパッケージ紹介

本記事ではMacに存在しているHomebrewについて説明する．Homebrew は，MacOS（および Linux）用のフリーでオープンソースのソフトウェアパッケージ管理システム．このツールは，UNIXツールを簡単にインストールし，ソフトウェアを容易に管理できる．

# Homebrewの特徴
簡単にHomebrewにことまとめると以下のようになる．

- **簡単なインストール** コマンド一つで多くのパッケージを簡単にインストールできる．また，Homebrewは使用が非常に簡単で，パッケージのインストール，アップグレード，削除がコマンドラインから直接行える．

- **広範なパッケージ** Homebrewには数千のパッケージが用意されており，開発ツール，ライブラリ，ゲームなどある．

- **自動依存関係管理** パッケージをインストールする際に必要な依存関係も自動で管理し，インストールする．

# Homebrewのインストール方法
```bash
/bin/bash -c "$(curl -fsSL /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

```
echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile
```





# Homebrewでよく使うコマンド
### インストール 
```bash
brew install <パッケージ名>
```

### アンインストール
```bash
brew uninstall <パッケージ名>
```

### パッケージ情報の検索 
```bash
brew search <キーワード>
```

### インストール済みパッケージの一覧表示 
```
brew list
```

### パッケージの更新
```bash
brew upgrade <パッケージ名>
```

### Homebrew自体の更新
```bash
brew update
```

# よく使うパッケージ
## 開発ツール
### git
バージョン管理システム

https://qiita.com/tarakokko3233/items/ad7e1a1a14d3e2f10da3

### node
JavaScript ランタイム環境

### python
プログラミング言語

### go
Google によって開発されたプログラミング言語

### rust
メモリ安全性に焦点を当てたプログラミング言語

### ruby
プログラミング言語

## データベース
### postgresql
オープンソースのリレーショナルデータベース

### mysql
オープンソースのリレーショナルデータベース

### redis
キーバリューストア

### sqlite
軽量なバイナリのDB

## ユーティリティ
### tree 
ディレクトリやファイルの構造をツリー状に出力する．

https://qiita.com/tarakokko3233/items/0fbe72cd6a38add7b83c

### wget
ネットワーク経由でファイルをダウンロードするコマンドラインツール

### curl 
データ転送ユーティリティ

### htop 
インタラクティブなプロセスビューア

### raycast
色々なショートカットができるツール

## 通信ツール
### nginx 
HTTP サーバーおよびリバースプロキシ

### apache 
Web サーバーソフトウェア

## マルチメディア
### ffmpeg 
マルチメディアファイルを変換するツール

https://qiita.com/tarakokko3233/items/cb9b9000ccfbdf9971cd

## セキュリティ
### openssl 
SSL/TLS プロトコル用のセキュリティ関連ツールキット
[AWS #5]AWSの責任共有モデル

## はじめに
こんにちは
今回からは **「AWSのセキュリティ」** 分野について取り上げていきたいと思います。
まずはAWSにおけるセキュリティに関しての基本的な考え方などの全体像を押さえていきたいと思います。
## AWSの責任共有モデル
AWSにおけるセキュリティの考え方については<font color=red>**「AWSにおいてセキュリティは最優先事項」**</font>であると**AWSが強調**しています。そのため、AWSは**膨大なコストをかけてセキュリティを担保**しています。

しかし、AWSがどれだけコストをかけてセキュリティを担保したとしても、AWSの利用者が好き勝手に利用してしまうとセキュリティを維持することができなくなってしまいます。ユーザーがコントロールできる範囲では**要件に対して適切なセキュリティを設定**する必要があります。

そこでAWS上の「セキュリティ」に対して<font color=red>**「AWS側の責任」**</font>と<font color=red>**「利用者側の責任」**</font>を示した
**「責任共有モデル」** という考え方を採用しています。
![AWS05_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806875/a06986cb-f4e3-2e9c-aee6-882cb6582611.png)

:::note info
セキュリティが**最優先事項**
:::
:::note info
セキュリティを**担保するために莫大なコストをかけている**
:::
### 責任範囲
![AWS05_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806875/71d53d30-e94f-d781-5d21-60a030a9a3f8.png)
ざっくり言うと
AWSは **「クラウドのセキュリティ」** に対して、
利用者は **「クラウド内のセキュリティ」** に対して責任を持ちます。
## AWSの責任範囲
**AWSはクラウド本体のセキュリティ部分を担当**します。下記でその一例を紹介します。
![AWS05_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806875/416f682b-6157-771c-0944-ae8245e4e66b.png)
**「データセンター」**
管理人、防御壁、監視カメラなどを用いて**データセンター内に不審者を入れない**ことで担保しています。

**「ハードウェア」**
データセンター内の発電、冷暖房設備などで**サーバーを正常に稼働させる**ことで担保しています。

**「ソフトウェア」**
**アクセスの制限や、脅威検出機器などを用いる**ことで担保しています。
## 利用者の責任
**ユーザーはクラウド内のセキュリティを担当**します。
![AWS05_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806875/0128ce80-3a0a-19a0-772f-56ec1cf677d0.png)
:rolling_eyes:うーん…いっぱいあるけど**結局何をしたら良いのやら**
:upside_down:そんな時はAWSの**ベストプラクティス**としてユーザーがセキュリティに対してどのような事を意識して何（パスワード管理、データ暗号化など）を実施すれば良いかを示しているので確認してみると良いでしょう
### ユーザー側のベストプラクティス
**1.「伝送中、保管中のデータの保護」**
データを[機密性](https://www.idcf.jp/words/confidentiality.html)レベルに分類します。そして暗号化、アクセスコントロールなどを使用してデータを守りましょう。

**2.「強力なアイデンティティ基盤の実装」**
[IAM(Identity and Access Management)](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_users.html)ユーザーを作成してアクセス権限を管理します。
それにより、重要な情報にアクセスできる利用者を限定して**不正アクセスを防ぎます。**

**3.「全てのレイヤーでセキュリティを適用する」**
複数のセキュリティコントロールを使用して、VPC、インスタンス、オペレーティングシステムなど全てのレイヤーにセキュリティを適用しましょう。
## まとめ
:::note info
責任共有モデルは、AWS上のセキュリティに対して**AWS側の責任**と**利用者側の責任を示したもの**です
:::
:::note info
**AWSはクラウド本体のセキュリティ部分を担当**
:::
:::note info
**ユーザーはクラウド内のセキュリティ部分を担当**
:::
:::note info
ユーザーがクラウド内のセキュリティ部分を守るために、**ベストプラクティスが存在します**
:::
## おわりに
AWS責任共有モデルは、**「AWS」と「ユーザー」での責任分担を示すフレームワークです**。それぞれの責任範囲を正確に覚えていきたいと思います。
最後までお読みいただきありがとうございました！

>日頃より活用している参考書です。
>> **「参考書」**
[AWS認定クラウドプラクティショナー改定第3版](https://x.gd/19i6N)
>
> **「AWS公式サイト」**
[責任共有モデル](https://aws.amazon.com/jp/compliance/shared-responsibility-model/)
>
> **「Youtube」**
[【CLF-C02：AWSクラウドプラクティショナー】第10回 責任共有モデル (セキュリティとコンプライアンス分野)](https://x.gd/iPBYx)
機械学習で用いるエンコーディング手法とユースケースをまとめてみた

## はじめに

機械学習では、モデルに与えるデータを適切に準備することが非常に重要です。特にカテゴリカルデータ（文字やカテゴリ）を数値データに変換するエンコーディング手法は、モデルの精度に大きな影響を与えます。本記事では、一般的なエンコーディング手法とそのユースケースについて、表形式で詳しく説明します。

## エンコーディング手法

エンコーディングは、カテゴリカルデータを数値に変換するプロセスです。これにより、機械学習モデルがデータを適切に処理できるようになります。以下の表に、代表的なエンコーディング手法とそのユースケースをまとめました。

| エンコーディング手法     | 概要                                                                                           | ユースケース                                                                                         |
|----------------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|
| ラベルエンコーディング  | 各カテゴリをユニークな整数に変換します。                                                     | カテゴリ間に序列がある場合に有効。例: サイズ（小、中、大）                                          |
| ワンホットエンコーディング | 各カテゴリを二進数のベクトルに変換し、1つのカテゴリだけが1、それ以外は0になります。             | カテゴリが多くない場合に有効。例: 色（赤、青、緑）                                                 |
| バイナリエンコーディング  | 各カテゴリを二進数に変換し、バイナリ形式の数値に変換します。                                   | 高次元のカテゴリカルデータに対して有効。例: 顧客ID                                                |
| ターゲットエンコーディング | 各カテゴリを目標変数（ターゲット）の平均値で置き換えます。                                     | カテゴリカル変数が多く、データ量も多い場合に有効。例: 顧客の購入履歴に基づく購入予測            |
| 順位エンコーディング     | 各カテゴリに順位をつけ、順位を数値で表現します。                                               | 序列データに対して有効。例: 教育レベル（高校卒、大学卒、大学院卒）                                 |
| 頻度エンコーディング     | 各カテゴリをそのカテゴリの出現頻度で置き換えます。                                             | 出現頻度が重要な情報を持つ場合に有効。例: 商品の購入回数                                          |
| 平均エンコーディング     | 各カテゴリを目標変数の平均値で置き換えます。                                                 | ターゲットエンコーディングと似ていますが、異なる集計方法を用いる場合に有効。例: 商品の平均価格   |
| 正規化エンコーディング   | 各カテゴリを0から1の範囲に正規化された数値に変換します。                                     | モデルが特定の範囲内のデータを要求する場合に有効。例: ニューラルネットワーク                     |
| ベイジアンエンコーディング | カテゴリを目標変数の確率で置き換え、事前確率を考慮したベイズ推定を使用します。                 | データが少ない場合や、カテゴリが多い場合に有効。例: レコメンデーションシステム                   |
| エンベディングエンコーディング | ニューラルネットワークを使用して、カテゴリを低次元の連続ベクトルに変換します。                 | 高次元で複雑なカテゴリデータに対して有効。例: テキストデータのエンコーディング                   |
| カウントエンコーディング | 各カテゴリの出現回数で置き換えます。                                                         | 頻度エンコーディングと似ていますが、カウントの絶対値を使用する場合に有効。例: 単語の出現回数   |

## エンコーディング手法の選択

どのエンコーディング手法を選ぶかは、データの特性やユースケースによります。例えば、カテゴリ間に自然な順序がある場合はラベルエンコーディングが適していますが、順序がない場合はワンホットエンコーディングが適していることが多いです。また、カテゴリの数が多い場合や、ターゲット変数との関係が重要な場合には、ターゲットエンコーディングが有効です。

## おわりに

エンコーディング手法は、機械学習の前処理において非常に重要なステップです。適切な手法を選ぶことで、モデルの性能を向上させることができます。本記事が、エンコーディング手法の選択に役立つ参考資料となれば幸いです。
IBM i サービスの活用例：CLPからSQLベースへのオープン化・標準化

いろいろとIBM i サービスをご紹介していますが、***IBM i サービスの大きな目的・メリットは「従来のIBM i独自操作やスキルをなくしていこう、クラウド・オープン系と共通でSQL、APIで統合管理していこう***　という点にあります。

※2025/02/17追記：
----
当記事執筆時点（2024年7月頃）はまだ実際の案件でIBM i サービスを使おう（使った方がいいのでは？）というのはそれほど多くなかったように記憶していますが、昨年後半くらいから徐々にIBM i サービスの方がいいかな、と感じるケースが増えています。
具体的に言うと操作担当者がIBM iに精通していない、SQLは使いこなせる方からのご相談、5250によらず管理したいというケースなどです。

----


CLPはUNIXやWindowsのシェル、バッチと同じで色々と巧みな技が活きますが、継承、や標準化の観点ではデメリットも言われるようになってきました。

ということでIBM i サービスの使い方の基本的な考え方をご紹介します。

## IBM iの運用管理一覧（例）

全体像はこんなかんじでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/5a0f137c-9a8d-1ca6-64f3-5583b34e7dfe.png)


## ユースケース例：ユーザーパスワードの変更

レガシーなやり方（左）をIBM i サービスを基本にSQL、オープン標準に移行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/b1b28ea1-dd76-7e07-576a-0daa2890df0c.png)


## ユースケース例：バックアップ実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/51b537ac-6cf3-c113-19e1-d37430df9e91.png)

サンプルコード？的なものもfyi程度ですが貼ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/a867e704-fd7e-258a-9863-95ab6673e474.png)

例：SAMLPE　で始まるジョブが実行中かどうかを取得
```
	SELECT * FROM TABLE ( QSYS2.ACTIVE_JOB_INFO( 
　　　　		：
　　	JOB_NAME_FILTER => 'SAMPLE*‘, 
　　　　		：) 
```

IBM iサービス QCMDEXECプロシージャーで後続処理を実行
例：DEMOLIB/BCH110を実行
```
	CALL QSYS2.QCMDEXC('ADDLIBLE DEMOLIB’);
	CALL QSYS2.QCMDEXC('CALL DEMOLIB/BCH110');
```

## 注意点・考慮事項

IBM i サービスと従来のCLPによる運用・操作は完全に同一な機能を網羅していません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/d6679fbf-26a0-4127-09aa-8663810d572f.png)

不足している機能はCLPを補完的な利用が必要な場合もあると思います。
一方で、これはIBM i サービスの方が絶対楽というのもいろいろ出てきました。

例）
[IBM iのIFS（統合ファイルシステム）のファイルサイズを調べたい](https://qiita.com/gomAnomalocaris/items/239abd057214ff9203d4)
[QSYS2.ACTIVE_JOB_INFO テーブル関数](https://qiita.com/gomAnomalocaris/items/385832bab2fdf89770f9)
[SYSTOOLS.FIRMWARE_CURRENCY ビュー　とファーム更新情報サイト](https://qiita.com/gomAnomalocaris/items/cdbdb9fb12f61bbfaa69)
[SYSTOOLS.Defective_PTF_Currency ビュー　適用済みPTFの更新有無確認](https://qiita.com/gomAnomalocaris/items/b8130f975124d8eef1b7)
[SYSTOOLS.DELETE_OLD_SPOOLED_FILES プロシージャー](https://qiita.com/gomAnomalocaris/items/ca476e05e7de25f4b6a1)
[SYSTOOLS.COMPARE_FILE 表関数①Db2テーブルの比較](https://qiita.com/gomAnomalocaris/items/bc55fe598c40d62207c5)
[SYSTOOLS.COMPARE_FILE 表関数②ソースPFの比較](https://qiita.com/gomAnomalocaris/items/a96a4840539fddaff2e5)
[SYSTOOLS.RELATED_OBJECTS 表関数](https://qiita.com/gomAnomalocaris/items/da27b55c4c6ffbd865d1)


最初はなー、という声が聞こえてきそうですが、SQLかんたんです。ぜひチャレンジしてみてください♪
LINE占いからシェルスクリプトで今日の占い1位の星座を取得する方法



## 背景
Jenkinsで、毎日決まった時間にLINEの星座占いの1位を星座をチャットに流したい

占いページはこちら
https://fortune.line.me/horoscope/


## 以下で取得

```
# URLからHTMLを取得
FORTUNE_URL="https://fortune.line.me/horoscope/";
HTML=$(curl -s "$FORTUNE_URL");

# HTMLから占いの順位部分を抽出
FORTUNE_RANKING=$(echo "$HTML" | grep '<script id="__NEXT_DATA__" type="application/json">' | awk -F'<script id="__NEXT_DATA__" type="application/json">|</script>' '{print $2}')

# jpNameキーが最初に現れる位置を探す(=1位)
index=$(echo "$FORTUNE_RANKING" | grep -Eo '"jpName"\s*:\s*"[^"]+"' | head -n 1)

if [ -n "$index" ]; then
    # jpNameキーが見つかった場合、その値を取得する
    rank1SignName=$(echo "$index" | sed -E 's/"jpName"\s*:\s*"([^"]+)"/\1/')
else
    rank1SignName="jpNameが見つかりませんでした。";
fi

# 以下にrank1SignName をチャットのAPIに渡してチャットに飛ばす処理を書く

```

## 悩んだところ

- mac OSなので、`grep -oP` が使えなかったので別のコマンドで対応
- もっといい方法が欲しかったが時間もなかったので、取得したデータで、一番最初に `jpName` が出現した時が1位の星座なので、今回はそちらを見るようにした

## 結果

![スクリーンショット 2024-06-17 16.14.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3327773/8ef7bbcc-dc9c-b871-1587-94c4ada01f84.png)

出来た。
paiza.ioでelixir その289

# 概要
paiza.ioでelixirやってみた。
Node、やってみた。

# サンプルコード

```


IO.inspect(node())

IO.inspect(Node.get_cookie())

IO.inspect(:global.registered_names())

IO.inspect(:erl_epmd.names())

IO.inspect(File.cwd!())

System.get_env()
|> IO.inspect

IO.inspect(Node.list())
IO.inspect(Node.list(:this))

System.cmd("epmd", ["-daemon"])
|> IO.inspect

#Node.start(:example, :shortnames, 15000)
#Node.start(:example, :longnames)
Node.start(:"test@ohisama.llc")

|> IO.inspect

Node.set_cookie(:SOMECOOKIE)
IO.inspect(Node.get_cookie())

Node.self()
|> IO.inspect




```

# 実行結果

```
:nonode@nohost
:nocookie
[]
{:error, :address}
"/workspace"
%{
  "BINDIR" => "/usr/lib/erlang/erts-10.6.4/bin",
  "EMU" => "beam",
  "HOME" => "/workspace",
  "HOSTNAME" => "da8a866c7e4f",
  "LANG" => "en_US.UTF-8",
  "PATH" => "/usr/lib/erlang/erts-10.6.4/bin:/usr/lib/erlang/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  "PROGNAME" => "erl",
  "PWD" => "/workspace",
  "ROOTDIR" => "/usr/lib/erlang",
  "RUNNER_USER" => "runner3"
}
[]
[:nonode@nohost]
{"", 0}
{:ok, #PID<0.97.0>}
:SOMECOOKIE
:"test@ohisama.llc"
```

# 成果物


https://paiza.io/projects/mmuwpI08a-Yv9fDWCzmG2w


以上。
Pythonで、10進数→n進数、n進数→10進数に変換してみた

私たちは、一般的に10進数を使っています。これは、10を基数とした表現法です。
0から9の10個の数字を使って数を表現し、10になると、桁が上がります。

ここで、私はPythonを使って、n進数に変換できないか興味を持った。この記事の目的は、10進数をどのようにn進数へ、n進数をどのように10進数に変換するかを説明したい。

### 10進数からn進数への変換方法

```
x = "10"
#2進数への変換
print (int(x,2)) 
#6進数への変換
print (int(x,6)) 
#8進数への変換
print (int(x,8)) 
＃16進数への変換
print (int(x,16))
```
### 実行結果
```
2
6
8
16
```
### n進数から10進数への変換方法
```
#2進数への変換
print (int('10100',2))
#6進数への変換
print (int('32',6))
#8進数への変換
print (int('24',8))
＃16進数への変換
print (int('64',16))
```
### 実行結果
```
20
20
20
100
```

皆さんもこのプログラムコードを参考にして、時間があるときに10進数からn進数、
n進数から10進数に、適当な値を変換したらいかがでしょうか。