Develop
ソフトウェア開発作業全般
Other
ASCIIFlow: 画面構成図などの作成でテキストなので便利かもしれない。
Design
Atomic Design
最近のUIのコンポーネントの組み方。UIコンポーネントを粒度に分けて、ディレクトリー分けして流用するという考え方。
- atoms: 原子。これ以上分割不能な最小単位。input/label/buttonなど。
- molecules: 分子。atomsを組み合わせたり、atomsに多少修正したもの。入力フォーム、ナビゲーション、カードなど。
- organisms: 有機体。分子+アルファ。入力フォーム+ヘッダーなど。複数の分子。
- templates: テンプレート。複数の有機体。ヘッダー、メイン、フッターなど。
- pages: ページ。テンプレートを使用したページ。
Modelio
クラス図
- 汎化 (generalization): 実線白矢印。継承。
- 実現 (realization): 点線矢印。interfaceの継承。
- 集約: 白ひし形。
- コンポジション: 黒ひし形。子が単体で存在できない場合。親と生存期間が同一の場合。
- 関連: 実線矢印。メソッド内インスタンスなど。
- 依存: 点線矢印。引数やローカル変数、返却値。
VCS
Git
差分ファイル抽出
情報源: gitで差分ファイルを抽出する #Git - Qiita。
git archiveとgit diffを組み合わせる。
git archive --format=zip --prefix=root/ HEAD `git diff --diff-filter=d --name-only HEAD^ HEAD` -o archive.zip
ただし、この方法はファイル数がARG_MAX以下の場合だけ。ファイル数が多い場合だめ。
git diff --name-onlyで一覧を出力させて、1個ずつcp -pで階層を維持してコピーするしかないかも?
例:
mkdir -p archive git diff --name-only new_base 44765_upgrade-base-version | xargs -i cp -p --parent "{}" archive/
マージコミット後のコミット追加
マージコミット後に次の開発作業を始めることが多い。が、直後の初回のコミットを追加したい場合困る。
git rebase -iにすると、コミットが残るから。編集はできるが、その直前にコミットの追加ができない。マージコミットは扱いが特殊で直接rebaseで編集できない。
しかたないので、該当コミットでブランチを作成して、コミット。その後、既存の修正ブランチをrebaseでそのコミットの後にくっつける。これでいける。
core.autocrlf
warning: in the working copy of 'docker/README.md', LF will be replaced by CRLF the next time Git touches it
Windowsでは改行にCR+LFを使うが、mac/LinuxはLFのみ。これの違いの処理のための設定がcore.autoclrlf
- true=コミット時にCRLFをLFに自動変換。チェックアウト時に逆。Windows向けの設定。
- false=変換しない。
- input=コミット時にCRLFをLFに自動変換のみ。mac/Linux向け。Windowsではチェックアウト時にCRLFになるが、mac/LinuxはLFになる。
わかりにくい。基本はfalseで良いと思われる。
gitkの文字化け対策
gitkのエンコーディングを設定する - Pistolfly
gitkはシステムのデフォルトエンコーディングで表示しようとするので、文字エンコーディングを指定しておく。
git config --global gui.encoding utf-8
改名と修正
改名と修正を同時にすると、改名を検知できない。
-Mオプションを指定すると、類似度で同時も検知できる。が、基本はリネーム・改名と修正は別コミットにしたほうがよさそう。
Fossil
外部依存を排除しており、CGIでも動作するという点が非常に良い。気になる。Phorgeの検討が不要になる。
GitHub
Account
Username may only contain alphanumeric characters or single hyphens, and cannot begin or end with a hyphen.
ユーザー名は、英数字と-のみが使用可能。
組織別にアカウントを分けるなら、かぶらないように末尾に-組織名のようなサフィックスがあるとよいだろう。
Shell
ワイルドカード
ワイルドカードで.始まりのファイルをマッチさせたい。
以下ならマッチするが、ブレース展開 (brace expansion) はPOSIX shでは使えなかった気がする。
echo {.*,*}
cmd.exe
bitsadmin
Windowsでのファイルダウンロードコマンド
Windows 7以降ではbitsadminコマンドがあり、これがwget相当となる。
書式:
bitsadmin /transfer <job name> <URL> <output path>
<job name>と<output path>は必須なので注意する。
certutil
Windowsでのハッシュの確認に使える。
certutil -hashfile file
SHA1 ハッシュ (対象 C:\moconavi\windows\Moconavi\ext\chromium\moconavium.exe): e0da85b04b6970ac1f0c33db7a9ad607fdbd44eb CertUtil: -hashfile コマンドは正常に完了しました。
rlogin.cmd
コマンドキーの送信を自動化できる?
rem rlogin.cmd @Echo off Set SERVER=192.168.0.0 Set USERNAME= Set PASSWORD= Cmdkey /generic:TERMSRV/%SERVER% /user:%USERNAME% /pass:%PASSWORD% Start mstsc /v:%SERVER% Timeout 5 Cmdkey /delete:TERMSRV/%SERVER%
実行中プロセスのパスの確認
出典: Show EXE file path of running processes on the command-line in Windows - Super User。
wmic process get ProcessID,ExecutablePath wmic process where "name='mysqld.exe'" get ProcessID, ExecutablePath wmic process where "name='mysqld.exe'" get ProcessID, ExecutablePath /FORMAT:LIST
簡易編集モード/挿入モード
- 【Tips】Windows 10のコマンドプロンプトが意図せず止まってしまう問題を回避する方法 | ソフトアンテナ
- Windows command prompt freezing randomly - Super User
Windows 10のcmd.exeは [簡易編集モード] が有効になっており、コマンドプロンプトを左クリックすると、テキストの選択が始まる。テキスト選択中はコマンドの実行が止まる。長時間かかるコマンドの実行中に誤操作で止まると困るので、これは無効にしたほうがよい。
cmd.exeを起動-左上のアイコンをクリック-[規定値]/[プロパティ]-[オプション]-[□簡易編集モード] を選ぶ。
そのほか、 git log
のような制御が移るコマンドを実行してしばらくすると、操作できなくなる。
[□挿入モード] にすると回避できる模様。
Web
HTTP
Content-Disposition
Content-Disposition - HTTP | MDN
RFC 6266 - Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)
Content-Disposition: inline Content-Disposition: attachment Content-Disposition: attachment; filename="filename.jpg"
filenameでファイル名を指定する。ここの値は二重引用符で囲む。スペースを含む場合に必須になる。
IP address
出典: 固定IPアドレスの取得方法 ~実は簡単!フリーランスの方も必見です~|VPN活用日記|トピックス|グローカルネットの快適VPN【公式】| 株式会社グローカルネット。
自宅サーバーを行う際、固定IPアドレスが必要になる。
取得方法がいくつかある。
- 契約しているプロバイダでオプションとして申し込む方法
- 固定IPアドレスに対応しているSIMを契約する方法
- VPNを利用した固定IPアドレスの提供会社を利用する方法
VPNの固定IPアドレスが安いらしい。ryoかsuwakoが解説していた気がする。
Authentication
認証方式がいくつかある。HTTPで定義される認証方式 (HTTP認証) が有名。
Basic認証
出典: Basic認証 - Wikipedia。
Authorization HTTPヘッダーにBasicのあとに [username:password] をBASE64でエンコードして送信する認証方式。
GET /private/index.html HTTP/1.1 Host: example.com Authorization: Basic cm9vdDpwYXNzd29yZA==
盗聴や改ざんが簡単だが、シンプルという利点がある。
OAuth
Ref
OAuth (オーオース) 権限の認可のための標準。OAuth 2.0が最新の標準。
以下が登場人物。
- resource owner: あるサイトのユーザー。
- resource server: あるサイトのユーザーのデータの保有サーバー。
- clent: クライアントアプリ。リソースサーバーのデータを使用したい。
- authorization server: クライアントにサイトへのアクセスを認証するサーバー。アクセストークンを発行して行う。
アクセストークンが実質的なパスワードのようなものだが、resource serverのパスワードを直接渡していない点が重要な違い。パスワードを直接渡さないことで、機能別に権限を細かく利用可否を制御できる。
処理の流れ。
- client->resource owner: Authorization Request。ここでユーザーが手操作でアクセスを承認する。
- client<-resource owner: Authorization Grant。
- client->authorization server: Authorization Grant。承認された情報でアクセストークンを要求。
- client<-authorization server: Access Token
- client->resource server: Access Token。アクセストークンでアクセス。
- client<-resource server: Access Token
Consumer Key/Secret: アプリ識別用のID/PW。
Access Token: サイトにアクセスするためのパスワード。
API
複数レコードの登録・更新・削除のREST APIについて調べてみた話(+@ Graph API) - junode | 個人開発ブログ
既存のAPIは単一リソースの処理しかないことが多い。JavaScriptなどで単一リソースを何回も呼べばいいというのはそうだけど、JavaScriptなしでは動作しない。一括処理用のAPIを作るしかなくないか?
REST WebAPIのプラクティス | yamarkz.com
delete_bulkなどのような一括処理用のAPIを作るしかない。内部的には単一処理のAPIを作る感じだったとしても。
curl
HTTPの通信のコマンドラインでの確認でよく使う。
Basic
- -X: メソッド指定
- -d/--data-urlencode: リクエストボディー (key=value)を指定。-X POSTも自動指定になる。
curl: (60) SSL certificate problem: self-signed certificate
Ref: curlで「自己署名証明書」を受け入れるには【curl: (60) SSL certificate problem: self signed certificate】 | LFI.
--insecureオプションを指定すると、localhostなどでの自己署名証明書を許可する。
Wireshark
TLS
Ref: SSL/TLSの復号#1 ~Wiresharkの設定~ | 東陽テクニカ | “はかる”技術で未来を創る | ワン・テクノロジーズ・カンパニー.
Wiresharkで通信パケットを確認する場合、デフォルトでTLSで暗号化されているので、内容がわからない。WiresharkでTLSに対応しておく必要がある。
[Preferences]-[Protocols]-[TCP] を選ぶ。
- ☑Allow subdissector to reassemble TCP stream
- ☑Reassemble out-of-order semgemnts
上記をチェックしておく。デフォルトでチェックされていた。
続いて、セッションごとのPre-Master Secretを登録する。
Chrome/Firefoxだと、環境変数SSLKEYLOGFILEを設定すれば、このファイルにTLSセッションキーを出力するので、これをWiresharkで読み込むことで、復号対応する。
以下のコマンド相当で、任意のファイル・場所にログファイルを指定する。
export SSLKEYLOGFILE=/tmp/sslkey.log
Macだとlaunchctlで設定しておくといい。これでWebブラウザー経由の場合は見えるようになる。
Security
DoS攻撃
いくつか対策方法がある。
サーバーログにIPアドレスが残るから、それで攻撃元の国を特定して、該当国を一括アクセス拒否。これが効果あるかもしれない。
攻撃元の国は途上国とかが多いだろうから。IPアドレスは簡単に変更できるが、国を変えるのはたいへんだろう。
バリデーションの実装
基本的に、バックエンドで主にチェックして、フロントエンドはUXの向上目的で実装する。データの重複チェックはDBアクセスが必要だったりするから。また、API経由などフロントがそもそもないケースもある。
ただ、社内システムのような、画面経由でしか使わない。悪者がほぼいないと思われるケースは、フロントエンドでの検証だけでも十分に感じる。
Browser
Chromium
Extension
Chromme系で愛用拡張機能を列挙する。
Other
Tool
いくつかWeb関係の開発で役立つツール集を公開しているサイトがある。
Free
無料で使用可能な共用ホスティングサービスがある。
スタードメイン無料サーバー
ドメインをセットで利用する必要があるものの、スタードメインのスタードメイン無料サーバーがけっこういい。
無料レンタルサーバー | スタードメイン - ドメイン取得 100円(税込)~
jpドメインの金額が相場の中では安い方で、それに無料サーバーがついていくる点。
- ディスク容量 20GB
- DB 1GB
ただし、SSHやコマンドは使えないので、FTPでWordPressを展開して設置するとか、そういう簡単な使い方だけ。ただ、それでもWordPressでWebサイトを構築するくらいなら十分だと思う。
CORESERVER
メール
- Custom_Filter_of_Coreserver - PukiWiki
- スパムフィルターの設定 | マニュアル | サポート | レンタルサーバー CORESERVER(コアサーバー)
- カスタムフィルターの設定 | マニュアル | サポート | レンタルサーバー CORESERVER(コアサーバー)
情報
- CoreServer_Mail_Custom - PukiWiki
- coreserverのメール設定:BWT Lab.:SSブログ
- バリューサーバーのフィルター設定でスパムメール(迷惑メール)対策する方法 - QWERTY.WORK
- コアサーバー V1にてカスタムフィルターで「ごみ箱」を指定したときの確認方法 – AWMTの、できるかな?
ルールが特殊なので注意する。
ゴミ箱に振り分ける場合。
順1 で[./.Trash
] を指定
順2
- 条件: [
.*
] - 処理:
./
、に振り分ける
条件部分には正規表現が使えるように見える。
破棄にしないといけない。転送する場合、カスタムフィルターの中に転送を入れる。条件を.*にする。
カスタムフィルターにくせがある。
- エスケープ(\を前置する)が必要な文字は「'」「"」「|」「`」「~」「?」「!」
Value Domain ネットde診断 byGMO
2024-06-07 Friからバリュードメイン系の利用者に無料で提供しているセキュリティー診断ツール。
Analytics
Tool
サイト分析用のツールがいくつかある (2023年ブログランキング!おすすめブログランキングサイト比較【一般人向け】)。
- SimilarWeb
- Ubersuggest
- ahrefs
- Googleキーワードプランナー
閲覧数取得
出典: GoogleAnalyticsで自サイトの人気記事ランキングを表示する方法 | アフィリエイトJAPAN。
- [行動]-[サイトコンテンツ]-[全てのページ]
- [表示する行数]=5000
- [エクスポート]=TSV
流入元特定
「会員登録画面の流入元探索方法について - Google アナリティクス コミュニティ」どのページから会員登録があったか、会員登録に結びつく記事は非常に重要。
こんにちは。
探索レポートでユーザーセグメントを作成する集計方法はいかがでしょうか。
・自由形式レポートを作成
・セグメント作成 > ユーザーセグメント
・条件は page_view > パラメータ page_location > 含む:会員登録画面のURL を指定
・「会員登録画面閲覧ユーザー」などセグメント名をセットして保存
・探索レポートにセグメントを適用
・ディメンション:セッションの参照元 / メディア、ランディング ページ + クエリ文字列
・指標:セッション
ご確認よろしくお願いいたします。
※ページ閲覧の発生しなかったセッションはランディングページが (not set)になります。
開きっぱなしのタブから再訪問するセッションなどが該当します。ご参考までに。
PMProでも似たような回答。
Google Analytics 4 can track ecommerce conversions and then assign page value to posts that were a part of their conversion path for that engaged session.
Server
httpd
Apache HTTP Server
Access Control
出典: Access Control - Apache HTTP Server Version 2.4。
DoS攻撃対策などで重要な設定。
mod_authz_core/mod_authz_hostがコアモジュール。mod_rewriteも関係ある。
基本構文は以下。
Require host <address> Require ip <ip address>
1番目の形式はドメイン名。2番目はIPアドレス。部分マッチする。マッチしたもののアクセスを許可する。
Requireの直後にnotを指定してアクセス禁止にできる。こちらが重要。
[サーバーIPがブラックリストに載ってメール送信エラーになるのを解除する方法]
MailHog: Go言語製のメールサーバーソフト。
Debian
PHP8
[How To Install PHP 8.0 on Debian 11/10/9 | ComputingForGeeks](https://computingforgeeks.com/how-to-install-php-on-debian-linux/)
Debian 11の場合、PHP 8には外部リポジトリーが必要なので追加する。
sudo apt update
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2
PHPパッケージを追加する。
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
sudo apt update
これでPHP8を参照できるので、インストールする。
sudo apt install php8.2
[How to Switch between Multiple PHP Version on Debian 12/11/10 – TecAdmin](https://tecadmin.net/switch-between-multiple-php-version-on-debian/)
インストールしたら、PHPのバージョンを切り替える。
a2dismod php7.4
a2enmod php8.2
sudo systemctl restart apache2
php 8.2にするとこういうエラー。
[Sat Sep 02 11:31:02.558029 2023] [php:error] [pid 25644] [client 133.106.38.37:57181] PHP Fatal error: Uncaught Error: Undefined constant "DB_DATAOBJECT_ERROR_NODATA" in /var/www/gnusocial/public/index.php:104\nStack trace:\n#0 [internal function]: handleError()\n#1 {main}\n thrown in /var/www/gnusocial/public/index.php on line 104
念のためdockerで起動を試みましたが、同じくトップ画面を開くと同じエラーになります。
<https://notabug.org/gnusocialjp/gnusocial/src/main/docker/development> にDockerでの起動方法があります。`docker compose up -d` を実行するだけでlocalhostでアクセスできます。
私とあなたとの環境の違いを排除したいので、dockerのインストールだけ頑張って、それでdockerでも簡単に動作確認してくれませんか?
alternative
Ref: DebianAlternatives - Debian Wiki.
OS内でバージョン違いのプログラムを管理するための仕組みがある。それがupdate-alternativesコマンド。
sudo update-alternatives --display vi
sudo update-alternatives --config vi
オプションとコマンド名を指定することで、現在の実体と更新ができる。
XAMPP
ポート番号変更
XAMPP Control PanelのConfigから変更可能。
phpmyadminはConfigのphpmyadminで、Servers.portを追加する。
Visual Studio Code
Keybind
矩形選択
Ref: VS Codeの矩形選択と矩形貼付の操作方法 - mito’s blog.
- s-alt-クリック
- c-s-alt-矢印
ジャンプ
- 括弧ジャンプ: C-S-\
Config
Default terminal
Ref: bash - Change the default terminal in Visual Studio Code - Stack Overflow.
[F1]-[Terminal: Select Default Profile]
cscope
cscope用のプラグインが何個かある。
scope4codeのほうがいろいろできそうだが、うまく動作しなかった。使い方がよくわからない。
cscope-codeはシンプルだが動作した。こちらを当分使うことにする。
Macの場合、control-. sのように、control-.の後に、controlを話してsを押すと発動する。カーソル下のシンボルしか使えない感じなのがネック。まあいい。
Vim
VSCodedでVimのキー操作を使うためのプラグイン。これが一番人気。いや、Vimのエミューレーターは中途半端な感じだから使わないほうがいいかな。
Extension
CSS
Tailwind CSS IntelliSense
PHP
Laravel Blade Snippets
PHP Intelephense
Ref: PHP Intelephense - Visual Studio Marketplace.
VSCodeのPHPの補完拡張として人気が高い。
Quick Start
設置後、しておくべき設定がある。
- Go to
Extensions
. - Search for
@builtin php
- Disable
PHP Language Features
. LeavePHP Language Basics
enabled for syntax highlighting.
VSCodeの [PHP Language Features] を無効にしておくとのこと。
後は、.php以外の拡張子でPHPファイルがあれば、関連付けを追加するとか。
Module
peclなどPHPの標準モジュールで一部認識できないものがある。
「php - Undefined type 'Imagick' in VSCode's intelephense - Stack Overflow」にあるように、そういう場合は [Settings]-[Stubs] で追加するとよい。
Coding
Ref: VSCode で PHP 開発するならインテリセンス最強の intelephense を使おう | 株式会社ビヨンド.
intelephenseでコード補完を認識しやすい書き方というのがある。
まず、型をつけられるものはつける。
function superMethod()
{
/** @var AwesomeService $awesomeService */
$awesomeService = $this->app->make(AwesomeService::class);
$awesomeService->awesomeMethod();
}
ローカル変数も型名を指定する。これをしないと、インスタンスでコード補完が効かない。
Project
- オープンソースの開発プロジェクトではコーディング以外のドキュメント化やサポートなどの貢献が特に重要 - GIGAZINE
- オープンソースプロジェクトを有料化して月収100万円の事業家に転身したソフトウェア開発者 - GIGAZINE
DB
Other
画像データのパス/BLOBでの格納
- database - Saving images: files or blobs? - Stack Overflow
- database - Storing Images in DB - Yea or Nay? - Stack Overflow
- To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem - Microsoft Research
- データベースに画像を保存するメリット・デメリットと必要性について
- データベースに画像を保存するのはありでしょうか?
画像のファイルサイズが1MB以下の場合は問題ない。が、それ以外だと問題があるので、ファイルパスで扱うのがいいらしい。
カラム順序
テーブルのカラム・列の順序。これに意味があるのか?カラムを追加する場合などに影響がある。
- MySQLでカラムの順番は重要ですか?
- 定義するカラムの順番
- テーブルのカラムを増やす際に末尾に追加するのではなく、カラムの並び順を変更したい #考え方 - Qiita
- PostgreSQLのカラム順序がテーブルサイズに与える影響 #PostgreSQL - Qiita
- database - Does column order matter in your MySQL tables? - Stack Overflow
- mysql - Is there any reason to worry about the column order in a table? - Stack Overflow
パフォーマンスに影響がある。特に下2個の情報が参考になる。
基本的に、頻繁に使用する列 (主キー、外部キー、頻出検索、頻出更新の順) を先頭に配置する。ただし、null許容は全体的に後ろ。null許容の中でも頻度順にする。
ディスクスペースの利用率、使用するデータの効率などに影響がある模様。
NULL
Ref: NOT NULL 制約をつけるべきカラムとは #PostgreSQL - Qiita.
絶対に必要な項目にNOT NULL制約をつける。NULLを許容する列は、最後のほうに集めると、ストレージなどの効率がいい。
例えば、取得に失敗した場合に、値をどうするのか?などを考えるとよい。
Convention
Ref: SQLで大文字・小文字のルールはある?区別・変換方法も一緒に教えます! | ポテパンスタイル.
予約語以外、基本的に全部小文字で、複数単語はハイフン区切りにしたほうがいいらしい。
一括更新
Ref: MySQLで複数行を一括更新するクエリの実装方法.
ELT/FIELDを併用すれば一括更新可能とのこと。
UPSERT
Ref: 【総まとめ】UPSERTとは?DBごとの違いは? | 初心者DIYプログラミング入門.
INSERTするかUPDATEするか、一度SELECTで値の有無を確認してから本来しないといけない。SQLを2回実行必要で、処理が無駄になるので、これを1回で行う。これがUPSERTと呼ばれるもの。ただし、UPSERTというSQLがあるわけではなく、DBごとの独自拡張になる。
MERGE文が一応あるが、MySQLにはない (sql - Is merge statement available in MySQL - Stack Overflow)。代わりにINSERT ... ON DUPULICATE KEY UPDATEという文を使う。
int/string
データベースのカラムでIDやコード類を定義する場合、型をintなどの数値系、charなどの文字列系にするかの議論がある。
- WHEREの範囲、算術計算など数値計算が伴うなら数値。データを何に使うかの意味論が重要。
- 数値のほうが高速。
- 郵便番号のように先頭が0つく場合、文字列。
- 数値だと、auto incrementで登録時の重複除去を保証できる。
- 値を変更する可能性がないなら数値。
- 文字列型だと文字数の検討が必要。
INT/BIGINT
- MySQLにおけるint型IDの限界とクラッシュ回避のための対策 #MySQL - Qiita
- 第178回 MySQLのAUTO_INCREMENTなINTEGERってどのくらいで使い切るの? | gihyo.jp
int型は4バイトでsignedなら2,147,483,647が最大値。1日1万件増加するとして588年。10万件で58年。増加追加量次第だが、中小規模なら通常はint型で問題ない。
BIGINTなら、1日100万件で25269512429年。BIGINTならほぼ問題ない。
ただ、BIGINTはINTの2倍のサイズになるのでストレージも消費する。よく考えておく。
BIGINTでも足りない場合、プライマリーキーを文字列にして、UUIDやhash値を使う。
マスター
マスタデータって何?マスタデータについて詳しく解説! - J-MDM/Snowflake
ユーザー、顧客や拠点の情報など、ベースとなるデータのこと。
マスターの他に、トランザクションというのもある。これは、売買などシステムや業務の稼働に伴って生じるデータ。
phpMyAdmin
テーブル定義出力
database - How to export mysql schema from phpmyadmin? - Super User
[エクスポート]-[詳細]
- フォーマット=Texy! text
- フォーマット特有のオプション: 構造
これで出力・表示すると使いやすい。
MySQL
Type
MySQL :: MySQL 8.0 リファレンスマニュアル :: 11 データ型
データ型の書式がある。
- DECIMAL(M [, D]): M=全体の桁数。D=内小数部の桁数。
- CHAR(M)/VARCHAR(M): M=格納最大文字数。CHARのM=0-255までで末尾はスペース。VARCHARはM=0-65535までで、可変長文字列で256以上もOK。末尾のスペースは削除される。先頭にプレフィクスの1-2バイトのデータを付与している。255バイト以下の文字列なら1バイト、256バイト以上なら2バイト追加。
Backup
mysql -u username -p database_name <file.sql
Error: [PDOException] PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]
- MySQL8.0以降で接続できない場合は「認証プラグイン」を変更する
- phpからMySQL 8.0へPDOで接続時「SQLSTATE[HY000 [2054] The server requested authentication method unknown to the client」 - Symfoware]
- 日々の覚書: MySQL 8.0.4におけるデフォルト認証形式の変更
- docker-compose MySQL8.0 のDBコンテナを作成する #Docker - Qiita
MySQL 8.0になってから、認証方式が変わったらしく、そのままだと接続に失敗する。
PHP 7.1.16, 7.2.4 以降から対応しているらしい。それ以前だと設定が必要。
Character
MySQLの文字コードとCollation #MySQL - Qiita
DBで使用する文字セットと、その照合順序を選択できる。
文字コードはutf8mb4で問題ない。照合順序も基本はutf8mb4_binで問題ないと思う。
A ≠ a 区別する
≠ 区別する
は≠ぱ≠ば 区別する
utf8mb4_general_ciは上2個を区別しない。
区別しないとあいまい検索で都合がいいことがある。
ただし、あいまい検索にすると、対象範囲が増えるので、少し遅くなる模様 (CharsetとCollationの設定がMySQLのパフォーマンスに与える影響 | Yakst)。
Office
Font
いくつか愛用しているフォントがある。
- IPAexフォントおよびIPAフォントについて | 一般社団法人 文字情報技術促進協議会: 日本語の日本公式フォント。IPAexMincho/IPAexGothic。
- Miguフォント : M+とIPAの合成フォント: Miguフォント。Migu 1C/Migu1M。IPAフォントとM+フォントの合成。半濁点の視認性が高かったり、コーディング用フォントとして手堅い。
日本語と英語でフォントを分けられないソフトがあったりするので、必然的に日本語フォントが優先される。
- 明朝体: IPAexMinch
- ゴシック: Migu 1C
- 等幅: Migu 1M
- スライド: Migu 1C
以前はスライド用にMigMix 1P/Migu 1Pを使っていた。視認性が高いから。その後、2011-04-18にMigu 1Cとさらに視認性を重視したフォントが生まれた (変更履歴 : M+とIPAの合成フォント)。Migu 1Cでいい。
Excel
オートシェイプの全選択
Ref: シート上の図形(オートシェイプ)を全て選択した状態にするショートカットキー【エクセルTips】
[C-g]-[セル選択]-[オブジェクト]
Word
キーワード変数
【Word】文書中に何度も登場する文字列を1か所変更するだけで他の箇所も一括で変更する方法 | My Life 8
例えば契約書などで、同じ氏名や住所が同一文書内に複数回登場することがある。一箇所変更すれば、全体も反映されるようにしたい。
ブックマークと相互参照を利用する。
- まずどこかで後で流用したい文字列を入力しておく (文書の先頭などわかりやすいだろう)。
- 登録対象文字列を選択して [挿入]-ブックマーク] を選び、わかりやすい名前でブックマークに登録する。
- 以後の登録した文字列を使いたい場所で、[挿入]-[相互参照] で先に登録したブックマークの参照を配置する。
- 文字列を一括置換したい場合、最初に登録したブックマークの文字列を別のものに変更する。
LibreOffice Draw
テキストボックスの内部余白
text box internal margins - how to set them - English - Ask LibreOffice
テキストボックスに二重に余白がある。内部余白は、[Format]-[Text Attributes...] から変更可能。
グリッド
図形の配置でグリッドとスナップが重要。
グリッドの間隔類は、[Preferences]-[LibreOffice Draw]-[Grid] で設定する。
[Resolution] がグリッド (点) の表示間隔。その横の [Subdivision] はグリッド同士の細分化個数。グリッドをあまり細かくしすぎると、目が疲れる。
例えば、グリッドを1間隔にして、subdivisionを2にすると、0.5間隔でグリッドの間をスナップできる。
General
Naming
RFC
- webmaster
- support
- info
- service
- pr
- billing
- 氏名
売上をアップするメールアドレス、商機を失うメールアドレス | マイナビニュース
infoやwebmasterなど企業サイトが備えるべきメールボックスのルール、ご存じですか? | 編集長ブログ―安田英久 | Web担当者Forum
rfc-jp.nic.ad.jp/rfc-jp/RFC2142-JP.txt
SuperTAINS News No.23 [Page.5]
【Mail】メールアドレス作成のガイドライン(RFC2142) – fumidzuki
公開用のメールアドレス。何にしようか考えていた。
RFC 2142でいくつか推奨されている。
info@ support@ answer@ inquery@ contact@ pubic@
contact@がやっぱり一番しっくりくる。info@ support@はRFC 2142にあるけど,これはビジネスより,サービスに紐付いたもの。個人でやる分にはサービス関係ないから,これは違う。publicも悪くはないのだけど,あまり一般的ではないか。
develop
GNU social JP管理人 (gnusocialjp@gnusocial.jp)'s status on Saturday, 08-Oct-2022 23:13:28 JSTGNU social JP管理人 使用するメールアドレスに悩みます。GitのメールアドレスはGitのホスティングサービスに掲載され一般公開されます。
メーリングリストのメールアドレスも、返信方法によって引用されアーカイブで一般公開されます。
どう使い分けるのがよいでしょうか?案↓
GNU social JP管理人 (gnusocialjp@gnusocial.jp)'s status on Saturday, 08-Oct-2022 23:20:04 JSTGNU social JP管理人 開発用のメールなので、1がいいですかね。仮に漏洩しても開発関係経由というのがわかるので。
- develop@domainのようなアドレスで共有
- develop@, ml@ で用途別
- contact@ で一般公開用で共有
1がいいと思う。
category
目的に応じて使い分けたほうがよさそう。
メールアドレスを何個ぐらい使い分けたら安全・快適に過ごせるのか - Dr.ウーパのコンピュータ備忘録
メールアドレス流出時の被害防止
不審なメールの検知
必要な数
- 銀行・証券会社
- 知り合い
- ショッピングサイト
その他
- Webサイトなどの公開用
- 本名でのやり取り
- ニックネーム
- 金銭のやり取りのないサービス登録
- 金銭のやり取りのあるサービス登録
- 登録にメールアドレスが必要だけど,そんなに使っていないメール
メールアドレスの種類
- フリーメール
- プロバイダーメール
- 独自ドメイン
メールアドレスの種類とアフィリエイトにおける3つの使い分け方法 | アフィリエイト
- サービス登録用
- メルマガ購読用(捨てアド)
- メインアドレス
メールアドレスの使い分けかた(前編) - 学習する機械、学習しない人間
メールアドレスの使い分けかた(後編) - 学習する機械、学習しない人間
これらを考えてどういう名前で何個用意するかを考える。
とりあえずメインで使うmainというアドレスを一つ用意する。残りをどうするか。
Webサイト公開用にcontact
- main: メインで使うメール。人に直接教えるときや,お金が絡む場合,ショッピングサイトなど実名が求められるような重要な内容にはこれ。こちらから送信するときもこれ。相手の顔が見えているとき。
- contact:受信専用,公開用。問い合わせ用。なんかフォーラムやブログのコメント欄やcontact usなどにこちらから問い合わせる時なども。相手の顔が見えないときなど。
- service: 基本的に受信専用,たまに返信。Webサービス登録用。
- recruit:就職活動用。就職サイトとか転職エージェント,企業とやりとりするときはけっこうメール来るから。
- job: 個人事業、仕事用、不動産は事業なのでこちら。
- money: 金融機関登録用。銀行、証券会社、クレジットカード会社、決済会社・サービス。
- shop/store: ショッピングサイト、個人間売買サイト。
- ユーザー名: メールアドレスの@以前はユーザー名とみなされることがあるので、ユーザー名のアドレスも用意しておくとよさそうだ。
こちらから送信するときのメールアドレス。
Webサービスに登録するときどうするか。不動産屋さんとか人に教えるときはどうするか。アフィリエイトとかドメインとか実名が求められるときはどうするか。
gmailの+を考える。gmailでは+や.をつけると無限にアドレスをつけられる。ただし,受信は+のないメール。
ただし,gmailの+は使えないときがある。@以前の部分をユーザー名とみなして,+を無効な文字とみなすサービスがある模様。
ネットではがきが印刷~郵送できるポスコミ【1枚から注文OK】
https://www.tomtop.com/もだめ。
今まで使ってきたメールとはどうやりくりするか。
Thunderbirdでやる場合,Archiveするときに既読とメールのコピーを行う。
他のアドレスのメールはmainに転送するようにしておいて,mainのメールアドレスで確認。
最終的にThunderbirdでArchiveを実行したら,宛先のメールのフォルダーに同じ内容が既読状態でコピーされることにする。
このようなフィルターを作っておく。受信時にコピーしてしまうと,未読状態でコピーされてしまうか,受信した瞬間に既読状態になってしまい,見逃す可能性が高い。
Manage Identitiesで返信時に受信したアドレスで返信できるように登録しておく。