投稿

2022の投稿を表示しています

Twilioにアカウント作成してBundle登録

Twilioを利用して会社用電話番号を取得したときの覚書。 環境: 株式会社、埼玉県川口市 Twilioにアカウント作成 Twilioを日本で利用するのにTwilio本社経由とKDDI経由がある。 参考:  日本でのTwilioアカウントについて – takeshi.furusato.blog さらにソフトバンクもTwilioと提携して固定電話サービスを始めるニュースが出た。 参考:  Twilio、ソフトバンクと提携して国内全域の固定電話番号で利用できるクラウド音声通話サービスを提供開始~電話回線の工事が不要で簡単に導入可能~ | 企業・IR | ソフトバンク 048の番号が欲しかったので後で要チェック。 前に調査したときにアカウント作成してた。 参考:  FreePBX + Twilioで外線電話を着信(調査編) Bundle登録 最初KDDI経由のアカウント登録があるというのを知らなかったので、下記手順でBundle登録したら翌日にRejectedの通知が来た。 KDDIウェブコミュニケーションズ Twilio サポートからは取引時確認が必要という案内が来た。 Twilio Bundlesの設定と登録方法【法人様の本人確認】 Twilio公式経由のアカウントなので公式ヘルプを参考にしながら再登録してみた。 Japan: Regulatory Guidelines | www.twilio.com 日本向け - Regulatory Bundle(規制情報)に関わる書類の提出方法 – Twilio Support 下記を一旦削除して提出し直し。 Completed Japan Regulatory Bundle Application(バンドル申請書) 公式ヘルプからWordファイルをダウンロードして入力する。 「チェック」で変換すると☑にできる。 パート5証明の署名は、印刷→直筆サイン&代表印→スキャン→PDF結合してアップロードした。 Corporate registration document(登記簿謄本) 約8ヵ月前に登記簿謄本(登記事項証明書)をスキャンしたPDFを添付。 Corporate registration showing name of the Authorized Representative(代表者の会社登録情報) 登記簿謄本PDFを

お知らせ投稿編集用のフリーのWYSIWYGエディタ

WordPressのお知らせ投稿を自前の管理画面で実装しているときに、HTMLを編集するWYSIWYG(What You See Is What You Get)エディタは何がいいのかと調査したときの覚書。 環境: WordPress 5.9.3 WYSIWYGの一覧はWikipediaが参考になる。 WYSIWYG - Wikipedia TinyMCE WordPressに組み込まれている有名なWYSIWYGエディタ。 ライセンスは6.0(2022年4月リリース)からMIT。 Tinyという会社がメンテナンスしている。 The Most Advanced WYSIWYG HTML Editor | Trusted Rich Text Editor | TinyMCE What’s new in TinyMCE 6.0 | TinyMCE フリー版にはTable編集機能がない。 コマーシャルライセンスで使うならCKEditorよりTinyMCEがお勧めという記事をアップしている。 CKEditor vs TinyMCE | Why TinyMCE is the Best CKEditor Alternative | TinyMCE CKEditor TinyMCEと同じ2大WYSIWYGエディタの一つ。 コマーシャルライセンスのフリー版は5ユーザーまで。 フリー版にTable編集機能あり。 WYSIWYG HTML Editor with Collaborative Rich Text Editing summernote コミュニティで開発しているオープンソースのWYSIWYGエディタ。 jQueryベース。MITライセンス。 Table編集機能あり。 Summernote - Super Simple WYSIWYG editor 「メディアの追加」の実装が大変そう。

人口メッシュ統計を作成するには

市区町村ごとではなく、病院を中心に半径〇kmの人口統計を得るにはどうすればいいか調査したときの覚書。 総務省統計局が地域メッシュ統計の作成方法をまとめている。 統計局ホームページ/地域メッシュ統計 東京⼤学空間情報科学研究センターの資料が具体的で参考になりそう。 【PDF】簡易100mメッシュ⼈⼝データの作成|東京⼤学空間情報科学研究センター すでにGoogle Map APIと連動したjSTAT MAPが利用できる。 地図で見る統計(統計GIS) | 政府統計の総合窓口 国土数値情報ダウンロードサービスから区域や施設データをダウンロードできる。 国土数値情報ダウンロードサービス 医療圏データには人口情報も付随しているので使えそう。 国土数値情報 | 医療圏データ 商用利用も可能。コンテンツを利用する際は出典を記載する。 利用規約 【関連記事】 e-StatのAPIを利用してデータ分析【API利用準備編】

git for windows 2.35.2 fatal: unsafe repository

Gitに脆弱性があるということでアップデートしたら下記エラーが表示されるようになった。 fatal: unsafe repository ('//vm-dev3/httpd/my-project' is owned by someone else) To add an exception for this directory, call:         git config --global --add safe.directory //vm-dev3/httpd/my-project 環境: git version 2.35.2.windows.1 開発環境はWindowsから仮想マシン(CentOS)の共有フォルダにアクセスしている。 言われた通りsafe.directoryに追加してみる。 PS W:\my-project> git config --global --add safe.directory //vm-dev3/httpd/my-project PS W:\my-project> git status warning: encountered old-style '//vm-dev3/httpd/my-project' that should be '%(prefix)//vm-dev3/httpd/my-project' fatal: unsafe repository ('//vm-dev3/httpd/my-project' is owned by someone else) To add an exception for this directory, call:         git config --global --add safe.directory //vm-dev3/httpd/my-project 調べてみると「%(prefix)/」を追記する必要があるという情報があった。 Git for windows 2.35.2 can not add exception safe.directory - Stack Overflow PS W:\my-project> git config --global --edit [safe] dire

PHPセッションの設定確認

Oauthのstate用にセッションIDをハッシュ化して開発している時に本番環境でうまく動かなかったので、一つずつ原因を紐解いていったときの覚書。 環境: CentOS Stream 8, nginx 1.20.2, PHP 7.4.19, WordPress 5.9.2 Android上のChromeで動作確認している。 デバイスの開発者向けオプションを設定する  |  Android デベロッパー  |  Android Developers Remote debug Android devices - Chrome Developers PHPセッション設定 まずはPHPのセッション関連設定を確認する。 セッションIDの置き場所の確認 # less /etc/php-fpm.d/www.conf php_value[session.save_handler] = files php_value[session.save_path]    = /var/lib/php/session セッションのタイムアウト時間設定の確認 # php -i | grep session session.cookie_lifetime => 0 => 0 session.gc_maxlifetime => 1440 => 1440 session.name => PHPSESSID => PHPSESSID cookie_lifetime=0の場合はブラウザが閉じるまでセッションを維持する。 gc_maxlifetime=1440は秒数。24分経過するとガベージコレクションで(一定確率で)消去される。 念のためphpinfo()をどこかに設置して、php-fpm経由のphpinfo()を表示して確認する。 セッションID生成の動作確認 PHPセッションの基本的な動作は公式サイトを参考に。 PHP: 基本的な使用法 - Manual session_start()したときに生成したセッションIDを確認する。 ChromeブラウザのDeveloper Toolsの「Network→(リクエストしたパス)→ Cookie」を見る。session_start()するパスではPHPSESSIDが生成されているはず。 Name: PHPSESSID Val

JavaScriptでシークレット/プライベートモードか判定できる?

ブラウザがシークレットモード(Incognito mode/Private mode)だと予期せぬ不具合が発生するので、事前に警告するためJavaScriptで現在のモードを判断できるか調査したときの覚書。 シークレット ブラウジング - パソコン - Google Chrome ヘルプ Gist | Detect if the browser is running in Private mode (Promise based) ユーザーエージェント文字列を用いたブラウザーの判定 - HTTP | MDN Gistのサンプルコードは動作しないというコメントがある。 そもそもシークレットモードが検知できるのがセキュリティ的な欠陥という議論がある。 「Chrome」のシークレットモードを検知できる手法、研究者が指摘 - CNET Japan 今検知できたとしても、将来的に出来なくなる可能性が高そう。 事前に検知するのは諦めた。 IEのテストをしなくてよくなったと思ったら、意外な検査項目が増えた(笑) 【関連記事】 WordPressのSessionの仕組み LINE Notifyでメールアドレスがないユーザーとの問合せ機能を実現したい

nginxで国単位のIPアドレス制限

セキュリティのために日本国外からのアクセスをブロックしようとしたときの覚書。 環境: CentOS Stream 8, nginx 1.20.2, PostgreSQL 14.2 IPアドレスから国を判定するためにMaxMind社が提供しているデータを使う。 MaxMind社はIPアドレスの位置情報を提供しているアメリカの会社。 参考:  MaxMind - Wikipedia nginxにGeoIP2モジュールを追加するとパフォーマンスに影響が出そうな気がするので、まずは国ごとのIPアドレスリストを生成することから始めてみた。 MaxMindはAPIを幅広く提供していて使いやすい。 GeoIP2 and GeoLite2 Database Documentation | MaxMind Developer Portal GeoLite2はクリエイティブコモンズライセンスで提供されている。 配布する場合はクレジット表示が必要。 参考:  GeoLite2 Free Geolocation Data | MaxMind Developer Portal 国別IPアドレスリストをPostgreSQLにインポート 公式サイトを参考に。MySQLへのインポート方法もある。 PostgreSQLにはcidrというIPv4とIPv6を格納するデータ型があるので便利。 Importing GeoIP2 and GeoLite2 databases to PostgreSQL | MaxMind Developer Portal PostgreSQL: Documentation: 14: 8.9. Network Address Types 簡単な手順 メールアドレスでサインアップする。 マイページ左メニューの「Download Files」から「GeoLite2-Country-CSV」zipファイルをダウンロード。 ASNはAS番号を割り当てられた組織 参考:  自律システム (インターネット) - Wikipedia PostgreSQLにインポート CSVファイルを開発サーバーに置いて、DBeaverでデータベースを作成して、公式サイトのcreate table文を実行。 参考:  Importing GeoIP2 and GeoLite2 databases to Po

pgAdmin4をサービス化して自動起動設定

pgAdmin4をサービス化して自動起動したときの覚書。 本番環境はphpMyAdminと同じくブラウザでデータベースを確認できるようにする。 環境: CentOS Stream 8, nginx 1.20.2, pgAdmin4 6.6, certbot 1.24.0 インストールするまでは前の記事を参考に。 参考:  pgAdmin4をCentOS8にvenvでインストール unitファイル作成 参考サイト systemd のユニットファイルの作り方 | 晴耕雨読 Systemd入門(1) - Unitの概念を理解する - めもめも OS起動時にsystemdで行われていること - Qiita man systemd.unit の訳 - kandamotohiro Hostinghub.eu | Articles and information システムサービス用unitファイルの置き場所に移動して一覧表示 # cd /etc/systemd/system # ls 「systemctl enable」したシンボリックリンク一覧をみる # ll multi-user.target.wants/ サービスの依存関係を見る # systemctl list-dependencies PostgreSQLのunitファイルを参考にして編集する。 # cp multi-user.target.wants/postgresql-14.service ./pgadmin4.service # less pgadmin4.service # # pgAdmin4 # [Unit] Description=pgAdmin4 service with gunicorn After=syslog.target After=network.target [Service] User=nginx Group=www # Location of venv pgadmin4 Environment="PATH=/opt/software/python-venv/pgadmin4/bin/" ExecStart=/opt/software/python-venv/pgadmin4/bin/gunicorn  --bind unix:/tmp/pgadmin4.sock -

pgAdmin4をCentOS8にvenvでインストール

venvを知って仮想環境へインストールしたときの覚書。 環境: CentOS Stream 8, Python 3.9.7, PostgreSQL 14.2, pgAdmin4 6.6, gunicorn 20.1.0, nginx 1.20.2 pip経由でインストールする。公式サイトを参考に。 pgAdmin 4 (Python) Download pgAdmin4用システムディレクトリを作成 # mkdir /var/lib/pgadmin # mkdir /var/log/pgadmin Python仮想環境用のディレクトリを作成してpgadmin4仮想環境を作成。 # mkdir /opt/software/python-venv # cd /opt/software/python-venv # python -m venv pgadmin4 仮想環境用スクリプト実行 # source pgadmin4/bin/activate pipの確認とアップグレード (pgadmin4)# python -m pip list (pgadmin4)# python -m pip install --upgrade pip setuptools pip経由でpgAdmin4のインストール。 (pgadmin4)# python -m pip install pgadmin4 pgAdmin4実行 (pgadmin4)# pgadmin4 このPCはLAN内の開発サーバー。ブラウザでアクセスして確認してみる。 表示できないのでファイヤーウォール確認 (pgadmin4)# systemctl status firewalld (pgadmin4)# firewall-cmd --list-all pgAdmin4の5050ポートを開けて確認 (pgadmin4)# firewall-cmd --add-port=5050/tcp --permanent (pgadmin4)# firewall-cmd --reload (pgadmin4)# firewall-cmd --list-all pgAdmin4実行 (pgadmin4)# pgadmin4 ブラウザでアクセスして確認する。 表示できない…。 別コンソールを開いてポートが空いているか確認。 TCPソケット(

Pythonモジュールを全アンインストールして初期化

Pythonにはvenvというモジュールで仮想環境を作るということを知ったので、今までインストールしたモジュールを削除したときの覚書。 環境: Python 3.9.7 参考サイト pipで一括"アン"インストールする方法【Python】 – アヒルの豆知識 インストールしてあるモジュールを書き出してアンインストール実行 # pip freeze > uninstall.txt # pip uninstall -y -r uninstall.txt # pip list pipアップグレード # python -m pip install --upgrade pip ファイル削除 # rm uninstall.txt 必要なモジュールはインストール # python -m pip install requests psycopg 【関連記事】 Python3.6と3.9を共存させようとして結局3.6はアンインストール Python3.6からPython3.9に切り替える

Python3.6と3.9を共存させようとして結局3.6はアンインストール

前にpipコマンドをPython3.9にするためにPython3.6をアンインストールしたけれど、本番環境ではPython3.6を残す方向でインストールしたときの覚書。 参考:  Python3.6からPython3.9に切り替える 環境: CentOS Stream 8, Python 3.6.8, Python 3.9.7 Python3.6だけでいいかな?と思ったけれど、バッチ処理がPython3.6だと90分掛かるのに対して、Python3.9だと10分ほどで終わるので 速度メリットが圧倒的 すぎる。 そもそもPythonの世界では1つのPCで複数のバージョンやライブラリを使うのが普通であり、そのためのvenvモジュールが用意されている。次回venvを試す予定。 Python3.9をインストール # dnf install python39 確認 # python3.9 --version python3コマンドとpythonコマンドのバージョンを変えない。 一応alternativesに登録されているか確認。 # alternatives --list # alternatives --config python3 # alternatives --config python pipコマンドの確認 # pip --version # which pip pip 21.3.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6) # python3.9 -m pip --version pip 20.2.4 from /usr/lib/python3.9/site-packages/pip (python 3.9) とりあえずアップデートする # python3.9 -m pip list # python3.9 -m pip install -U pip setuptools # python3.9 -m pip list そうしたらpipコマンドは3.9に置き換わっていた。 # pip --version pip 22.0.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9) ん?これでpython3.6のpipを更

WordPressのSessionの仕組み

WordPressでsession_id()を実行しても値が返って来なかったので調査したときの覚書。 環境: PHP 7.4.19, WordPress 5.9.1 WordPressはPHPのsession_start()を使っていない。 おそらくPHPセッションが使えない環境でも動作するため。 だからCookieにPHPSESSIDは保存されないはず。 Cookie($_COOKIE)を使って自前でセッションを実装している。 WordPressが現在のユーザーを判定する仕組み ログインしたときにwp_set_auth_cookie()でcookieにトークン書き込み。 wp-includes\pluggable.php:904行目 このトークンをwp_user_metaのsession_tokensにも保存。 wp-includes\class-wp-user-meta-session-tokens.php ページを表示したときにwp_get_current_user()が実行。 wp-includes\pluggable.php:69行目 apply_filters( 'determine_current_user', false )からwp_validate_auth_cookie()が実行されcookieの情報を参照。 wp-includes\pluggable.php:681行目 cookieに書き込まれたユーザー名からユーザーIDを取得。 このユーザーIDのwp_user_metaのsession_tokens=cookieトークンならばログインユーザー。 一言でいうならWordPressはセッション管理を自前で行っている。 ここで気付いたのは WordPressはサーバーのsession設定と関係なく、cookieに書き込まれた時間でsession切れ になる。 wp_set_auth_cookie()に記述されているのは デフォルトで2日間 ログイン状態を保存するだと14日間 auth_cookie_expirationフィルターで設定変更できる でも管理画面開きっぱなしで何もしていないと自動ログアウトしているような…。 この処理はまた後日調べる。 ゲストユーザーもセッションを使いたい場合 PHPのsession_start()を使

LINE Notifyでメールアドレスがないユーザーとの問合せ機能を実現したい

ホームページから問い合わせしたユーザーと メールアドレスなし でLINEでうまいことやり取りできないものかと調査したときの覚書。 LINE公式アカウント+Messaging APIではなく、もう少し緩い繋がりでメッセージのやり取りだけしたい。 WEBサービスからLINE通知を送れるLINE Notifyという機能がある。 LINE Notify ヘルプセンター | LINE Notify LINE Notify API Document LINE Notifyの使い方(PHPコードを例に) - Qiita LINE Notifyの概要 WEBサービスからユーザーのLINEへ通知を送ることができる。 特徴まとめ 通知はLINEの公式「LINE Notify」というアカウントのメッセージとして表示される。 サイトに訪れた不特定多数のユーザーに通知するためにはサービス登録して、通知許可画面でユーザーに許可してもらう必要がある。 WEBサービスを登録しなくてもパーソナルアクセストークンを使うと、事前選択した通知先トークルームへ通知を送ることができる。 サービス登録にLINEアカウントが必要。 LINE Businessアカウントではログイン出来なかった。 → プライベートと分ける場合は別の電話番号が必要(Androidのマルチユーザー機能を使うとLINEアプリの複数インストールは可能) サービスの制限 トークンごとAPIのcall回数は1時間1000回 1ユーザーあたりトークン発行数100個 送信可能なメッセージ 改行とリンクは送信可能 画像(最大 2048×2048px / JPEG)とスタンプも送信可能 参考:  LINE Notify API Document 活用すればメールアドレスがないユーザーともやり取りできる仕組みが出来そう。 試してみる予定。 (2022/03/14追記)試してみた iPhoneで標準ブラウザをSafariに設定していないLINEアプリが起動しない。 (iPhoneのChromeだとウェブのログイン画面が表示される) Androidで標準ブラウザをChromeに設定していないLINEアプリが起動しない。 (Firefoxだとウェブのログイン画面が表示される) ブラウザがシークレット(プライベート)モードだと「ページが見つかりません」になる。

PostgreSQLのチューニング設定

データ分析用PostgreSQLを本番環境へインストールしてチューニングしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 Autovacuumの設定 autovacuumはデフォルトで有効。 track_countsもデフォルトでオンになっているので、特に設定しなかった。 参考:  PostgreSQL: Documentation: 14: 20.10. Automatic Vacuuming 参考:  autovacuumのチューニング要素について考えてみる - Qiita サーバーに合わせたチューニング設定 下記サイトを参考にしながら設定した。 チューニング ~データベースチューニング~|PostgreSQLインサイド : 富士通 【PostgreSQL】PostgreSQLのチューニング(設定編) - PEOPLE Engineering Blog # su - postgres $ cd 14/data/ $ less postgresql.conf max_connections = 200 shared_buffers = 512MB work_mem = 8MB maintenance_work_mem = 256MB rootに戻って再起動 # systemctl restart postgresql-14 # systemctl status postgresql-14 状態を監視 PostgreSQLでは組み込みの統計情報表示用Viewが用意されている。 参考サイト PostgreSQL: Documentation: 14: 28.2. The Statistics Collector PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料 データベースシステムの監視 ~監視方法と監視例~|PostgreSQLインサイド : 富士通 縦表示にしてrecruitテーブルの統計情報を見てみる。 # su - postgres $ psql # \x # select viewname from pg_views; # select * from pg_stat_database where datname = '

WordPressのページ間キャッシュTransients API

WordPressのログインユーザーはnginxキャッシュは効かないように設定してあるので、ページ間でキャッシュする仕組みはないものかと調査したときの覚書。 環境: WordPress 5.9.1 Transients APIがあるのを知った。 オブジェクトキャッシュとの違い WP_Object_Cache: メモリに保存。リクエストごと。ページ間でキャッシュ出来ない。 参考:  WP_Object_Cache | Class | WordPress Developer Resources WP Transients API : データベースに保存(wp_options)。指定時間経過でキャッシュクリアできる。 参考:  Transients | Common APIs Handbook | WordPress Developer Resources 参考:  set_transient() | Function | WordPress Developer Resources Nginx Proxy Cache: ファイル保存。リクエストをPHPに渡さずに返す。 WP Transients APIはwp-includes/option.phpのget_transientとset_transientを見た方が早い。 PHP Cache で実装しようとしていたところなのでこの機能はありがたい。 【関連記事】 WordPress記事を投稿時にNginxのキャッシュを削除 静的WordPress向けNginxのfastcgi_cache設定 WordpressでAPCを使ったObject Cacheを有効にする

PostgresSQLの言語設定(locale)をja_JPにする

データ分析用PostgreSQLの言語設定したときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 インストールは 前の記事 を参考に。 CentOSの言語設定を確認 # localectl status    System Locale: LANG=en_US.UTF-8        VC Keymap: jp106       X11 Layout: jp,us      X11 Variant: , OSは英語のままデータベースは日本語にする。 言語設定は照合順序に関係する。詳しくは下記公式サイトで。 23.1. ロケールのサポート | PostgreSQL PostgreSQL: Documentation: 14: 24.1. Locale Support OSで提供している言語設定一覧を確認 # locale -a ja_JPがない場合はこの記事の下を参照してインストール。 今のPostgreSQLの設定を確認 # su - postgres データベースのリストを表示 $ psql -l 既存のデータベースのCollate, Ctypeは変更できない。作り直す必要がある。 PostgreSQLの設定変更 $ cd 14/data/ $ less postgresql.conf lc_messages = 'ja_JP.UTF-8' # メッセージの言語 lc_monetary = 'ja_JP.UTF-8' # 通貨書式 lc_numeric = 'ja_JP.UTF-8'  # 数字の書式 lc_time = 'ja_JP.UTF-8'     # 日付と時刻の書式 rootに戻ってPostgreSQL再起動して確認 # systemctl restart postgresql-14 # systemctl status postgresql-14 ログが日本語になっているのは気持ち悪いので英語に戻す # less /var/lib/pgsql/14/data/postgresql.conf lc_messages = 'en_US.UTF-8' # systemctl restart postgresql-14 # systemctl

PHPからPostgreSQLへ接続

PHPからPostgreSQLへ接続 → クエリを発行 → データ取得しているときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2, PHP 7.4.19 参考サイト PHP: PostgreSQL - Manual pgsqlインストール PHPからPostgreSQLに接続するためのextensionをインストール # dnf install php-pgsql /etc/php.d/20-pgsql.iniが作成された。 依存関係のlibpg5がpgdg-commonリポジトリからインストールされた。 これはPostgreSQLをインストールした際に追加されたリポジトリ。 確認 # php --ri pgsql pgsql PostgreSQL Support => enabled PostgreSQL(libpq) Version => 13.5 PostgreSQL(libpq)  => PostgreSQL 13.5 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-5), 64-bit Multibyte character support => enabled SSL support => enabled Active Persistent Links => 0 Active Links => 0 Directive => Local Value => Master Value pgsql.allow_persistent => On => On pgsql.max_persistent => Unlimited => Unlimited pgsql.max_links => Unlimited => Unlimited pgsql.auto_reset_persistent => Off => Off pgsql.ignore_notice => Off => Off pgsql.log_notice => Off => Off サンプルプログラム ローカルホストのPostgreSQ

pgAdmin4をCentOS8+Python3.9へインストールしようとして失敗

PostgreSQLを久しぶりに触ってウェブ版pgAdmin4をインストールしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2, pgAdmin4 6.5 インストールに成功した記事はこちら。 参考:  pgAdmin4をCentOS8にvenvでインストール 参考 pgAdmin - PostgreSQL Tools Download | pgAdmin 上記サイトを参考にインストール # dnf install pgadmin4-redhat-repo # dnf info pgadmin4-web # dnf install pgadmin4-web Package pgadmin4-redhat-repo-0.9-2.noarch is already installed. なぜかpgadmin4-redhat-repo-0.9-2をインストールしようとしている… cleanして再実行 # dnf clean all # dnf install pgadmin4-web …変わらずインストールできないので、リポジトリ情報だけ残して削除。 # cd /etc/yum.repos.d/ # cp pgadmin4.repo pgadmin4.repo.bak # dnf remove pgadmin4-redhat-repo # mv pgadmin4.repo.bak pgadmin4.repo # dnf install pgadmin4-web 依存関係でPython3.6をインストールするので止めた。 前の記事 でPython3.9に変更したばっかり。 pip経由でインストールすることにした。 # pip install pgadmin4 エラー ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. pyopenssl 22.0.0 requires cryptography>=35.0, but you ha

Python3.6からPython3.9に切り替える

開発サーバーのPythonを3.6から3.9に切り替えたときの覚書。 ちなみに本番環境ではgsutilの要件がPython3.8までなのでPython3.6のまま。 環境: CentOS Stream 8, Python 3.6.8, Python 3.9.7 Python3.9をインストール # dnf install python39 Pythonのコマンドをデフォルトで3.9にして確認 # alternatives --config python3 # alternatives --config python # alternatives --list バージョンとパスの確認 # python3 --version Python 3.9.7 # which python3 /usr/bin/python3 pipの確認 # pip --version # pip3 --version /usr/local/binに設置されている。 /usr/local/binはpython3.9がインストールされた/usr/binより優先されてしまうので、python3.6はアンインストールする。 (共存できるためpython3.6をアンインストールする必要はない) # dnf remove python36 あれ?pipが/usr/local/binに残っている。 シンボリックリンクでないことを確認して手動で削除。 # cd /usr/local/bin # ll # rm -f pip* 関係ありそうなライブラリを削除しておく (/usr/local/lib/python3.6/はpip installしたモジュールの保存場所) # rm -rf /usr/local/lib/python3.6/ シェルの再読み込み # cd # source .bash_profile pipコマンドをalternativesで登録する。最後の1は優先順位。 参考:  alternatives による標準コマンドの切り替え # alternatives --install /usr/bin/pip pip /usr/bin/pip3.9 1 確認してアップデート # pip --version # pip list # pip install -U pip setuptools 本番環

ローカルのPostgreSQLにUnix socketで接続する

PythonでローカルのPostgreSQLに接続するならUnix socket経由の方が速いだろうと設定したときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 参考 PostgreSQL: Documentation: 14: 20.3. Connections and Authentication PostgreSQL: Documentation: 14: 34.1. Database Connection Control Functions # su - postgres $ cd 14/data/ $ less postgresql.conf unix_socket_directories = '/var/run/postgresql' PostgreSQL再起動 # systemctl restart postgresql-14 ファイルがあるか確認 # ls -a /var/run/postgresql/ postgresでpythonプログラムを実行する # su - postgres psycopg.connectはhost名にunix_socket_directoriesを設定。 psycopg.connect("host=/var/run/postgresql dbname=recruit") 計測してみたら数秒速くなった程度なのでTCP/IPで運用することにした。 でもWindowsからリモートでDB接続するよりローカルの方が圧倒的に速い。 【関連記事】 Python+psycopg3でPostgreSQLに接続 CentOS8にPostgreSQLをインストール。Windows10からDBeaverで接続 TCP/IPとUNIX Socketの接続でどれくらい違うか

Python+psycopg3でPostgreSQLに接続

PythonからPostgreSQLに接続する方法を調査している時の覚書。 環境: Windows10, Python 3.10.2, psycopg 3.0.9 検索すると psycpg2 のサンプルプログラムが多く見つかるけど、今はpsycopg3がメインストリームになっている。 psycopg 3.1.dev0 documentation Differences from psycopg2 - psycopg 3.1.dev0 documentation psycopg3をインストール > pip install psycopg[binary] psycopg-binaryはPostgreSQLのlibpqをインストールしていない環境でも動作させるためのライブラリ。 PostgreSQLをインストールしたCentOS上は「pip install psycopg」だけでOK サンプルプログラムは公式サイトを参考にする。 Basic module usage - psycopg 3.1.dev0 documentation ざっと読んだポイントとしては connect()でデータベースのセッション開始 cursor()でクエリ制御開始 execute()した後にselectした値を取得するにはcur.fetchone, cur.fetchallを使う 参考:  Cursor classes - psycopg 3.1.dev0 documentation withブロック推奨。withを使うことでwithの終了と同時に自動コミットされる 参考:  Transactions management - psycopg 3.1.dev0 documentation 一発目のcur.execute()でトランザクションを開始する(SELECTでも) SELECTしかないwithブロックならautocommit=Trueにすることで不必要なロックを回避できる(psycopgはデフォルトでautocommit=Falseで接続する) 参考:  Connection classes - psycopg 3.1.dev0 documentation 【関連記事】 CentOS8にPostgreSQLをインストール。Windows10からDBeaverで接続 Pythonのコ

CentOS8にPostgreSQLをインストール。Windows10からDBeaverで接続

久しぶりにPostgreSQLをインストールしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 CentOSにPostgreSQLのインストール リポジトリにあるposgresql-serverのバージョンを確認。 # dnf search postgresql # dnf info postgresql-server Available Packages Name         : postgresql-server Version      : 10.19 Release      : 1.module_el8.6.0+1047+4202cf9a Architecture : x86_64 # dnf module list postgresql 最新バージョンv14を公式ページに従ってインストールすることにした。 参考:  PostgreSQL: Linux downloads (Red Hat family) # dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm # dnf -qy module disable postgresql インストール # dnf install postgresql14-server 初期化して自動起動Onしてサーバー起動 # /usr/pgsql-14/bin/postgresql-14-setup initdb # systemctl enable postgresql-14 # systemctl start postgresql-14 バージョン確認 # psql --version psql (PostgreSQL) 14.2 設定ファイル(pg_hba.confなど)の場所確認。起動オプションで与えられているはず。 # systemctl status postgresql-14 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/ 設定ファイル確認 # cd /var/lib/pgsql/14/data/ # less postgres

ハローワークAPIで求人情報検索

ハローワークAPIを調査している時の覚書。 環境: API v2.0、API仕様書第1.3版 利用には職業紹介事業免許が必要。 ハローワークインターネットサービス - ハローワーク求人・求職情報提供サービスをご利用の方 利用できるようになるまでの経緯 「事業所・求人申込み(仮登録)」から手続き開始。 データの種類でCSVとAPIが選べるのでAPIを選択。 入力内容の申請書PDFをダウンロード、署名、担当労働省へ郵送(2/10郵送)。 当日に労働局からメールが来ていたけど内容の意味が分からなくてスルーしてた。 労働局から再度確認メールが来て「差し戻し」になった。 電話して理由を聞くと、 紹介実績が1件以上ないと求職情報(職を探している人の情報)を参照することはできない 。 情報提供を求人情報提供(求人を出している企業情報)のみに変更して、署名→スキャン→メール添付送信(2/15) 利用開始時期通知のメールが届いて利用できるようになった(2/18) ログインするとメニュー → 求人情報 → API利用からAPI利用手順書が閲覧できるようになる。 利用時の注意点 レスポンスデータはXML形式 毎日メンテナンスで繋がらない時間帯がある。 毎日0時~6時まで 月の末日21時30分~翌日6時まで 1日1回毎日21時30分時点のデータで更新 利用規約 をよく読む - 職業紹介と関係がない目的で利用しないこと。 - 求人対象団体および求職者以外の不特定多数の者への提供は行わないこと。 - 求人内容は正確に引用し、内容を改変しないこと。 等、重要なことが記載してある。規約違反は利用停止処分。 ハローワークAPIを利用したサービス SHIRAHA WORK|ハローワーク求人票から採用サイトがつくれる かなり強気の価格設定。求人番号入れてもデモサイト作れないし、導入事例のホームページを見てもサービスが使われている形跡がないのが心配。 …と思ったら身売りしてた。 参考:  大分発HRテック企業「HAB&Co.」の株式取得のお知らせ 行政や自治体によるGovTechモデルで地方強化と業界DXを推進|トライトグループのプレスリリース 身売り先が医療介護の会社なので競合になるかもしれない。楽しみ。 【関連記事】 Pythonで外部APIからXMLデータ取得して確認 e-StatのAPIを

Pythonで外部APIからXMLデータ取得して確認

Pythonで外部APIからXMLデータを取得して処理している時の覚書。 環境: Python 3.10.2, requests 2.27.1 API叩くのはRequestsを使い。XMLをパースするのはxml.etree.ElementTreeを使う。 Requests: HTTP for Humans™ — Requests 2.27.1 documentation xml.etree.ElementTree — The ElementTree XML API — Python 3.10.2 documentation プログラム例 import requests import xml.etree.ElementTree as ET token_get_url = 'https://sample.url/api/2.0/auth/getToken' auth = {     'id': 'login',     'pass': 'password', } response = requests.post(token_get_url, params=auth) if response.status_code != 200:     print('取得に失敗しました。') root = ET.fromstring(response.text); #print(response.text) ET.dump(root) elem = root.find('token') print(elem.text) VS Code+Pythonプラグインでブレイクポイントを設定して途中で止めれるので、変数やオブジェクトの構造を確認するのに便利。 Get Started Tutorial for Python in Visual Studio Code 【関連記事】 Pythonのコーディング規約

Pythonのコーディング規約

機械学習のためにPythonを勉強し直しているときの覚書。 コーディング規約は公式サイトのPEP8を参照 PEP 8 -- Style Guide for Python Code | Python.org はじめに — pep8-ja 1.0 ドキュメント 【Pythonコーディング規約】PEP 8 vs Google Style - Qiita 初回は日本語訳ドキュメントで理解して、確認するときは公式英語版を参照する。 自分用まとめ UTF-8(BOMなし)= UTF-8N インデントはスペース4つ 一行は79文字まで 改行する場合は演算子の前で トップレベルの関数間は2行空ける。クラス内のメソッド間は1行空ける。 引用符に規定なし。単語はシングルクォーテーション、文章はダブルクォーテーションにすることにした。 参考:  coding style - Single quotes vs. double quotes in Python - Stack Overflow 関数名と変数名は小文字のsnake_case クラス名はPascalCase(UpperCamelCase)。メソッド名は関数と同じsnake_case。privateな場合は先頭にアンダースコアを付ける PHPとJavaScriptをやっているとメソッド名はcamelCaseにしたくなる… 参考:  Pythonのloggingライブラリは、なぜcamelCaseなのか? - Qiita 定数は全大文字のアンダースコア区切り VS CodeにPythonプラグインをインストールすればPEPに準拠してくれる。 下記マイクロソフトのサイトはHello WorldからVS Code上でデバッグするやり方をチュートリアル形式で細かく解説してくれていて分かりやすい。 Get Started Tutorial for Python in Visual Studio Code 【関連記事】 PHP Standards Recommendations:PHPコーディング規約 Closure LinterをInstallしてCoding規約に従っているかCheck GAE/Pythonのコーディングメモ

情報処理支援機関認定制度「スマートSMEサポーター」

中小企業庁のページで認定情報処理支援機関というのがあるのを知って調査したときの覚書。 参考サイト 中小企業庁 / The Small and Medium Enterprise Agency トップページ | 認定情報処理支援機関(スマートSMEサポーター)制度 認定情報処理支援機関とは 2018年施行の「中小企業等経営強化法」による経済産業省が認定する情報処理支援機関。 中小企業を支援するITベンダーが対象。 愛称: スマートSMEサポーター SME: Small and Medium-sized Enterprise 取得要件 3年以上のソフトウェア又はクラウドサービスの提供実績、または10者以上の中小企業への提供実績を有していること。 法人だけでなく個人事業主でも申請可能 3年ごとに更新申請が必要 認定取得方法 GビズIDが未取得の場合は作成する。 法人の場合は印鑑証明書の提出が必要なため取得するまで1週間ぐらい掛かる。 GビズID | Home 申請受付期間があるので注意 申請・手続き | 認定情報処理支援機関(スマートSMEサポーター)制度 申請手順 公式ページ の「情報処理支援機関 新規登録」からGビズIDでログイン 画面に従いの内容を入力していく 自社サービス登録を複数登録することができる。登録番号が割り当てられる。 「登録情報の確認」で申請内容を確認できる。 印刷してPDF保存しておく。 締切後45日以内に審査 「セキュリティ対策」の項目を見ておくだけでも、どんな体制を準備すればいいか分かるので事前に確認しておくといい。 情報セキュリティ基本方針は下記ページにサンプルがある。 中小企業の情報セキュリティ対策ガイドライン:IPA 独立行政法人 情報処理推進機構 情報処理支援機関検索 から認定された企業一覧を検索できる。 問合せフォームがあるにもかかわらずSSL導入してない企業も多数。 審査自体は厳しくないのかもしれない。 広報するときは PRTIMES で「スマートSMEサポーター」と検索すると、いい文章が見つかるので参考にするとよい。 【関連記事】 有料職業紹介事業(人材紹介業)の免許取得手順 会社登記の金額を半額に。市の制度を利用する

e-StatのAPIを利用してデータ分析【API利用準備編】

e-Stat統計情報APIでサービス作っているときの覚書。 公式サイト 政府統計の総合窓口(e-Stat)−API機能へようこそ | 政府統計の総合窓口(e-Stat)−API機能 APIまとめ メールアドレスがあれば誰でも利用可能 クレジット表示が必要 参考:  クレジット表示 | 政府統計の総合窓口(e-Stat)−API機能 利用手順 上記公式サイトのAPI機能からe-Statユーザ登録を行う マイページのAPI機能(アプリケーションID発行)から名称とURLを登録して発行。 開発用としては例えば下記のように登録。 名称: 開発 URL: http://dev.localhost/ 公式API仕様書を見ながらリクエストを送る データが膨大なので、まずは統計分野の分類コードで絞り込んで取得する。 参考:  統計分野 | 政府統計の総合窓口(e-Stat)−API機能 Python+XML形式で取得してPostgreSQLに流し込んでデータ分析に使う予定。 このデータの塊をどうビジネスに応用するのかが面白いところ。 【関連記事】 JavaScriptグラフ描画ライブラリ「Chart.js」 2022年4月施行の改正個人情報保護法とCookieとGoogle Analytics

JavaScriptグラフ描画ライブラリ「Chart.js」

Google Analyticsみたいに管理画面のダッシュボードで統計情報をグラフ表示したいとJavaScriptライブラリを探しているときの覚書。 オープンソースのChart.jsで十分。 Chart.js | Chart.js GitHub | chartjs/Chart.js: Simple HTML5 Charts using the <canvas> tag Chart.js v3.7.1 主な特徴 オープンソース。商用利用可能。MITライセンス HTML5 canvasで多くのグラフを表示させても高速描画ができる。 下記マイクロソフトのサイトでcanvasとSVGの比較グラフが分かりやすい。 参考:  SVG vs canvas: how to choose (Windows) | Microsoft Docs 参考:  canvas の最適化 - Web API | MDN CDNあり 開発が活発。ドキュメントがしっかりしてる。 プラグインの機能があるので拡張しやすそう。 参考: GitHub | chartjs/awesome: A curated list of awesome Chart.js resources and libraries より多彩なデータの見せ方をしたい場合はD3.jsが良さそう D3.js - Data-Driven Documents 【関連記事】 GoogleのAPIを使って日本地図を表示するためには

プログラミング言語Rustのまとめと将来性

最近よく聞くRustというプログラミング言語を調査している時の覚書。 参考サイト Rust (プログラミング言語) - Wikipedia Rust Programming Language コラム - AI活用時代にPythonで見る夢 | 第19回 Rustに入門した話|CTC教育サービス 研修/トレーニング Rustまとめ 2010年に発表。2015年にRust 1.0リリース。2022年1月時点でv1.58.1 下位レイヤー開発にC/C++の代替を目指した言語 Mozillaが主導しオープンソースで開発されている ガベージコレクションなし でメモリ安全性を達成 しかも C言語と同程度の速度 LinuxカーネルやAndroid Platformでも積極的に使われるようになっている。 参考:  Google Online Security Blog: Rust/C++ interop in the Android Platform 将来性 メモリ安全で最速という衝撃のため、C/C++はだんだんとRustに置き換わっていく可能性大。 速度と安定性が必要なミドルウェアもRustが有力候補になりそう ただ難易度が高いらしい。 参考:  Rust なのか Go なのか | 民主主義に乾杯 Rust + WebAssemblyで高速なWebアプリを作れるかもしれない。 参考:  WebAssembly - Wikipedia 参考:  Use Cases - WebAssembly Rustを使ったウェブフレームワークはいくつかある。 参考:  flosse/rust-web-framework-comparison: A comparison of some web frameworks and libs written in Rust 機械学習の分野でもRustが使われるようになっているらしい。

CentOS9の仮想マシンをインストールして初期設定

VMware FusionにCentOS Stream 9の仮想マシンを作成したときの覚書。 この仮想マシンは主にウェブサービスの開発用。 CentOS公式ページ からCentOS Stream 9のISOファイルをダウンロードしておく。 環境: Mac mini(2018), VMware Fusion 11.5.7 VMware Fusionで仮想マシン作成 Other Linux 5.x or later kernel 64-bit Legacy BIOS 仮想マシンの設定 Sharing: OFF CPU: 4 cores Memory: 4096GB Network Adapter: Bridged Networking - Autodetect Hard Disk: 40GB - SCSI CD/DVD: (ダウンロードしたISOファイル) Sound Card: OFF USB & Bluetooth: OFF Printer: OFF 仮想マシン起動 OSインストール時の設定 Language: English(United States) Software Selection: Server Time & Date: Asia/Tokyo Root Password: Allow root SSH login with password 最初Software Selectionを「Minimal Install」にしたら再起動後にウィザード形式になってrootでログインできなかったので「Server」にした。 再起動後にrootでログイン。 IPアドレス確認 # ip a Teratermを使ってSSH経由でログインする。 アップデート確認 # dnf update ホスト名変更 # hostnamectl set-hostname vm-dev6.webrec.co.jp # hostnamectl status どんなデーモンが起動しているか確認 # systemctl list-unit-files -t service 気になっていたOpenSSLのバージョン確認 # openssl version OpenSSL 3.0.1 14 Dec 2021 (Library: OpenSSL 3.0.1 14 Dec 2021)