- 1. Pythonで学ぶSOLID原則
- 2. Anacondaの仮想環境でJupyter Labをインストールする
- 3. あいうえお
- 4. pygameでRPGをつくってみる4 テキスト
- 5. pygameでRPGをつくってみる5 マップ作成
- 6. 2年目エンジニアが土日を使って挟み将棋のWebアプリを作ってみる
- 7. paizaラーニング問題集「【部分和】部分和問題 4」を解いてみた
- 8. RSA暗号で公開鍵と秘密鍵を生成する
- 9. ファインチューニングしたモデルでGGUFファイル作成した時に詰まった件について
- 10. コマンドラインツールの拡張性を高める:Commandパターンの活用法
- 11. paizaラーニング問題集「部分和問題 3」を解いてみた(処理の流れの解説あり)
- 12. 【Django】005. セッションとミドルウェア
- 13. PID制御と状態方程式
- 14. RAGBuilder覚書
- 15. Python3 基礎試験 スタックとキューとcollections.deque のメモ
- 16. WandBで実験管理をシンプルに
- 17. pygameでRPGをつくってみる8 フェードアウト
- 18. PoetryでFastAPI + LangServe + Bedrock開発の環境構築
- 19. Django Rest Framework querysetつかうViewset、使わないViewset
- 20. [Utility]Qiitaの自分のMarkdownの全記事をダウンロードするスクリプト おまけ付き。
Pythonで学ぶSOLID原則
Pythonを使ってSOLID原則を説明したいと思います。
コード例は本当によくある例になります。### 1. **単一責任の原則(Single Responsibility Principle: SRP)**
クラスは一つの責任だけを持つべきです。例えば、ファイルの読み込みとログの書き込みを同じクラスで行うのはNGです。
**良くない例:**
“`python
class FileManager:
def read_file(self, filename):
with open(filename, ‘r’) as file:
return file.read()def write_log(self, message):
with open(‘log.txt’, ‘a’) as log_file:
log_file.write(message + ‘\n’)
“`**良い例:**
“`python
class FileReader:
def read
Anacondaの仮想環境でJupyter Labをインストールする
# この記事で実施すること
– Aanacondaで仮想環境をつくる
※この時点でインストールするライブラリはなし
– Jupyter Lab と Jupyter Lab の日本語化ライブラリをインストール
– Jupyter Lab を起動してPythonコードの動作確認
– Jupyter Lab の個人設定# この記事で実施しないこと
– Anacondaのインストール
※インストールされている前提です。## Anacondaで可能環境をつくる
Anaconda Prompt を起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408655/6d1655c4-78d0-c9d2-fb01-4341eb4e3ab6.png)下記コマンドで仮想環境を作成します。
ここで作成される仮想環境にはなんのライブラリもインストールされません。
“`shell
conda create –name 仮想環境名
“`
下記のように確認された場合は「y」と入力してEnte
あいうえお
あいうえお
かきくけこ
pygameでRPGをつくってみる4 テキスト
# テキスト改行
ここをクリックしてください
¥n 環境によっては、\nでテキストを改行できます。
“`python:
import pygame
pygame.init()# 画面の設定
screen = pygame.display.set_mode((320, 160))
pygame.display.set_caption(“Pygame Text Wrapping Example”)# フォントの設定
#ここにフォントのパスを貼り付ける
font = pygame.font.Font(パス, 20)# テキストを改行して描画する関数
def draw_text(surface, text, pos, color=(255, 255, 255)):
lines = text.split(‘\n’)
x, y = pos
for line in lines:
text_surface = font.render(line, True, color)
pygameでRPGをつくってみる5 マップ作成
マップ作成について書いていこうと思います。
その前に、いつものことですがaidiaryさんのコードを紹介させていただきます。aidiaryさんがマップエディターを作ってくださっているのでこれを利用するのが一番手っ取り早いです。
[マップエディター ここからダウンロード](https://aidiary.hatenablog.com/entry/20080705/1281171879)
ちょっと気になる点があるので変更したいと思います。
# 変更個所
ここをクリックしてください
ln 226
class MapchipPalette: にある def draw(self,screen)で
y = int((i / self.COL)* GS)の / を // にします。mapchipが右下にずれていくのが変更されます。
![スクリーンショット (668).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/4ce2
2年目エンジニアが土日を使って挟み将棋のWebアプリを作ってみる
## はじめに
こんにちは、社会人2年目エンジニアのYmmyです。週末の時間を有効活用すべく、この土日はPythonとFlaskを使って「挟み将棋」のWebアプリを作っていこうと思います。## 挟み将棋とは(ご存じの方も多いと思いますが…)
盤上の自分の駒を動かし、相手の駒をはさんで取るゲームで、将棋の簡易版とも言えます。
ルールがシンプルなので、プログラムの題材として選びました。– **盤面**:9×9の正方形
– **勝利条件**:先に相手の駒を5つとる or 相手の駒と3枚差をつける
– **駒の初期配置**:各プレイヤーが自分の駒を横一列に配置
– **駒の動き方**:タテヨコに好きなだけ動かせる。ただし、自分や相手の駒を飛び越えることはできない詳細ルールは以下をご参照
[日本将棋連盟TOP > 将棋の基礎知識 > はさみ将棋をやってみよう](https://www.shogi.or.jp/knowledge/hasami_shogi/)## 使用した技術
– **言語**:Python 3.9
– **フレームワーク**:Flask
– **フロントエ
paizaラーニング問題集「【部分和】部分和問題 4」を解いてみた
https://paiza.jp/works/mondai/dp_primer/dp_primer_partial_sums_boss
▼考え方
ポイントとなると思った考え方を、以下1.~4.に示します。
1.リストaの要素のうち、xを超える要素を排除したリストbを定義します。
a:[9,3,4,11,8]
b:[9,3,4,8]2.リストbの各要素をxを超えない範囲で定数倍(1,2,…)し、リストcを定義します。
b:[9,3,4,8]
c:[9,3,6,9,4,8,8]3.リストcを重複排除しリストeを定義します。
c:[9,3,6,9,4,8,8]
e:[9,3,6,4,8]4.リストeに対し、部分和問題1の考え方と同様に処理を行います。
▼コード
“`py
########## 処理0(準備) インプット,リスト定義など ###########n,x = map(int,input().split())
a = [0]*n
for i in range(n):
a[i] = int(input())# 考え方1.
b = [i for
RSA暗号で公開鍵と秘密鍵を生成する
# RSA暗号とは
RSA暗号方式は公開鍵暗号方式における鍵の生成のアルゴリズムである。
巨大な2つの素数 $(p, q)$ の積 $pq$ が公開されているとき、その合成数 $pq$ から因数分解によって元の2組の素数 $(p, q)$ を求める難しさを安全性としている。本記事では小さな素数のペア $(p, q) = (97, 13)$ をもとに、RSA暗号方式による公開鍵と秘密鍵の生成の仕組みとデータの暗号化、送信、復号化の手順を図解する。また手計算が困難な場合はpythonを利用する。# 公開鍵と秘密鍵の生成
### 公開鍵の生成
2組の素数$p, q$によって定まる定数値$n, \phi(n)$を次のように定める。“`math
\begin{align}
n &= pq \\
\phi(n) &= (p – 1)(q – 1)
\end{align}
“`今回は $(p, q) = (97, 13)$ であるため
“`math
\begin{align}
n &= 97 \times 13 = \underline{1261} \\
\phi(n) &
ファインチューニングしたモデルでGGUFファイル作成した時に詰まった件について
# やろうとしたことと起きた問題
[microsoft/Phi-3.5-mini-instruct](https://huggingface.co/microsoft/Phi-3.5-mini-instruct)をファインチューニングして、それをggufファイルに変換することで、ローカルで推論できるようにしようとした。
しかし、ggufファイルに変換しようとしたところで、
`ValueError: Can not map tensor ‘model.layers.0.mlp.down_proj.weight.absmax’`というエラーが出てしばらく詰まった。
作業環境はgoogle colabである。# 結果を一言で
根本的な解決策は見出せなかったが、少し迂回路を取ることでggufファイルを作成しローカルでの推論はできるようになったからひとまずOKとした。# 対応手順
具体的には、まず当初は、ファインチューニングした時に元のモデルとRoLAアダプターをマージして保存をしていた。学習をするときは以下のようにした。
“`Python
import torch
from tr
コマンドラインツールの拡張性を高める:Commandパターンの活用法
## はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/09544af7-1963-993d-f76e-003587a08d43.png)
コマンドラインツールを開発する際、機能の追加や変更が容易で、拡張性の高いアプリケーションを作ることは重要です。この記事では、Commandパターンを活用してコマンドラインツールの拡張性を高める方法について解説します。
## なぜCommandパターン?
Commandパターンは、GoF(Gang of Four)デザインパターンの1つで、リクエストをオブジェクトとしてカプセル化することができます。このパターンを使うことで、コマンドの追加や変更が容易になり、アプリケーションの拡張性が向上します。
## ユースケース
Commandパターンは以下のような状況で特に有効です:
1. 複数のコマンドを持つCLIアプリケーション
2. コマンドの実行、取り消し、やり直しが必要なアプリケーション
3. コマンドの実行をキュー
paizaラーニング問題集「部分和問題 3」を解いてみた(処理の流れの解説あり)
https://paiza.jp/works/mondai/dp_primer/dp_primer_partial_sums_step2
▼考え方
ポイントとなると思った考え方を、以下1.~5.に示します。
1.dpは、ある重さを、おもりの重さa_iやa_i以前のおもりを複数組合わせることで実現できるかどうかを示すリストです。例:a_0は7なのでdp[7]=1、a_1は3なのでdp[3]=1、a_0+a_1で10なのでdp[10]=1
2.dp2は、a_iを何個か選んで重さの和がxとなるようにする方法のうち、選ぶおもりの個数の最小値を示すリストです。例:a_0=7とa_1=3があるときdp2[10]=2、次にa_n=10が現れたときdp2[10]=1と更新します。
3.ある重さjが、a_iやa_i以前のおもりを複数組合わせることで実現できるのであれば、dp[j]←1と更新します。4.ある重さjが、a_iのみで実現できるのであれば、dp2[j]←1と更新します。例:重さ7はa_0=7のみで実現できるのでdp2[7]←1と更新します。
5.ある重さjが、a_iをa_i以前
【Django】005. セッションとミドルウェア
前回はDjangoのフォームを使ったデータの送信について見ていきました。
[前回記事:【Django】004. フォームのさまざまなフィールド](https://qiita.com/ys_dirard/items/8367abada50cd1892a46)今回はDjangoのセッションとミドルウェアについて見ていきます。
今回も以下の本を参考にしています。
https://www.shuwasystem.co.jp/book/9784798062419.html
## セッション
## セッションとは?
フォームでクライアント送られてきた情報をもとに処理は行えますが、次にアクセスしたときにはこの情報は失われています。こういう状況で役に立つのがセッションです。
以下雑な説明ですが…(少し間違っているかも…)
セッションはクライアントとサーバー間の接続を維持するための仕組みで「今、アクセスしているのはこの人だ!」とサーバー側が把握し、そのクライアントが持っている情報を保管できるようにするものです。### Djangoでのセッション利用の準備
Djangoではセッショ
PID制御と状態方程式
# はじめに
PID制御は、フィードバック制御の一種として有効な制御方法である。出力の比例要素であるP、積分要素であるI、微分要素であるDを入力に還元することで対象を制御しようとするものである。そこで、今回は状態方程式をPythonで解くプログラムを改造することによって、PID制御がどのようなものなのかを、時系列のグラフを作成することで調査するものとする。具体的には、以下のようなグラフを作成する。ただし、横軸が時間で縦軸が制御対象である。![PID_Kp_re2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/e0c80ad5-c26b-884b-870c-56473750eb1c.png)
# モデル
以下の記事のモデルを改造する。https://qiita.com/arairuca/items/24c3e25b4a47647be31c
また、PID制御のアルゴリズム自体は以下の記事を参考にした。
https://nagasaki-u.repo.nii.ac.jp/reco
RAGBuilder覚書
## はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/6301a645-c9cb-73bd-b635-c5ca087056a3.png)
本記事は、RAGBuilderについての、導入としての紹介を意図しています。
https://docs.ragbuilder.io/
https://github.com/KruxAI/ragbuilder
## 背景
RAG Builderは、LinkedInのLangChainからの2024年10月5日のポストで紹介されていた。
https://www.linkedin.com/posts/langchain_ragbuilder-rag-optimization-ragbuilder-activity-7248361501164482560-F5vG?utm_source=share&utm_medium=member_desktop
Githubリポジトリを見ると、KRUX AIという組織が開発(リード)し
Python3 基礎試験 スタックとキューとcollections.deque のメモ
Python3エンジニア認定基礎試験の勉強中です。
今日は問題を解いていて、あれ?となったスタックとキューについて、そこから派生して調べたcollections.dequeの処理が効率的な理由を簡単にメモを残します。# スタック
**LIFO : 後入れ先だし = 最後に追加したものが最初に出てくる**
`push : スタックにデータを追加すること`
`pop : スタックからデータを取り出すこと`
“`python
# 簡単な例
stack = []
stack.append(1) # pythonではpushをappend()を使用
stack.append(2)
stack.append(3)
print(stack) # [1, 2, 3]
print(stack.pop()) # pythonではpop()を使用 -> 最後に追加した 3 が取り出される
“`
# キュー
**FIFO : 先入れ先出し = 先に追加したものが先に出てくる**
`enqueue : キューにデータを追加する`
`dequeue : キューからデータを取り出す`“`python
WandBで実験管理をシンプルに
機械学習にてモデル性能を確認するため、手元にあるデータセットを分割、そのデータで評価を行います。
評価をするために実験記録が必要ですが、結果やハイパーパラメータなどなど実験管理に手間がかかる。。。
そんな課題へのソリューションの一つに、実験の結果やメトリクスを手軽に管理・可視化できるWandBがあります。WandBを利用しはじめてグッと管理コストが減ったので記録として残そうと思います。
本内容は私の解釈、手法の説明ですのでその点ご了承ください。# WandBについて
WandBは、機械学習プロジェクトの全過程を追跡・可視化するツールで、以下のような機能を提供しています
– モデルの学習記録
– 実験結果の可視化
– モデル・データセットのバージョン管理記録するための実装もシンプルで極論5行で実験管理のコードをかけたりします。
https://qiita.com/Yu_Mochi/items/4fc283ebc31225d4e106
ChatGPTでお馴染みのOpenAIがLLMモデル評価で採用してもいます。
また、LLMモデルの日本語能力を評価、公開してくださっていたり。
pygameでRPGをつくってみる8 フェードアウト
# GIF
ここをクリックしてください
![無題の動画 ‐ Clipchampで作成.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/80a8ca1f-7647-2d48-4d95-42dfe3e89788.gif)
![無題の動画 ‐ Clipchampで作成 (3).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/c48b0399-a4ad-2ade-9a42-9b58b45ac6eb.gif)
# 半透明の図形
ここをクリックしてください
“`python:半透明の図形
import pygame
import syspygame.init()
screen = pygame.display.set_mode((320, 320
PoetryでFastAPI + LangServe + Bedrock開発の環境構築
## 3行で経緯
– 久しぶりにPythonを触ることになったら、
– いつの間にかパッケージ管理に便利そうなもの(Poetry)が登場していたので
– 今時らしい題材(FastAPI + LangServe)で開発環境を構築してみる## 前提
“`zsh
sysctl -n machdep.cpu.brand_string
# => Apple M1 Pro
python3 –version
# => Python 3.12.4
“`## この記事で扱う技術セットの概要
### Poetryとは
https://python-poetry.org/
Pythonのパッケージマネージャー。より簡単に依存関係の管理や追跡、パッケージのビルド・配布を行えるのが強みで、Pythonの仮想環境のセットアップまで容易にしてくれる。pyproject.tomlを使用して依存パッケージやプロジェクト設定を一元管理する。
筆者は普段Node.js界隈中心に活動しているので、Node.js界隈にすぐ伝わる言い方をするなら、pyproject.tomlはpackage.jsonに
Django Rest Framework querysetつかうViewset、使わないViewset
# Django queryset使うやつと使わないViewSetを意識する
### querysetを使わない
**mixins.CreateModelMixin**
“`python
class CreateModelMixin:
“””
Create a model instance.
“””
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, hea
[Utility]Qiitaの自分のMarkdownの全記事をダウンロードするスクリプト おまけ付き。
Qiitaの自分の全記事をダウンロードするスクリプトです。
記事の中にGitHub Gistのリンクがあれば、そこからダウンロードして、記事の中に埋め込みます。(これがおまけ)requestsでの読み込みの、GitHub Gistのタグが解析できなかったため、システムコールを使っています。
タグは色々変わるみたいだし。
gitのインストールが予め必要です。
`python qiitadl.py`で動かしてください。“`qiitadl.py
#!/usr/bin/python
import os
import subprocess
import requests
import re
import json
from bs4 import BeautifulSoup
ACCESS_TOKEN = ‘ACCESS_TOKEN’
USER_ID = ‘USER_ID’# Qiita APIのエンドポイント
API_URL = f’https://qiita.com/api/v2/users/{USER_ID}/items’# ヘッダーにアクセストークンを設定
headers