タグ: Python

  • 9月8日 今日の私

    9月8日 今日の私

    うまくいったこと

    • 台風の中、会社に出社できた。思ったほど強くない台風7号は、とてもノロノロとしたスピードで日本へ上陸しようとしている。家から出るの、ダルいなぁ、ってだいぶ萎えたけどね。けどこういう機会がないとレインブーツを履く機会がないんだよな。
    • お昼ご飯はサラダ。Crisp Salad worksっていうお店。サラダごときに1500円?!と最初の頃は思っていたけれど、今では他に食べたいものがなければここにしてる。美味しい、食べやすい、翌日の便通が良い、のあたりがお気に入りポイント。

    うまくいかなかったこと

    • (実際にはうまくいかなかったわけではない、なぜならこれは私のサブタスクに近いものだから)Pythonの勉強に結びつくようなチャレンジがなかった。コードのほとんど全てをChatGPT-4に聞いており、せめて写経するくらいのことはしない限り、私のPythonコードスキルは上がっていかないような気がする。
    • ちなみに今日も私が願っているようなものは生成できなかった。BERT+GPT-2という組み合わせがよくないのか、それともGPT-2に頼りすぎているのか、それすらもよく分かっていない。困る。来週水曜に偉い人に進捗を報告するので、もうちょい本気出してやらないといけない。
    • Google Colabで回しすぎて、上限だぞ!って怒られた。上限があるなんて知らなかった。ChatGPT-4も上限に達しちゃったりするし、私、無駄に回しすぎな気がする。

    改善できる点

    • ChatGPT-4、Google colabいずれも、必要最小限で回す。
    • Pythonの勉強を兼ねて、ChatGPT-4からそのままコピペするのではなく写経するなどして自分が考えながらコードを書くようにする。

    所感

    • 来年の手帳をどれにしようか、毎日考えてしまう。幸せな悩みだなぁと思う。今のところ、ほぼ日カズンDay-freeにしようかと思っている。日付ありにするか迷っているところ。最近、ちょっと手帳に疎かになってきていて、毎日毎日書くことなんてないよなー、というマインドになっているので。それでも書くことをやめなければ、どっかで何かのブレークスルーを迎えることができるような気がしなくもないんだよなぁ。何を目指しているかはわからないけど。
    • Pythonの勉強について、基本的な構文はなんとなーく理解できてきてるんだよな。この次は自分が好きそうなライブラリの使い方を覚えていくと良いらしい。今のところ気になるのは、QAという職業柄unittestかpytestが気になっている。
    • TDDとBDDについて少し思い返すところがあった。Pythonで、それらを使った何かモックみたいなものを作ってみると、自分の理解が深まるのかなぁと思ったりする。例えばポーカーとか。そういうトランプゲームだったら、UIが不要だったりするから、サクっと作れちゃったりするんだよなぁと思う。
  • 9月7日 今日の成果など

    9月7日 今日の成果など

    うまくいったこと

    • あるウェブサイトのテストケースを生成AIを使って作成したいと思っている。インプットとなるのはユーザーストーリー。それを取り込み、BERTとGPT-2を使ってファインチューニングし、テストケースを生成するところまでできた。

    うまくいかなかったこと

    • テストケース的なものは生成できたのだけれど、私が求めているようなテストケースではなかった。
    • そもそもPythonのことを良く分かっていないので、どこをどう直せば良いのか、それもChatGPTに聞いて修正するというやり方で改善を試みた。
    • 結果的に、まだ「ちゃんとできた」ところまで至っていない。

    改善できる点

    • インプットとなるユーザーストーリーをもっと情報を多くすることを考えてみる。
    • Pythonについては、そもそもPythonのコードがどういう構造なのかをきちんと理解して、自分の求めるテストケースを生成できるようにしたい。

    所感

    • 分からないことを、ちゃんと理解しないと、学習には結びつかないと思った。何が分からないのか分からないという状態では、何を勉強したら良いのかがはっきり見えてこないので。
  • (HSPな人向け)ChatGPTと話しながら、プログラミングの勉強をしてみる

    (HSPな人向け)ChatGPTと話しながら、プログラミングの勉強をしてみる

    すこーしだけ前に、世間を騒がせたChatGPT。
    使い方は様々と言われており、自分のクリエイティビティを刺激してくれます。

    ChatGPTのプラン

    ChatGPTには2つのプランがあり、ざっくり言うと無料プランと、有料プランに分かれています。
    私はお試しとして1ヶ月だけ有料プラン(月額20USドル・2023年8月1日現在)に入ったのですが、課金してもそんなには変わらないんじゃないかなー、という印象です。
    一般人、ITにあんま詳しくない素人だと、違いはそんなにないのかもしれません。(あくまで私の感覚値です

    プログラミングをゼロからスタートしてみる

    さて、私はかねてよりPythonを学習したいと思っており、仕事の手が空いた時にはVS codeを開き、適当な学習サイトをググってみて、そこに載っているコードを自分でタイピングしてみる、と言うことをやっているのですが、

    要件 → (見えない何か) → コーディング

    この、(見えない何か)の箇所が、どうしても分からないから一向に理解が進まないと言う現状がありました。

    そこで、この部分をChatGPTに教えてもらえば良いのでは?と神が降りてきて私に囁き、そうか、とトライしてみることに。

    結論から申し上げると、これはめっちゃ役に立ちます。
    分からないところをガツガツ聞いても怒られないので、私が納得するところまで聞くことができます。

    とは言え、何を学べば良いのだ?!となってしまうんですが、ここで、世界共通でできるゲームを選べば良いんです。
    私はポーカーを選びました。

    ポーカーで試してみた

    まず、ChatGPTにポーカーの要件は?と聞いてみます。
    得られた結果がこちら。

    以下はポーカーゲームの一般的な要件の例です。ポーカーゲームは多くのバリエーションがあるため、ゲームの具体的なルールによって要件が変わることがありますが、一般的な要件を以下に示します:

    1. デッキの作成:
    • カードのランクとスートを組み合わせてデッキを作成する。
    • デッキには52枚のカードが含まれる。
    1. カードのシャッフル:
    • デッキからカードをランダムにシャッフルする。
    1. プレイヤーの参加:
    • ゲームに参加するプレイヤーを登録する。
    • ゲームには最低2人以上のプレイヤーが必要である。
    1. カードの配布:
    • シャッフルされたデッキからカードを順にプレイヤーに配布する。
    • 各プレイヤーには最初に5枚のカードが配られる。
    1. ベッティング:
    • プレイヤーは手札を見てベッティングを行う。
    • ベッティングには異なるタイプのベット(例:チェック、コール、レイズ)が含まれる。
    1. カード交換(オプション):
    • プレイヤーは一部またはすべての手札を交換することができる(ドロー)。
    • カード交換を行わない場合もある(ドロームーション)。
    1. 役の評価:
    • プレイヤーの手札を評価して役を判定する。
    • 一般的なポーカーの役は、ハイカード、ワンペア、ツーペア、スリーカード、ストレート、フラッシュ、フルハウス、フォーカード、ストレートフラッシュ、ロイヤルフラッシュなどがある。
    1. 勝敗判定:
    • プレイヤーの手札の役を比較して、最も強い役を持つプレイヤーが勝利する。
    • 勝利したプレイヤーはポットを獲得する。
    1. ゲームの繰り返し:
    • ゲームを複数のラウンドで繰り返し行う。
    • プレイヤーは途中で降りる(フォールド)ことができる。

    以上が一般的なポーカーゲームの要件の一部です。ゲームのバリエーションやルールによって要件が異なる場合もあるため、具体的なポーカーゲームに応じて要件を調整する必要があります。

    ChatGPTの回答(2023年8月1日現在・Chat GPT3.5

    ふむふむ。ぱっと見、誰でも知っているような要件ですね。目新しいものは何もない。
    さぁ、ここで、またしてもChatGPTに聞いてみます。

    コードはこちら。

    カードのランクとスートを定義

    ranks = [‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ’10’, ‘Jack’, ‘Queen’, ‘King’, ‘Ace’]
    suits = [‘Hearts’, ‘Diamonds’, ‘Clubs’, ‘Spades’]

    デッキを作成する関数

    def create_deck():
    deck = [(rank, suit) for suit in suits for rank in ranks]
    return deck

    1のコード。ChatGPT3.5(2023年8月1日現在

    ここで、もし自分のPythonスキルがこのコードを読むに至らない場合、詳しく解説をしてもらう必要があるでしょう。
    私の場合、デッキを作成する関数のところがよく分からなかったので、詳しく解説してもらいました。

    このような感じで、詳細説明までしてくれるので、聞くのが怖い、と言う人にもおすすめです。

    そう、何が良いって相手が機械だから、相手の機嫌などを気にしなくても良いのです!!
    私みたいな小心者は、相手の機嫌を伺ってみて、今なら聞ける!みたいなタイミングで聞こうと頑張ってしまうので、そこを気にしなくても良いというのは本当にありがたいです。

    脱線しますが、HSP気質の人には機械を相手にするのって良いのかもしれません。
    私もHSPなので、人とコミュニケーションするのは嫌いではないけれど、長時間は疲れる、、となってしまうので、いつ、どんな時でも聞ける環境というのはありがたいものです。
    聞いても十分な答えをくれなかったり、自分の期待していなかった答えだった時に、突っ込んで聞いてみるとか、そういうのにものすごくカロリーを使う人には、ChatGPTみたいな生成AIを相手にするのってすごく助かります。
    そんな人に届いてくれたら嬉しいなぁ、このブログ。

  • 8月1日 成長することについてその3

    8月1日 成長することについてその3

    仕事の合間に、自分のプログラミングスキルを向上させたいと思ってて、Pythonで簡単なトランプのゲームを考えている。ポーカーとか、ブラックジャックとか。
    順番としては明確で、要件をざっくり考えて、それをモジュール化させていき、プログラミングをしていく。
    その、モジュール化させていくところがとても難しい。
    なぜなら、私はざっくりとしたPythonの基本構文は覚えたものの、要件を噛み砕いてどうプログラムとして組み立てていけば良いのか分からないから。
    ここは一般的には「基本設計」「詳細設計」と呼ばれる箇所で、プログラミングをやっている人なら頭で思い描けるところなのかもしれないけれど、まだ私はそこに至っていない。

    私がまだ分かっていない、と理解するのは重要だ。
    なぜなら私が学ぶべきポイントが理解できるからだ。
    いわゆる、ロジカルシンキングと呼ばれる部分になるだろう。
    例えばポーカーで考えると、

    • カードをシャッフルする
    • カードを5枚配る
    • なにか役が揃ってるか確認する
      • 揃ってたら、ホールドする
      • 揃ってなかったら不要なカードを捨てて、新たにカードを受け取る
        みたいな感じで、要件を詳細化して、それをプログラミングするためにどう考えていくか、みたいなものをやっていく必要があるんだろう。

    そうか、私は要件を噛み砕くところからきちんとやっていかなければいけなさそうな気がしてきたぞ。

    私は一体、なにを目指しているんだろう。
    少なくとも、今の自分に足りないものを取り入れ、今日よりも成長した自分になりたいのだろう。
    成長の機会って無意識なところから生まれる、と昨日書いたけれど、それが意識できるところまで煮詰まってきてからは、本を読んだり、ウェブサイトで調べてみたりして、自分の欲しかった知識を手に入れれば良いだけなんだろう。
    この先、もし会社をクビになっても、一人で生きていけるような力をつけていきたい。
    プログラミングのスキルは、実際に問題を解決するためにも必要なものだ。
    この学習を通して、プログラミングだけではなく、問題解決に取り組む力をつけていきたい。問題をどのように解析し、効率的に、そして品質の高いアプローチを身につけられたら嬉しい。

  • 7月11日 何度目かのテスト自動化にトライ

    7月11日 何度目かのテスト自動化にトライ

    今日はセブンイレブンの日か。

    今日はPythonを使ったテスト自動化を勉強する時間があった。独学で。
    広大なインターネットの海を泳いでいれば、調べ方さえきちんとしていれば、ある程度確信度の高い情報が集まるよなー、と思っている。

    やっているのは、Python、Selenium、Behave(Cucumber)のあたり。
    これからの時代は自動化だよなー、と10年くらい前から考えていて、そうなると私はテストを自動化するエンジニアへと目指していくべきなんじゃないか、と思いつつ、だけどプログラミング言語を覚えるのがなー、そこが学校とか通えば良いんだろうけど、腰が重たいんだよなー、と思いながら、ほんとに10年くらい経ってしまった。
    2013年頃に、Pythonでしょ!と自分の中で決めた部分があったので、その部分で発生した熱を冷ます事なく、自分なりに地味に勉強していったら、今とは違った世界が見えていたかもしれない。
    たらればだからさ、そんな仮定の話をしていてもしょうがないんだけど、2013年にPythonを使ってテストを自動化するスキルを身につけていたら、今よりも尖ったテストエンジニアになっていたかもしれないなぁ。その頃Pythonがまだ流行り始めだったような気がするし、テスト自動化についてもまだそんなに、って感じだったからなぁ。
    時の流れというのは早いものですね、とぼんやりしてしまっている。

    だけど違うんだよ、今ここで、また何度目かの炎が生まれているのは確かなんだから、それを、今度こそは温め続けて、いつか大きな炎へと変えていきたいと思っているんだよ。
    今度ばかりは本気だぞ、と何度口にしただろう、だけど今度こそ、という気分でいる。
    小説を描くのと同じで、毎日でも地味にやってったら良いんだよなぁ多分。
    そうすることで、昨日学んだことを忘れないはずだから。
    そしてここで、今日の成果を書いていけば、それがまたモチベーションとなり、明日も頑張ろう、となるような気がするから。

    今日学んだこと

    • Pythonを使ったChromeの起動
    • Behaveの文法(Given, When, Then)
    • Featureファイルと、Step definition のフォルダ構成
    • Seleniumでの、find_element
      これちょっと罠にハマったんだよなー。
      XPATHでfind_elementしたかったんだけど、これ最近?のSeleniumの仕様で表現が変わったらしく、それに気づかずにうんうんと唸り続ける時間帯が辛かった。
      ちなみに現行仕様だと driver.find_element(By.XPATH, “”)が正しい模様
    • Pythonでプログラムを止める方法(time.sleep(10))
    • Pycharm ではCucumberのfeatureファイルを実行できず(プロだけの仕様らしい)、結局COT Editorとターミナルで動かしている。IDEなんて知らんわ、と言う気分で
  • テスト駆動開発 4日目

    テスト駆動開発 4日目

    前回のところで、次のステップを書いたところ、予定通りにAttribute errorが出されました。

    Attribute Error で怒られた

    ちょっと待て

    違う、私がやりたかったのはケント・ベックさんのテスト駆動開発を写経したかったのではなく、Pythonでテスト駆動開発を体験したかったんでした。
    なぜケント・ベックさんのテスト駆動開発を参照したのかというと、テスト駆動開発へのとっかかりを思い出したかったからです。

    気を取り直す

    さて、それでは何の題材に選べば良いのか?とかるーくググったところ、fizzbuzz問題というのがありました。
    というか、とても良い写経の題材がありました。リンクはこちら。

    fizzbuzz問題ってなに?みたいなのはこのリンク先をご参照いただくとして、私の、このブログではテスト駆動開発を進めていきたいとおもいます。

    何は無くともToDoリスト

    最初は、ToDoリストを作るところから。ここから写経になります。

    1. 数を文字列にして返す
      1. 1の時は、1と表示する
      2. 2の時は、2と表示する
    2. 3の倍数はFizzと返す
    3. 5の倍数はBuzzと返す
    4. 3と5の倍数はFizzBuzzと返す

    そしてコード。ここも分からないことだらけですが、いったん写経してみます。ホント、Qiitaで書いてくださった方、感謝です

    import pytest
    
    class TestStringConvert:
        # 前準備
        @pytest.fixture
        def target(self):
            from fizz_buzz import string_convert
            return string_convert
        
        # 検証
        def test_return_value(self, target):
            assert target(1) == '1'

    ドキドキで実行してみると、出たよー見つからないやつー環境変数に追加しないといけないやつー。もう見慣れました。

    pytestはどこだよ!って怒られている

    もう疲れた、、今日はここをキャンプ地とさせていただきます。

  • テスト駆動開発 1日目

    テスト駆動開発 1日目

    たまには仕事のことを。
    新たに、テスト駆動開発の分かるエンジニアになりたいな、と思っていて、これは夢でも理想でもなく、割と現実の延長線上にこの生き方があると信じてやみません。

    以下、今の私。これから始めるにはとても良い機会すぎる。10月24日という中途半端さ。
    強いて言えば今日が月曜日ということくらい。はい、手帳は月曜スタート派です。

    現状の、私のステータス

    • テスト駆動開発について、概要は知っている
      • ケント・ベックさんの本は読んで、写経もしました(JavaとPython両方
      • Red、Green、Refactoringを繰り返す作業
      • 初めに失敗するコードを書き、次に成功するコード、そしてリファクタリングを繰り返すということ
    • テストについて
      • JSTQB ALのTMを持ってる程度の。
      • テストアーキテクチャ設計の辺りを考えるのが大好き
      • テスト設計、テスト実行も好きなエリア
    • プログラミング言語
      • 上述したケント・ベックさんのを写経したのと、Pythonに関しては「Minecraftで楽しく学べるPython プログラミング」も写経しました

    とっかかり

    まず何をすれば良いのか分かりません。環境構築からか。

    • Mac OS 12.6
    • Visual Studio Code 1.72.2
    • Pytho

    と、ここまで書いて、なぜかpython のバージョンが分からなくなってしまいました。急になぜ。
    何もしてないのに壊れた(嘘

    python –vesrion のcommand not found

    辛い。1日目にもなってない。

    上記の解決方法が分かったら追記しようと思います。今日はここで店じまい(かなり早い