チェックデジットを比較してみた
# チェックデジットを比較してみた
チェックデジットは、バーコード・ISBN・クレジット番号と様々なものに使われている。少し前マイナンバーカードのチェックデジットは性能が悪い、という話もあったらしい。
チェックデジットにはどのような方式が有るのかを調べ、それぞれの性能差を比較してみた。
## 比較対象のチェックデジット方式
* 単純な足し算
* Luhnアルゴリズム
* ISBN-10
* ISBN-13
* マイナンバー
* Verhoeffアルゴリズム
* DAMMアルゴリズム
## 各方式のPHP実装
比較テストのためPHPで各方式を実装した。フォーマットをそろえるため以下の仕様とした
* 1つの方式を1つの関数で実装する
* 入力はN桁の数字(0-9)で構成された文字列型
* 出力は数値型。入力文字列を処理した結果で主に0-9の数値が返る
正しく動作すれば良いので最適化はしていない。
### 単純な足し算
“`php5
function sum1($str) {
$cs = 0;
for($i=0,$len=strlen($str); $i<$len; $i
AtCoder入茶しました。なんか色変したら記事書く文化の様なので書きます。
ABC310にて、BでつまづいてAとCのみACで絶対スコア落としたと思ったのになんか入茶できました、逆に納得いかない。
前向きな勉強法とかこんなことしました的なのは多いので、自分は反省書いていきます。
問題文の読み違いをやらかす
—
AtCoderの問題文は丁寧に読めば論理的に解釈の余地が入るようなものはないです。しかし、制限時間付きでやってると問題文を斜め読みして、入出力サンプルをざっと見て、憶測の入った解釈で解答に臨んでしまうことも多く、実際それでも9割ぐらいは正答できるんですが、やっぱり1割ぐらいはなんか勘違いや読み違いをしてしまうもので、その間違った解釈でコードを書き、WAでもコードが間違ってるんだと思って何度やっても通らない修正を繰り返してしまうというパターンに数度ハマりました。おおよそコードが思った通りに書けているのにサンプルすら正答にならないなら問題文を読み直すべきでした。
プログラマーが最も学ぶべき言語は日本語というのは至言です。
直近のやらかし案件です
[ABC309 B](htt
# Outline
前回、Laravel + MariaDB + IIS といろんな環境を構築して、phpunitを使う環境のドキュメントを作成した。
今回はシンプルに、phpunitを学習するための最低限の環境を構築、かつサンプルコードで1つ書いてみるところまでをドキュメントとして残す
# PHP
## install PHP
https://www.php.net/
php windows versionのzipをダウンロードする。
今回、Non Thread Safe versionを使う。
Thread Safeに関する記事は、以下参照。使用環境によって異なる。
https://techplay.jp/column/504
zipをdownload後、解凍し任意の場所に配置する。
今回、一般的に使われる、c:\phpに配置した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/5ffb719f-9d79-6ae4-9783-596109ab9090
# WSL2, Laravel Sail 環境でXdebugを有効にする
## Background
最近laravel sailをよく使うが、xdebug環境を整えたことがなかった。
`php artisan serve`を使わない方法を調べてもなかなか解決しなかったのでまとめ。
## Environment
– wsl2, ubuntu
– PHP 8.2.8, laravel 10.14.1
– Xdebug v3.2.1
## Solution
※sailでアプリケーションディレクトリ作成後からの内容になります。
編集対象のファイルは以下の4つ。
– php.ini
– docker-compose.yml
– .env
– launch.json
### php.ini
通常はvendor配下に存在しているので、以下コマンドでアプリフォルダ直下に持ってきます。
– wslで実行
– `./vendor/bin/sail sail:publish`
– container内で実行
– `php artisan sail:publish`
コマンド実行するとアプリディレ
# 概要
laravelをインストールしてるんだけどできない!
ちょっと理由がありMAMPを使っていたら、問題発生!解決策を見つけるぞ!
と思って沢山対策を調べましたが全然なかったので、記事にしました。
# バージョン
– laravel 9.x
– composer 2.5.8
– php 8.1
# エラー内容
“`
laravel/framework[v9.36.4, …, 9.x-dev] require league/flysystem ^3.8.0 -> satisfiable by league/flysystem[3.8.0, …, 3.x-dev].
– laravel/framework[v9.18.0, …, v9.36.3] require league/flysystem ^3.0.16 -> satisfiable by league/flysystem[3.0.16, …, 3.x-dev].
– laravel/framework[v9.0.0-beta.2, …, v9.17.0] require lea
保存や作成などを実際に行った時に一目でわかりずらい時にフラッシュメッセージを表示させると
利用者は、登録された事が一目でわかるため快適にアプリケーションを利用できます。
今回は、画面が切り替わりながらデータを持ち越すということで`Session`を使って表示させていきます。
## 書き方(複数あり)
### **①**
`session()`ヘルパ関数の`flash()`メソッドでキー`’message’`とバリュー`’登録できました。’`と書く
“`php
session()->flash(‘message’, ‘登録できました。’);
“`
### ②
useでセッションを読み込んで`Session::flash`でキー`’message’`とバリュー`’登録できました。’`と書く
“`php
Session::flash(‘message’,’登録できました。’);
“`
### ③
`redirect()`する際に`with()`メソッドでキー`’message’`とバリュー`’登録できました。’`と書く
“`php
redirect()->w
6月24日(土)に[PHPカンファレンス福岡2023](https://phpcon.fukuoka.jp/2023/)が開催されました。(4年ぶり!)
カンファレスでLT登壇を行ったので、前後の感想をまとめました。
お気軽にお読みください!
https://fortee.jp/phpconfukuoka-2023/proposal/07dea75c-91f3-4987-8d4b-3529b8e073e1
https://www.youtube.com/@phpphpconfuk
# プロポーザル応募〜採択
自分がエンジニアへ転職したきっかけの一つがカンファレンスなので、登壇は昔からの目標でした。
とはいえ、登壇に応募し始めたのはつい最近です。コロナ禍でオフラインイベントそのものが減っていたこともありますが、過去に参加したどのカンファレンスも登壇のレベルが高くて尻込みしていました。
ですが今年はエンジニア5年目の節目もあり、今後のカンファレンス開催可否も予想がつかないので思い切って応募しました。
採択の連絡をいただいた時は、嬉しい反面プレッシャーを感じました。
# 登壇
PHP、CURLFileでファイルをアップロードするコードです。
試行錯誤したので備忘録として残します。
※$_FILES、”Content-Type: multipart/form-data”、POSTを使用しています。
# 本記事の環境
ホストOS:Windows10 Pro 64bit 8GB
ゲストOS:Red Hat Enterprise Linux release 8.3 (Ootpa)
Oracle VM VirtualBox:6.0.4a
vagrant:Vagrant 2.2.14
Apache:2.4.37
PHP:PHP 7.4.15
Tera Term:4.105
コマンドプロンプト
ホストOS側に実ソース
# ソースコード
“`php
$curl_file = new \CURLFile($_FILES[‘uploadfile’][“tmp_name”], $_FILES[‘uploadfile’][“type”], $_FILES[‘uploadfile’][“name”]);
$option = [
‘aaa’ => ‘AAA’,
# Laravel_パスワード再設定用の”Gmail”アドレスを設定する
パスワード再設定用のメールを送信する。
※メールアドレスはGmailを使用する。
## 1.Googleアカウントで必要な設定をする
①Googleアカウント > セキュリティを開く。
②2段階認証を有効にする。
③アプリパスワードを設定する。
1. 以下の”2段階プロセス”をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/3fc7a08e-d454-49d1-f380-5b362f3fae64.png)
2. 以下の”アプリパスワード”をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/eab2701f-f4e5-4d37-075b-f51bed76882d.png)
3. 以下のように設定する。
アプリ:メール
名前:”その他”を選択し、作成し
# Laravelでログイン機能を実装する方法(準備編)
Laravelでログイン機能などの認証機能を実装する時は、`Laravel UI`というパッケージを
使用すると簡単に実装できる。(Laravelのバージョンが9系の場合)
Laravel UIの場合、CSSフレームワークはBootStrapになる。
## 1.Laravel UIをインストールする。
①VS Codeのターミナルまたはコマンドプロンプトを開き、
Laravelをダウンロードしたディレクトリまで移動する。
②以下のコマンドを実行する。
“`
composer require laravel/ui
“`
③2分程度待ち、以下のように出たらOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/cebedfea-65cf-bc96-68ec-f3425a56507a.png)
## 2. Bootstrapをインストールする。
①Bootstrapの認証機能用のファイルを同時にインストールす
# if文はなぜ 変数not=false でtrueを表すことがあるか
trueが10進数で言う1を表すか、-1を表すかはプログラミング言語によって異なるから。
例えばVB.NETではTrueは32bit版ならFFFFFFFF(16進数)となって-1を表すけど、PHPだとTrueは1になる。(バージョンによるかもしれないが)
VB.NETでTrueがFFFFFFFF(16)となっているのは、CPUの処理サイズが32bit単位なら1にしようが-1にしようが確保メモリ領域のサイズは32bitで一緒だからって先輩から聞いたんですが、本当ですか?
# あとがき
情報処理技術者試験で2進数の話を学んだときは「今時の実務で使うときはこないでしょ」って思ってましたが、使いました。必要です。
**paiza**の森の課題プログラムを作成しました。
***問題***はこちら
>n 人の人に関して、それぞれの人の名前と財産が与えられます。その後に人名 S が与えられるので (S は最初に与えられた名前のうちのいずれか) 、 S の財産を表す整数を出力してください。
挑戦しました
“`PHP
# はじめに
自分がだいぶ遠回りしたので同じような人がなんだそういうことかよとなるようにここにメモしておきます!(*´ω`*)
ちなみに後々出てくる`credentials`は期限設定によりますがセッション切れたらちゃんと新しいのにしないと使えません。
# どんなコードを書いていた?
“`PHP
$s3Client = new S3Client([
‘profile’ => ‘277650267482_PowerUserAccess’, //どのプロファイル使うか(後で詳細記載します。)
‘region’ => ‘ap-northeast-1’, //SSO Regionの箇所のとこなのかなと?(後で詳細記載します。)
‘version’ => ‘2006-03-01’, //ここ決まりっぽいです。またはlatestかと
]);
try {
$result = $s3Client->createBucket([
‘Bucket’ => ‘abcde-img’,
]);
} catch (AwsException $e)
[PHP8.3](https://qiita.com/rana_kualu/items/91111443105a75a55e2f) / [PHP8.2](https://qiita.com/rana_kualu/items/fc4b02e2daaf102aa92f) / [PHP8.1](https://qiita.com/rana_kualu/items/a6601b49e0591eb42200) / [PHP8.0](https://qiita.com/rana_kualu/items/fe7998fbe773544d5d25)
2023/07/18、PHP8.3が[フィーチャーフリーズ](https://wiki.php.net/todo/php83)しました。
言語機能に関わるような機能の追加・変更が締め切られたということです。
今後はデバッグを繰り返しながら完成度を高めていき、2023/11/23にPHP8.3.0がリリースされる予定です。
というわけで[PHP8.3で実装されるRFC](https://wiki.php.net/rfc#php_83)を見てみましょう。
## 直したはずのCSSが当たっていない
CSSの修正って結構面倒ですよね。もちろん最近はCSSを直接編集せずSASSの技術を使うことが多いと思います。それでも、細かい数字を調整するのは苦労します。
それでやっとできたと思って、確認すると何も変わっていない。これほどガックリすることはありません。
SASSのコンパイルがうまくいってないのか?CSSファイルを直接エディタで確認しても、ちゃんとコンパイルされています。
実際、これで1時間ぐらい悩むのことは何度かありました。
![](https://storage.googleapis.com/zenn-user-upload/03ba3b196117-20230628.jpg)
## そんな時は強制リロード
まず、試してもらいたのがこの強制リロードです。それってなにかというと、修正したCSSファイルやJSファイルを強制的に再読み込みすることです。
このブログをご覧になっている方々にとっては当然のこととは思いますが、あえて説明しておくとブラウザは常に画面に表示すべき内容(専門的な表現だとレンダリングすべきDOM要素)を常に全てサーバー
イマイチわかってないから、とりあえず書き出してみて理解する
何が違うんだ?
間違ってたら、小学生でもわかるように解説お願いします。
# isset()
変数がセットされていて、それがNULLでないことを調べる
値が入っていればtrueになる、入ってなければfalse
変数がセットされていなかったらって表記したい時もあるから
その時は、!isset()ってつけることもあるみたい。
学習している講座でも使ってたんだけど、私の中ではempty()じゃダメなのか?ってなってる。
# empty()
変数が空かどうかを調べる
空( *空文字、* *0、* *NULL、* *FALSE、* *空の配列* )だったらtureそれ以外はfalseになる。
# is_null()
変数がNULLかどうかを調べる。
変数がNULLだったら、trueそれ以外だとfalseになる
変数がセットされていない場合の時もtrueを返すそうだが
セットされてる、されていないはisset()を使った方がいいんだって
## 表にまとめてみた
| 関数 | 未定義 | NULL | 0 | ””(空文字)
模写参照サイト
順番
1.admin page
(1)html(admin_page.php)
(2)css(style.css)
2.user page
(1)html(user_page.php)
(2)css(style.css)
3.register form
(1)html(register_form.php)
(2)css(style.css)
4.login page
(1)html(login_form.php)
(2)css(style.css)
5.register form(DB接続)「POSTメソッド」
6.login form(DB接続)「POST,SESSION」
7.admin page「SESSION」
8.user page「SESSION」
9.logout「SESSION」
1.admin page (html&css) [2023年6月29日
手順(極簡):
1.infinityfreeに登録する。
2.(creat account)アカウントを作成する:自分の好きな名前を使用して構いません。
3.Database Nameを記入
4.MYSQL Databasesを開く。
5.creat Databaseをクッリク(データベースを作成する)。
6.作成したデータベースを開く。
7.自分のデータベースをアップロードする。
8.ホームページの情報に基づいて、自分のPHPファイルを開き、以下の内容を変更する。
①USERNAMEユーザー名
②PASSWORDパスワード
③HOSTNAMEホスト名
④DATABASE NAMEデータベース名
8.(file manager)ファイルマネージャを開く。
9.自分のファイルをアップロードする。
10.ラベル(LABEL)の場所のリンクをコピーし、自分のログイン画面を開く。ログイン画面のリンクもコピーする。
11.今後は直接ログイン画面のリンクを提供しても構いません。