/// BANGBOO BLOG ///

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

October 31, 2023

GCP Network Connectivity
●共有 VPC
 同組織のプロジェクトのホストプロジェクト(親)のVPCをサービスプロジェクト(子)に共有
●VPC ネットワーク ピアリング
 異なる組織間の接続(双方のVPCでコネクションを作成する、内部IPで通信する、サブネットは重複しないこと、2ホップ制限で1:1=3つ以上の場合は古メッシュでコネクション作成要)、k8sサービスとPod ipをVPCピアリング経由する利用法もある

●ハイブリッド サブネット
 Cloud VPN/Interconnect等が必要、オンプレルータとCloud RouterをBGPでつなぐ、オンプレとGCPをつなぐ
●Cloud Interconnect
 DCと専用線で閉域網接続、Cloud VPNより低レイテンシ/帯域安定
●Cloud VPN
 オンプレとIPsec VPN接続、アドレス帯の重複だめ、Cloud VPN側でBGPIP設定やIKEキー生成をしオンプレルータ側でそれらを設定する

●内部範囲
 VPCで使うIPをCIDRで定義しIP範囲の使用方法を事前に決定しておく、IPが勝手に使われたりしない等ができる

●限定公開の Google アクセス(Private Google Access)
 外部IPを持たないGCE等はデフォルトのインターネットゲートウェイ0.0.0.0を経由してGoogle APIにアクセスする、VPC>Routesで見れる
●オンプレミス ホスト用の限定公開の Google アクセス
 CloudVPNやInterconnectを経由してオンプレから内部IPを利用してGoogleAPIにアクセス、GCP側ではCloudDNSで特定のドメインのAレコードを入れる、選択したドメインのIPアドレス範囲を静的カスタムルートでVPC内のプライベートIPからルーティングできるように設定する、オンプレにはCloudRouterからドメインのIPアドレス範囲をBGPでルーティング広報する、VPNやInterconnectがないと0.0.0.0でGoogleAPIにアクセスするがこれだとRFC1918に準拠しない199.33.153.4/30などのIPを使う必要がありルーティングが複雑化したり、オンプレを通る場合があり通信は慎重に設計をすること
●Private Service Connect
 「限定公開の Google アクセス」の発展版、オンプレをNATでVPCに接続、内部IPでGoogleAPIにアクセスできる、PSCエンドポイントを介して内部IPで公開できる、NATされ内部IPの公開先での重複OK

●プライベート サービス アクセス
 VPCペアリングを併用してサービスプロデューサをVPCに接続し内部IPで次のようなサービスに内部IPでアクセスできるようにする(Cloud VPNまたはInterconnectを付け足せばオンプレからも可)、Cloud SQL/AlloyDB for posgre/Memorystore for Redis/Memcached/Cloud build/Apigee等の限られたもの
●サーバーレス VPC アクセス
 サーバレスからVPC内リソースにアクセスするためのコネクタ(通常は外部IP通信になるがコレだと内部IPでVPCにルーティングされる、/28のサブネットを指定)、例えば既存のcloud runサービスを編集しても付けられず初期構築時のみ設定できる

●外部 IP アドレスを持つ VM から API にアクセスする
IPv6をVMに設定し限定公開DNSゾーン設定をすればトラフィックはGCP内にとどまりインターネットを通りません

●CDN Interconnect
 Cloud CDNもあるが他社のCDNに接続する、Akamai/Cloud flare/fastly等々

●Network Connectivity Center 
 ハブとなりCloudVPN/InterconnectをメッシュしGCP/オンプレ含め通信させる、Googleのバックボーンでユーザ企業の拠点間を接続できる
●ダイレクト ピアリング
 GoogleのエッジNWに直接ピアリング接続を確立し高スループット化、Google workspaceやGoogleAPI用だが普通は使わずInterconnectを使う
●キャリア ピアリング
 ダイレクトピアリングの高度な運用が自社対応できない等でサービスプロバイダ経由でGoogle workspaceなどのGoogleアプリに品質よくアクセスする

Google CloudのVPCを徹底解説!(応用編) - G-gen Tech Blog

●トンネル系の下記は色々権限が要りそうで候補
Compute OS login/IAP-secured tunnel user/Service account user/viewer/compute.instance*

■ポートフォワードは止めないと別につないで繋いでいるつもりでも同じところに繋ぎ続ける
lsof -i 3128
ps ax | grep 3128
ps ax | ssh
kill [PID]

■IAPトンネル
export http_proxy=http://localhost:3128
export https_proxy=http://localhost:3128
gcloud compute start-iap-tunnel --zone asia-northeast1-a gce-proxy001 3128 --local-host-port=localhost:3128 --project=gcp-proxy-prj
でコマンドを打てばIAP踏み台トンネルを通って外部に通信できる

■踏み台コマンド
gcloud compute ssh --projet gcp-prj-unco --zone asia-northeast1-a gce-step-svr
でSSHログインしそこからcurl等で操作する

■シークレットからPWを取りつつコマンドを打つ
gcloud compute ssh --project gcp-prj --zone asia-northeast1-b stp-srv --tunnel-through-iap fNL 3306:mysql.com: 3306
mysql -u baka_usr -p"$(gcloud secrets versions access latest --secret mysql_pw --project=gcp-prj)" -h 127.0.0.1-P 3306
 mysqlコマンドのpオプションは空白なしでPWを入れる、baka_usrはMySQLのユーザ、mysql_pwはsecret mgrに保存した名前
 $()のLinuxコマンドでgcloudコマンドを入れ子。ワンライナーの形で利用ができる
secret mgrのコマンド 
ワンライナー解説(変数と$()とバッククォート

■SSHトンネル
sshの基本はこれ、セキュアシェル、トンネルは特殊?
SSH [オプション] [ログイン名@]接続先 [接続先で実行するcmd]
接続先に権限があること

SSHの疎通確認
ssh baka@stp_srv.unco.com

設定例
.ssh/config
User baka
Hostname step_srv
ProxyCommand ssh -W %h:%p baka@step_srv.unco.com
PubkeyAuthentication no
PasswordAuthentication yes

※sshはPWは危険なので鍵認証のみにしたい
 IPアドレス元を制限や同一IPのログイン試行は拒否する仕組み等は欲しい

SSHコネクション上でトンネル作る
ssh step_srv -L 8080:dest.benki.com:80
 とか ssh -L 8080:dest.benki.com:80 ahouser@step_srv.unco.com
※ポート22でstep_srvにSSHコネクションを貼り、ローカル:8080のリクエストはdest:80に転送する
ブラウザか新規ターミナルでcurl
http://localhost:8080
ダメなら転送設定したターミナルはstep_srvにいるのでcurl

GCP、AWS、Azure 別に見るクラウド VM への攻撃経路まとめ (paloaltonetworks.jp)

=============
なぜレッドオーシャン化する前にサービスを グロースできなかったのか? - フリマアプリ編 - (フリル)
サービスを急拡大させる意思決定が遅く競合に遅れ
競合出現後も経営方針を大きく変えなかった
勝利条件はユーザ数で機能差ではなかった
パワープレーでいかにプロモーションばら撒いて認知広げて第一想起をとるかだった
先行者優位で過ごせる期間は短い
スタープレイヤーの採用、手数料無料化、TVCM等PLを超えた手法があった、BS経営すべきだった
成長のキャップが創業者の能力になっていた
有能な人材:耳の痛いことを言ってくれる人材を経営チームに採用しても良かった
CTOが開発をし、組織運営の雑務をし、採用もやっていた
CEOは机の組み立てをするな。CTOはPCの購入をするな
役割の変化に素早く適用し権限移譲を行い、やるべきことをやれる状況を作る
あるいは必要な組織を大きくすることに注力する、例えば開発組織を大きくする
戦時のCEO、皆に戦時であることを伝える、企業文化に背く意思決定も行う
研究や教育等、やった方が良さそうな耳障りの良いタスクも拒否する
どうやったら市場で勝てるかの戦略

IPOとか目指さなければConfort zoneを見つけてじっくりまったりビジネスを継続させる手もある
メルカリやPay2をみた結果論、このやり方も古いというかアレ

Posted by funa : 10:57 PM | Web | Comment (0) | Trackback (0)


June 21, 2023

Machine learning(Bigquery ML)
機械学習:
 マシーンラーニング、ML。マッシーンがLearnしデータの背景にあるルールやパターンを発見する。
モデル:
 機械学習における入力データに対して結果(出力)を導き出す仕組み。モデルは入力されたデータを解析し、評価/判定を行った結果を出力として返す。つまり、機械学習は「入カ>モデル>出力」から成る。

学習データ
 モデルをつくるために学習させるデータ
適用データ
 モデルに対して予測を適用させるデータ
教師あり
 学習データに対して正解ラベルを付けて学習する方法
  例)過去にDMを送付した結果(目的変数)を用いて学習させる
教師ありは、回帰と分類の2つに分けられます。
 回帰(予测)
  連続する数値を予測するもので、売上、重量、温度などを算出する
 分類(識別)
  データがどのクラスに属するかを予測するもので、販売商品が売れる見込み/売れない見込みなどに分類
  DMにおいては分類モデル(買う・買わないの識別)を使用

目的変数
 結果側の変数
 例)ある特定のカテゴリやブランドをその顧客が注文する
  ●確率(購入する・しない)
   ー学習データにターゲットフラグ (購入あり=1、購入無し=0)を立てる
   ー適用後に出てくる結果は0~1 (0%~100%) の範囲
  ●金額
説明変数(特微量とも呼ぶ) 
 原因側のデータ
 目的変数を予測するために使用する顧客の様々な情報、大きく分けて2種類
  ●顧客属性
   ー法人/個人事業主など事業形態、登録住所の郵便番号、業種コードなど
  ●購買履歴
   ー購買 いつ、何を、どのくらい購入したか等の情報
   ー各商品カテゴリ毎の購入金額 etc.
質的変数
 数値で推し測ることができ、数字の大小に意味をもつデータ
  (例)売上、購入回数、従業員数、DM送付回数
單的変数
 単に分類や種類を区別するためだけのデータ
  (例)都道府県、茎種コード、購入有無

統計手法
 重回帰分析:
  説明変数xが目的変数yの値を変化させます。そのため、説明変数から、目的変数の値を予測可能です。
 ロジスティック回帰
  yが1になる確率を判別します。いくつかの要因(説明変数)から「2値の結果(目的変数)」が起こる確率を説明・予測
   2値の結果とは合格/不合格、採用/不採用など、答えが2つしかない場合を指し

線形回帰(エクセル)
 slope関数:回帰直線の傾きを取得
 inercept関数:回帰直線の切片を取得
 forecast関数:単回帰分析からの推測値を取得
+++++++++++++

BigQueryを利用して機械学習を簡易に学びたいです。Webアプリのログよりサーバーエラーを予測するようなもので方法を教えてください > BigQueryを利用して機械学習を学び、Webアプリのログからサーバーエラーを予測する方法について簡単に解説します。以下はその手順の概要です。

●ステップ1: データの準備
まず、WebアプリのログデータをBigQueryにインポートします。ログデータには、タイムスタンプ、リクエストの詳細、ステータスコード、エラー メッセージなどの情報が含まれているはずです。

例:ログデータスキーマ server_log
timestamp: TIMESTAMP
request_id: STRING
status_code: INTEGER
error_message: STRING
user_agent: STRING
response_time: FLOAT

●ステップ2:データの前処理
エラーログの解析を容易にするために、データをクリーンアップし、特徴量を作成します。

CREATE OR REPLACE TABLE ds.cleaned_log AS
SELECT
timestamp,
status_code,
error_message,
user_agent,
response_time,
IF(status_code >= 500, 1, 0) AS is_error
FROM
ds.server_log
WHERE
timestamp BETWEEN 2023-01-01 AND 2023-12-31;

このクエリでは、ステータスコードが500以上のものをエラーと見なし、is_error列を追加しています。

●ステップ3:特徴量エンジニアリング
機械学習モデルに投入するための特徴量を作成します。例えば、以下のような特徴量を考えます。
-時間帯 (hour)
-ユーザーエージェント (user_agent) 
-過去のエラーレート(past_error_rate)
※past_error_rateを省くとどうなのか?

CREATE OR REPLACE TABLE ds.features AS
SELECT
EXTRACT(HOUR FROM timestamp) AS hour,
user_agent,
response_time,
is_error,
--AVG(is_error) OVER (PARTITION BY user_agent ORDER BY timestamp RANGE BETWEEN INTERVAL 1 DAY PRECEDING AND CURRENT ROW) AS past_error_rate
AVG(is_error) OVER (PARTITION BY user_agent) AS past_error_rate
FROM
ds.cleaned_log;

●ステップ4: 機械学習モデルの作成
BigQuery MLを使用してモデルを作成します。ここではロジスティック回帰モデルを使用してエラーの予測を行います。
他には、The CREATE MODEL statement  |  BigQuery  |  Google Cloud
MODEL_TYPE = { 'LINEAR_REG' |'LOGISTIC_REG' |'KMEANS' |'MATRIX_FACTORIZATION' |'PCA' |'AUTOENCODER' |'AUTOML_CLASSIFIER' |'AUTOML_REGRESSOR' |'BOOSTED_TREE_CLASSIFIER' |'BOOSTED_TREE_REGRESSOR' |'RANDOM_FOREST_CLASSIFIER' |'RANDOM_FOREST_REGRESSOR' |'DNN_CLASSIFIER' |'DNN_REGRESSOR' |'DNN_LINEAR_COMBINED_CLASSIFIER' | 'DNN_LINEAR_COMBINED_REGRESSOR' |'ARIMA_PLUS' |'ARIMA_PLUS_XREG' |'TENSORFLOW' |'TENSORFLOW_LITE' |'ONNX' |'XGBOOST'}

CREATE OR REPLACE MODEL ds.error_prediction_model
OPTIONS(model_type='logistic_reg', input_label_cols=['is error'] AS
SELECT
hour, 
user_agent, 
response_time, 
past_error_rate,
is_error
FROM
ds.features;

●ステップ5: モデルの評価
モデルを評価し、精度を確認します。

SELECT
*
FROM
 ML.EVALUATE(MODEL, `ds.error.prediction_model`,(
SELECT hour,
user_agent,
response_time,
past_error_rate,
is_error
FROM
ds.features
));

●ステップ6: エラーの予測
新しいデータを使ってエラーを予測します。

SELECT
*
predicted_is_error,
predicted_is_error_probs
FROM
ML.PREDICT(MODEL `ds.error_prediction_model`,(
SELECT
EXTRACT(HOUR FROM timestamp) AS hour,
user_agent,
response_time,
--AVG(CASE WHEN status_code 500 THEN 1 ELSE 0 END) OVER (PARTITION BY user_agent ORDER BY timestamp RANGE BETWEEN INTERVAL 1 DAY PRECEDING AND CURRENT ROW) AS past_error_rate
AVG(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END) OVER (PARTITION BY user_agent) AS past_error_rate
FROM
ds.new_server_log
));


●ダミーデータ
INSERT INTO ds.server_log (timestamp, request_id, status_code, error_message, user_agent, response_time)
VALUES
('2024-06-28 18:00:00 UTC', 'req 801, 208, '', 'Mozilla/5.0 (Windows NT 18.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 0.123), 
(2024-06-20 10:01:00 UTC', 'req 002, 588, Internal Server Error', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 8.456),
(2024-06-28 10:02:00 UTC', 'req 003', 484, 'Not Found', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14,6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1, 8.234),
(2024-06-20 10:03:00 UTC', 'req 004', 200, '', 'Mozilla/5.0 (Windows NT 18.8; Win64; x64; rv:89.0) Gecko/20100181 Firefox/89.8, 0.345),
(2024-06-28 10:04:00 UTC, 'req 005', 502, Bad Gateway', 'Mozilla/5.0 (Linux; Android 11; SM-G9918) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Mobile Safari/537.36, 0.678),
(2024-86-28 10:05:00 UTC, 'req 006', 503, 'Service Unavailable', 'Mozilla/5.0 (iPad; CPU OS 14.6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/6084.1, 0.789), (2824-86-28 18:06:00 UTC, req 007, 200, Chrome/91.0.4472.124 Safari/537.36, 0.567), Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
(2024-06-2010:07:00 UTC, 'req 008, 500, Internal Server Error', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Safari/537.361, 0.890),
(2024-06-20 18:08:00 UTC, req 009, 404, Not Found', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14 6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.11', 8.345),
('2024-06-28 18:09:00 UTC', 'req 010', 200, '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0 Gecko/20100101 Firefox/89.0', 0.456);


INSERT INTO ds.new_server_log (timestamp, request_id, status_code, error_message, user_agent, response_time)
VALUES
(2024-06-21 09:00:00 UTC', 'req 101', 200, '', 'Mozilla/5.0 (Windows NT 18.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 0.112), 
(2024-06-21 09:01:08 UTC, req 102', 500, Internal Server Error', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Safari/537.36, 0.478),
(2024-06-21 09:02:00 UTC', 'req 183, 484, 'Not Found', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safar1/684.1, 0.239),
(2024-06-21 09:03:00 UTC', 'req 104, 200, Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0, 8.301),
(2024-06-21 09:04:08 UTC, req 185', 502, 'Bad Gateway', 'Mozilla/5.0 (Linux; Android 11; SM-G9918) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Mobile Safari/537.36', 8.683),
(2024-06-21 09:05:00 UTC, req 106', 503, Service Unavailable', 'Mozilla/5.0 (iPad; CPU OS 14,6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1, 0.756),
(2024-06-21 09:06:00 UTC, req 107, 208, ", Mozilla/5.0 (Windows NT 18.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Safari/537.36, 0.523),
(2024-06-21 09:07:00 UTC, req 188, 500, Internal Server Error, Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.8.4472.124 Safari/537.36, 0.812),
('2024-06-21 09:08:08 UTC', 'req 109,, 404, 'Not Found', 'Mozilla/5.0 (iPhone: CPU iPhone OS 14,6 1ike Mac OS X) AppleWebKit/685.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1', 0.267),
('2024-06-21 09:09:08 UTC', 'req 110', 200, '', 'Mozilla/5.0 (Windows NT 18.8; Win64: x64; rv:89.0) Gecko/20180101 Firefox/89.8', 8.412);

Posted by funa : 08:00 PM | Web | Comment (0) | Trackback (0)


June 1, 2023

GCP Python Google doc編集
Google Docのコピーや編集
https://developers.google.com/docs/api/how-tos/documents?hl=ja
https://rimever.hatenablog.com/entry/2019/10/16/060000
クイックスタート
https://developers.google.com/docs/api/quickstart/python?hl=ja
スコープ情報 https://developers.google.com/identity/protocols/oauth2/scopes?hl=ja#docs
ディスカバリ ドキュメント
例えばこれはDriveAPIの分だが、RESTAPIで何ができるか全記載しているっぽい
https://www.googleapis.com/discovery/v1/apis/drive/v3/rest
Drive API
https://developers.google.com/drive/api/guides/about-sdk?hl=ja
https://developers.google.com/drive/api/reference/rest/v3?hl=ja
Docs API
https://developers.google.com/docs/api/concepts/document?hl=ja
https://developers.google.com/docs/api/reference/rest?hl=ja
https://googleapis.github.io/google-api-python-client/docs/epy/index.html
https://googleapis.github.io/google-api-python-client/docs/dyn/docs_v1.html
https://developers.google.com/docs/api/reference/rest/v1/documents/get?hl=ja

文字置換 https://developers.google.com/docs/api/how-tos/merge?hl=ja

※DocAPIからdriveld folderidは取得できなさそう、getは使えそう
※DriveAPIが使えない?
コピーでなくDocAPIでget body からの新規createで行く?
共有ドライブ時は、supports All Drives=True が必要だったでOK
file_metadata = service.files().get(fileld=DOCUMENT_ID, fields=id, name, mimeType, driveld', supports AllDrives=True) execute()

サービスアカウントでGWSにアクセスするにはGWS OU設定等が必要な場合がある>Google一般共有Docで検証も可

あるGoogle Docをコピーし、
本文を編集した上で
 本文の編集は((sample))となっている文字列をAAAに置換する
特定のドライブのフォルダに移動

from google.oauth2.service_account import Credentials
from googleapiclient.discovery
import build import re
#1. サービスアカウントの認証情報を設定
SCOPES = ['https://www.googleapis.com/auth/documents',
'https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = 'path/to/your/service-account-file.json' #サービスアカウント のJSONファイルのパス

creds = Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)

#2. Google Docs と Driveのサービスをビルド
docs_service = build('docs', 'v1', credentials=creds)
drive_service = build('drive', 'v3', credentials=creds)

#3. コピー元のGoogle DocのIDと、移動先のフォルダIDを設定
SOURCE_DOCUMENT_ID = 'source_doc_id' #コピー元のドキュメントID
TARGET_FOLDER_ID = 'target_folder_id' #移動先のフォルダID

#4. Google Docをコピー
copied_doc = drive_service.files().copy(fileld=SOURCE_DOCUMENT_ID, body={"name": "Copied Document"), supportsAllDrives=True).execute()
copied_doc_id = copied_doc['id']

#5、本文を取得し、{{sample}} をAAAに置換
def replace_text(document_id, old_text, new_text)
#ドキュメントの内容を取得
document = docs_service.documents().get(documentid=document_id).execute()
content = document.get('body').get('content')
#リクエストリスト
requests = []
#検索と置換を行う
for element in content:
if 'paragraph' in element:
for paragraph_element in element['paragraph']['elements']:
if 'textRun' in paragraph_element:
text = paragraph_element['textRun']['content']
if old_text in text:
start_index = paragraph_element('startindex']
end_index = paragraph_element['endIndex']
requests append({
'replaceAllText': {
'containsText': {
'text': re.escape(old_text), #エスケープなしにする必要有
'matchCase': True
},
'replaceText': new_text
}
})
#置換リクエストを実行
if requests:
docs_service.documents().batchUpdate(documentid=document_id, body={'requests':requests}).execute()

#置換処理の実行
replace_text(copied_doc_id, '((sample))', 'AAA')

#6、コピーしたドキュメントを指定のフォルダに移動
drive_service.files().update(fileld=copied_doc_id, addParents=TARGET_FOLDER_ID, removeParents=copied doc['parents'][0], supportsAllDrives=True).execute() #親が取れないのでフォルダはハードコード

print(f"Document copied, edited, and moved successfully! Document ID: {copied_doc_id)")


Posted by funa : 12:00 AM | Web | Comment (0) | Trackback (0)


May 29, 2023

GCP hands-off 2
■プロジェクト削除時のサービスアカウント
プロジェクトは30日保留される。その間サービスアカウント権限は生きており他プロジェクトでは動作する。
しかし保留期間はプロジェクトを使用できずサービスアカウントを削除できず、個別に一つ一つ権限をはく奪するしかない。
サービスアカウントはプロジェクト削除前に、必要であれば事前に削除や無効化しておくことも検討する。

■連携
GoogleWorkspace -> GAS -> GCP Oauth + API -> GCP(Bigquery etc.)
Python -> Gcloud sdk -> gcloud auth -> GCP(Bigquery etc.) <-> federation query/Connected sheet
Python(Oauth key) -> GCP認証情報(Oauth Key) + API -> GoogleWorkspace
 GCPのクレデンシャルページでOauth2.0 client IDと鍵が発行でき、鍵でイケる
  Pythonコードで鍵を指定すると実行時にログインを求められ、client IDとユーザIDを紐づけして実行することになる
  Authentication — gspread 5.7.2 documentation
  Python でシンプルに OAuth 2 する (urllib + oauthlib) - Qiita
 GCPのクレデンシャルページでAPIキーも発行でき、これは可能性はある
Python -> local csv/tsvが基本
●Python(SA key) -> GCP認証情報(SA Key) + API -> GoogleWorkspace
 サービスアカウントでGWSにアクセスできないのでダメ
  信頼しているドメインとのみ外部共有を許可する - Google Workspace 管理者 ヘルプ
  サービス アカウント(ドメイン名の末尾が「gserviceaccount.com」)を信頼しているドメインにすることはできません
   OUで許可するとイケるはずだが、、
●Python でGoogle docをイジる
下記のURLの内容を検証すればよい
Google Cloudコンソールで
Oauth同意画面を設定
Google Docs APIを有効化
OAuth クライアントIDを作成
シークレットJson ファイルができるのでDL(リネーム)
コードにクレデンシャルJSONファイルとDocのURLに含まれるdocumentIDを記述
→Python実行するとDocのデータが取れる(ローカルの場合は楽)

/// runのデプロイ時に設定を入れる方法について
1)環境変数を(コンソール/cmd/コンテナymiのどれかで)設定:
env=os environ.get("ENV") で使う。ログに出やすく非推奨
2)シークレットマネージャ保存分を設定
環境変数+コードでやるのと同じ?
3)ボリュームを使う:
クレデンを入れ、トークンの一時保存ができる?
Cloud RunでSecret Managerを使いたい #Python - Qiita
※サービスアカウントでGWSを扱うにはGWSのOUで受け入れる設定が必要な場合がある

■secret managerに保存してコードで呼び出して使う 
Secret Managerのシークレットアクセサー権限 
 (checksumをかけている)

from google.cloud import secretmanager
import google.cloud.logging
import logging
def get_url(secret_key, project_num)
logging.warning('####### secret_key' + str(secret_key) + '######')
client = secretmanager.SecretManagerServiceClient()
resource_name = "projects/()/secrets/()/versions/latest.format(project_num, secret_key)
res = client.access_secret_version(resource_name)
slack_url = res.payload.data.decode("utf-8")
return slack_url

■API等でデータを取った時中身が分からない場合
pramsが何かわからん時
print(params)
print(type(params))
#<class 'proto.marshal.collections.maps.MapComposite'>
#よくわからんクラスでもdirで保持するAttributeが分かる
attributes = dir(params)
print(attributes)
#そこに含まれるメソッドも確認できるのでhelpする
help(params.get)
 #prams.get('query')すると含まれるSQLが分かりこれで進める等

■Protocol buffers
APIの返りはGoogleは自社で開発したProtocol buffersを使っていようだ
たとえば下記が返る
name: "projects/98765"
parent: "folders/12345"
project_id: "aaaaaa-bbbb-market"
state: "ACTIVE"
display_name: "aaaaaa-bbbb-market"
create_time{
seconds: 1601250933
nanos: 820000000
}
update_time{
seconds: 1632826231
nanos: 634000000
}
etag: "W/a06910d9093db111"
labels{
key: "budget_group"
value: "cccc"
}

これは
print (type(response))すると下記であり
<class "google.cloud. resourcemanager v3.types.projects.Project"> 
print (response.project_id) で簡単にデコードし値取得できることが分かる

APIからの値を取るときのコード
from google.cloud import resourcemanager_v3
client = resourcemanager_v3.ProjectsClient()
request resourcemanager v3.ListProjectsRequest{
#組織の場合、現状は権限がGOP側で用意がなく無理だった
#parent organizations/12345678.
parent="folders/1122233344"
}
page_result = client.list_projects(request=request)
for response in page result:
print(type(response))
print (response.project_id)

エンコードする場合 https://blog.imind.jp/entry/2019/12/28/124728
pip install googleapis-common-protos でインスコ?
sudo apt install protobuf-compiler でインスコ
sudo apt-get install protobuf-compiler でインスコ
 ※google提供のフォルダごと使用しようとして失敗した方法 
 ※にprotoファイルがあるが丸々必要なので下記でDL
 ※git clone https://github.com/googleapis/googleapis.git
 ※バスを合わせてprojects.protoを使うが失敗
 ※たとえば protoc python_out=. --proto_path=googleapis ./googleapis/google/cloud/resourcemanager/v3/projects.proto
projects.proto を下記の内容で一から作成することが必要だった
syntax proto3;

message Resource{
string name = 1;
string parent = 2; 
string project_id = 3;
string state = 4;
string display_name = 5; 
map<string, string> create_time = 6;
map<string, string> update_time = 7;
string etag = 8;
map<string, string> labels = 9;
}
そして下記を実行しコンパイル
protoc --python_out=. ./projects.proto
projects_pb2.pyが生成されるため、パッケージとして読みこみprotocol buffersを実行できるようになる
import projects_pb2.py
※なおエラーで pip install U protobuf=3.20.0でダウングレードした

注意点としては、pythonとprotocol bufferとBigqueryの型合わせが必要
 DateやTimestampはUNIXエポックからの日数や秒数に変換する必要がある
 Noneをstr 'None'や、int -1や、bool FalseにPythonで調整をする
//UNIXエポックからの日数
current_date = datetime.now()
epoch = datetime(1970, 1, 1)
record_date = (current_date - epoch).days

//UNIXエポックからの秒数
data_string = str(date_v)
dt_obj = datetime.fromisoformat(date_string.replace("Z","+00:00"))
epoch = datetime(1970, 1, 1, tzinfo=timezone.utc)
seconds_since_epoch = (dt_obj - epoch).tatal_seconds()
microseconds_since_epoch = int(seconds_since_epoch * 1e6)
date_v = microseconds_since_epoch

■BQ APIクォータ割り当て超過(1000件insertしようとした)
テーブル変更1日1500件まで
テーブルメタデータ変更は10sあたり5回まで
テーブル当たりDMLの実行待ちキューは20件まで
テーブル当たり10sあたり25のDMLまで
→各insertでスリープを5秒入れた
 import time
 time.sleep(5)

上限がテーブル単位のためテーブル名を分けると回避できるらしい
■BQ streaming insert->BQ storage read/write APIの上限はDMLと別で、閾値が大きい
streaming insert -> Bigquery storage write API を使う
BigQuery Storage Write API を使用してデータを一括読み込み、ストリーミングする  |  Google Cloud
Storage Write API を使用したデータ読み込みのバッチ処理  |  BigQuery  |  Google Cloud

CreateWriteStream > AppendRows(ループ) > FinalizeWriteStream > BatchCommitWriteStreams
 をstart/append/send/close(write commit)の関数化し返り値でつなげた形にしたが
 sendをした後 proto_rows = types.ProtoRows() を掛け初期化する必要があった(offsetが倍々で増えたから)
offsetで送信毎の開始行の設定も必要(一連の処理で件数を記憶しており0固定で処理を書けないようだった)

■Python/Client libraryの値をBQに入れるにあたり
仕様書で型を調べる。STRUCTやクラスは紐解いて通常のカラムでBQに挿入
timestampやboolやint64はそのままの形でBQに挿入
BQ SQL:日付は値なしならNULLを入れる、数値やBool値はクォートで囲まない
PythonでSQLインサート文を作るとき改行コードが含まれるものをセットするとSyntax errror:Unclosed string literal
q = q.replace('//', '////') バックスラッシュをエスケープ、あるとイリーガルエスケープシーケンスとなる、raw文字列にしたい?
q = q.replace('/n', '//n') 改行をエスケープ
q = q.replace("'", "\\'") SQLが途切れないようシングルクォートをエスケープ
q = q.replace('/n', '    ') 改行を空白で置き換える

■変更の判断
変更で問題がでないか→PCにマウスと付けて問題が起こらないかという問題と相似、最終的に経験で判断するしか

■監査ログからSetIamのメソッドを取りBQ権限付与を検知するクエリ
WITH source AS(
SELECT
*
FROM `project-logging.organization_audit_log_v2.cloudaudit_googleapis_com_activity_20*`
WHERE_TABLE_SUFFIX = format_date('%y%m%d', current_date("Asia/Tokyo"))
),
project source AS(
SELECT
ROW_NUMBER() OVER (ORDER BY timestamp) as id,
*
FROM source
WHERE
protopayload_auditlog.methodName = 'SetlamPolicy'
project_authorizationinfo AS(
SELECT
DISTINCT
id,
__ori.resource.type as type,
__ori.resource.labels.project_id as project_id,
__ori.resource.labels.dataset_id as dataset_id,
protopayload_auditlog.methodName as method_name
protopayload_auditlog.resourceName as resource_name,
protopayload_auditlog.authenticationInfo.principal Email as email_manipulator,
authorizationInfo.resource as request_resource,
authorizationInfo.permission as request_permission,
authorizationInfo.granted as request_granted,
protopayload_auditlog.requestMetadata.callerlp as callerlp,
protopayload_auditlog.requestMetadata.callerSuppliedUserAgent as callerSuppliedUserAgent,
FROM project_source AS __ori
). UNNEST (protopayload_auditlog.authorizationInfo) AS authorizationInfo
project_bindingdeltas AS(
SELECT
id,
--array_binding Deltas_project as binding Deltas_project,
array_binding Deltas_project.action as action_project,
array_binding Deltas_project.member as member_project,
array_binding Deltas_project.role as role_project,
timestamp
FROM project_source AS_ori
,UNNEST (protopayload_auditlog.servicedata_v1_iam.policyDelta.bindingDeltas) AS array_binding Deltas_project
),
project_setiam AS(
SELECT
--*, except(id)
type,
project_id,
dataset_id,
method_name,
resource_name,
email_manipulator,
request_resource,
request_permission,
request_granted,
callerip,
callerSuppliedUserAgent.
action_project,
member_project,
role project.
CAST(NULL AS STRING) AS metadataJson,
CAST(NULL AS STRING) AS bindingDeltas_dataset,
CASTINULLAS STRING AS action_dataset,
CAST(NULL AS STRING) AS member_dataset,
CAST(NULL AS STRING) AS role_dataset,
CAST(NULL AS STRING) AS bindingDeltas_table,
CAST(NULL AS STRING) AS action_table,
CAST(NULL AS STRING) AS member_table,
CAST(NULL AS STRING) AS role_table,
timestamp
FROM project_authorizationinfo
LEFT JOIN project_bindingdeltas ON project_authorizationinfo.id = project_bindingdeltas.id
WHERE role_project LIKE 'roles/bigquery%
),
resource_source AS (
SELECT
__ori.resource.type as type,
__ori.resource.labels.project_id as project id,
__ori.resource.labels.dataset_id as dataset_id,
protopayload_auditlog.methodName as method_name,
protopayload_auditlog.resourceName as resource_name,
protopayload_auditlog.authenticationInfo.principalEmail as email_manipulator,
authorizationInfo.resource as request_resource,
authorizationInfo.permission as request_permission,
authorizationInfo.granted as request_granted,
protopayload_auditlog.requestMetadata.callerlp as callerlp,
protopayload_auditlog.requestMetadata.callerSuppliedUserAgent as callerSuppliedUserAgent,
protopayload_auditiog.metadataJson,
timestamp
FROM source AS __ori
,UNNEST(protopayload_auditlog.authorizationInfo) AS authorizationInfo 
WHERE
protopayload_auditlog.methodName = 'google.iam.v1.IAMPolicy.SetlamPolicy' 
--AND timestamp= "2024-03-11 04:11:30.885258 UTC"
),
resource_id AS (
SELECT
ROW_NUMBER() OVER (ORDER BY timestamp) as id,
*
FROM resource_source
),
resource_bq_dataset AS (
SELECT
id as id_dataset,
json_extract(metadataJson, '$.datasetChange bindingDeltas') as bindingDeltas_dataset,
json_extract(array_bindingDeltas_dataset, '$action') as action_dataset,
json_extract(array_bindingDeltas_dataset, $.member') as member_dataset,
json_extract(array_bindingDeltas_dataset, '$.role') as role_dataset,
FROM resource_id
,UNNEST(json query_array(metadataJson, '$.datasetChange.bindingDeltas')) AS array_bindingDeltas_dataset
),
resource_bq_table AS (
SELECT
id as id table,
json_extract(metadataJson, '$.tableChange.bindingDeltas') as bindingDeltas_table,
json extract(array_bindingDeltas_table, '$.action') as action table,
json_extract(array_bindingDeltas_table. '$.member') as member table,
json_extract(array_bindingDeltas_table, '$.role') as role_table,
FROM resource_id
,UNNEST(json query_array(metadataJson, '$.tableChange.bindingDeltas')) AS array_bindingDeltas_table
),
resource_setiam AS ( 
SELECT
--*except(id, id_dataset, id_table)
type,
project_id,
dataset_id,
method_name,
resource_name,
email_manipulator,
request_resource,
request_permission,
request_granted,
callerlp,
callerSuppliedUserAgent,
CAST(NULL AS STRING) AS action_project,
CAST(NULL AS STRING) AS member_project,
CAST(NULL AS STRING) AS role_project,
metadataJson,
bindingDeltas_dataset,
action_dataset,
member_dataset,
role_dataset,
bindingDeltas_table,
action_table,
member_table,
role_table,
timestamp
FROM resource_id
LEFT JOIN resource_bq_dataset ON resource_id.id = resource_bq_dataset.id_dataset
LEFT JOIN resource_bq_table ON resource_id.id = resource_bq_table.id_table
)
SELECT * FROM project_setiam
UNION ALL
SELECT * FROM resource_setiam

■BQからCloudSQLにデータを入れる (GCSを経由する、コマンドやPythonがある
bq query --use_legacy_sql=false 'CREATE OR REPLACE TABLE `prj.ds._table` AS SELECT FROM `prj.ds.view`';
bq extract -destination_format CSV 'prj.ds._table' gs://bucket/tbl.csv
gcloud sql import csv インスタンス名 
gs://bucket/tbl.csv --database=データベース名 --table=テーブル名

■ログの重複をなくす
import google.cloud.logging
import logging

# クライアントの作成
client = google.cloud.logging.Client()

# Cloud Logging ハンドラを追加
client.get_default_handler()
client.setup_logging()

# 既存のハンドラをすべて削除
for handler in logging.root.handlers[:]:
    logging.root.removeHandler(handler)

# 新しいハンドラを追加
logging.basicConfig(level=logging.INFO)
# logging.basicConfig(level=logging.DEBUG)  # DEBUG レベルからすべてのレベルを記録

# propagate を無効にして重複を防ぐ
logger = logging.getLogger()
logger.propagate = False

# 各ログレベルでテスト
logging.debug('This is a DEBUG log')
logging.info('This is an INFO log')
logging.warning('This is a WARNING log')
logging.error('This is an ERROR log')
logging.critical('This is a CRITICAL log')

■何度かAPIコールを繰り返す
def safe_replace_text(document_id, old_text, new_text, max_attempts=3):
    for attempt in range(max_attempts):
        try:
            replace_text(document_id, old_text, new_text)
            break  # 成功した場合はループを抜ける
        except Exception as e:
            print(f"Attempt {attempt + 1} failed: {e}")
            if attempt == max_attempts - 1:
                print("Reached maximum attempts.")

■Exponential Backoffで時間を指数級数的にゆらぎながら増やすリトライ
import time
import random
def exponential_backoff(max_retries=5, base_wait_time=1, max_wait_time=32):
    retries = 0
    while retries < max_retries:
        try:
            # APIリクエストの送信
            response = send_request()
            if response.status_code == 200:
                return response  # 成功時に結果を返す
        except Exception as e:
            wait_time = min(base_wait_time * (2 ** retries), max_wait_time)
            wait_time += random.uniform(0, 1)  # ランダムなズレを追加(Jitter)
            print(f"Retrying in {wait_time} seconds...")
            time.sleep(wait_time)
            retries += 1
    raise Exception("Max retries reached, request failed")

クォータの増加の依頼もできるが、基本的に下記の上限がある

1. Google Docs API の利用上限

  • ユーザーごとの1分あたりのリクエスト数:
    • 1,000 リクエスト/ユーザー/100秒
  • プロジェクトごとの1日あたりのリクエスト数:
    • プロジェクトごとに1日100万リクエスト(デフォルト)

これらの制限を超えると、リクエストが拒否されるか、APIを利用できなくなることがあります。

2. Google Drive API の利用上限

  • ユーザーごとの100秒あたりのリクエスト数:
    • 1,000 リクエスト/ユーザー/100秒
  • プロジェクトごとの1日あたりのリクエスト数:
    • 1日10億リクエスト(デフォルト)
  • ユーザーごとのデータ転送量の制限:
    • 読み込みは750GB/日/ユーザー
    • 書き込みはユーザーごとの制限が異なるため、大量のデータ処理を行う場合は注意が必要

Posted by funa : 07:30 PM | Web | Comment (0) | Trackback (0)


April 23, 2023

false charge
false charge → 事実無根の告発(特に法的な場面で)
calumniation / calumny → 悪意ある嘘を流すこと(一般的な誹謗中傷)
defamation → 名誉毀損(法的な影響があることが多い)
frame-up → 罠にはめるために虚偽の証拠を作る(策略的)

■冤罪
冤罪だと否認をすると勾留がつづき、結局無職になる、否認ではなく弁護士呼び微物検索を要求
駅員に拘束され警察に引き渡しで現行犯が成立、事務所には行かず駅で弁護士を呼ぶ、駅で警察対応
 (現行犯なら逮捕状なしに警察官でなく一般人でも逮捕ができる)
  起訴されると99%有罪だったか?日本の捜査はほぼ自白が証拠だったか?
   >冤罪なら自白はゆすりがあっても絶対駄目

//// 対応策
弁護士を呼ぶ
駅事務所には行かず現場で対応
警察に「何も触っていないのでDNA検査を」求める、きちんと捜査してもらう
 名刺を渡してでも拘束を避ける(連絡が取れる民間人からの逃走でなくなる??)は良くなさそう

//// とりあえず下記を覚える↓↓↓↓↓
「この人痴漢です!」そう叫ばれたときに絶対にしてはいけない"あること" 「常識的な行為」が冤罪につながる | PRESIDENT Online(プレジデントオンライン)
https://togetter.com/li/1360859
可能ならばスマホで最寄りの弁護士会をチェックし、「当番弁護士の対応を依頼します」と伝え

「痴漢冤罪に巻き込まれていること」「どこの駅で警察を呼ばれた」このふたつを必ず家族に伝え

すぐに微物検索を要求、取り調べもネタが上がるまで一切話さない→結果何も証拠が出ずおしまいになる

警察はやった前提でなかば脅しの取り調べをしてきますが、心折れて「やった」と言ってしまえば即アウト、痴漢は本人の自供がかなり大きい証拠になります。認めるまで出さないと言われても、留置は48時間、送検後の勾留も最大20日これを耐えれば不起訴になる可能性が高くなります

取り調べがあまりにも脅迫まがいで耐えられそうになければ、録画を要求しましょう。取り調べの録画は容疑者の権利なので警察は拒否できません。部屋に入る前に録画操作をするので、それもちゃんと確認する

調書には署名しない

逮捕された時に弁護士のあてがなければ、「当番弁護士を呼んでください、それまで何も話しません」の一点張り

本当にやっていなければ否認を貫けば大丈夫ですが、弁護士を立てる場合お金がなくても国選弁護人がつけられます、原則国がお金だしてくれます

携帯を押収して中を調べようとしますがパスコードを教える必要はありません。調べたけりゃ令状取って自分で解析しなはれや。
また、あたかも強制かのようにや話してくるDNA採取は任意

持病がある健康面の理由は考慮される

 身柄拘束中は所持品全て没収されます。それどころか留置施設から取調室にいくちょっとの移動でもいちいちワッパはめますから。外部へは連絡取れないので、弁護士に連絡を依頼するしかありません。警察も連絡はしてくれません

===============
■職質
不審者に対するもので任意で行われる、だが実質は簡単には断れない
  変に逃げると公務執行妨害に捻じ曲げられる可能性もある
もしあまりに不当と思われるなら
「職質の要件は、犯罪を見た/聴いた/した直後に見える等だがどれに該当か?」
「任意であり、中には顧客の個人情報があり応じられない、どれが個人情報かを示すだけでも機密保持違反、断る」
「押し問答もかれこれx時間を経過しており実質的な不当逮捕である」
110番し「○○警察署の○○を名乗る警官らに不当な拘束を○○場所で受けている。助けて欲しい」
https://twitter.com/yokotindeka_DJ/status/1238985677808648192

===============
https://anond.hatelabo.jp/20191028031522
逮捕の記憶
弁護士の電話番号、身元引受人の電話番号を覚えておく→覚え易い、あるいは暗号で出てくるようにする

https://kobe.vbest.jp/
0120-666-694(フリーダイヤル、オーメン、69し)

Posted by funa : 09:24 PM | Column | Comment (0) | Trackback (0)


April 23, 2023

Bay Bay Bay
ebayはSellerからオファーがあり値引きしてくる。破壊力あるな。ただ購入が面倒だった。

ebayでの問題
1)日本には送ってくれない場合がある
2)日本に送ってくれるが住所が日本語だと売主でキャンセルされる
決済での問題
3)クレカ会社で支払いを止められている場合がある
4)Paypalで各種証明書が必要で止められている場合がある(クレカ認証も要るはず
5)google payでの決済ができない(クレカ側で止められているのでは?

対処
1)米国転送住所 shipito.com が使える
 オレゴン倉庫は消費税が掛からないが有料で月10ドル
 calの10%弱の消費税が掛からず送料も安くなるので一時契約する
 ebayに米国住所を登録するには米国電話番号が必要
  skypeで毎月300円で発行ができるので一時契約する(MSのoutlookメールID)
 shipito.comに送付されたら日本に転送依頼をする
2)ebayの送付先住所(米国)は英語にする(日本に送付可ならコレなくてもいい)
 念のため日本の個人情報住所も英語にする(日本に送付可でもココは英語がいいかも)
 念のためebayの言語設定を英語、場所を米国にする(上か下ナビにあるはず)
  その後に購入・決済手続きする方がいい
3)クレカサイトのFAQで支払いできない時等で検索して対処
4)Paypalは各種証明書を登録する。クレカ認証は確か少額課金で検証されるはず
5)知らん

shipitoで送料見積もると安かったが、実際に荷物が届くと梱包が大きくかなり高い
米国内転送でshipitoでまとめて荷物一つで送ろうと思ったが、直接日本に送ってくれる相手なら直接の方が安いかもしれず良く考えよ
解約すること shipito $10 / skype us phone num 300yen

解約していたはずが、SKYPE.COM/GO/BILL利用国LUで300円請求されていた ログインIDを確認しログインし Manage features| Skype My Account で解約した
SkypeとかGoogleとか詐欺ってるよな

=========

流せるトイレブラシの使い方に「天才かよ」 真似したくなるトイレの掃除術 – grape [グレイプ] (grapee.jp)

昭和100年は、2025年/平成37年/令和7年だ。(昭和64年=平成元年/1989、平成31年=令和元年/2019)
西暦の下2桁から018(レイワ)を引くと令和、23-18=5なので令和5年

Posted by funa : 09:12 PM | Column | Comment (0) | Trackback (0)


March 15, 2023

GMT(Greenwich Mean Time)

■セイコーPROSPEX SPEEDTIMER Solar Chronograph SBDL097(ペプシ)
セイコー プロスペックス SPEEDTIMER SBDL097 | セイコーウオッチ (seikowatches.com)
腕時計のベルト調整方法(Cリング式) - YouTube
Cリングが内側下側に入っており無くし易いので気を付ける
6時方向を短くした方がバランスが良い
バックル微調整はバネ棒なので縮めてズラす(バックルから外さない方が面倒がない)
 クロノグラフはストップウィッチで秒針が12時のままが正しい
 スプリットセコンド付
  上ボタンでスタート、下ボタンでラップ、下ボタンで続き
  上ボタンでストップ、下ボタンでリセット
 FとEでソーラー充電上体を表示
 竜頭1段出しで日付、2段目で時刻調整
ソーラ充電電池の寿命は10年とメーカで謳われている、交換は三~四千円で、機械かクォーツの方がいい?

■セイコー5 SPORTS SKX Sports Style GMT SSK001K1
SBSC001の海外モデルでブレスレットの中3連がミラー艶出し
各部の名称と主なはたらき (seikowatches.com)
ベルト調整はCリング無しの割ピン仕様
 午後8時から午前4時は日付の調整を行わないこと(朝昼夕方に合わせる、反時計回りは駄目)
 竜頭1段目にして反時計回りで前日の日付にセットし、
 竜頭2段目にして時計回りで時刻合わせ
  竜頭0段目:ぜんまい巻き上げ(時計回り、回しすぎない方がいいらしい)
  竜頭1段目:日付合わせ(反時計回り)・GMT24時針合わせ(時計回り)
  竜頭2段目:時刻合わせ
 日本時間の24時間針として使う場合
  ベゼルを時差分ずらすと2か国の時刻が分かる
   GMT針は24時間針で日本時間で、ベゼルを9時始まりにしてUTCの設定が良い
    +0900 JST9:00のときUTC0:00、UTCだけどcoordinated universal time
 デュアルタイム針として使う場合
  ベゼルを時差分ずらすと3か国の時刻が分かる(日本時間の長短針/盤面の24時間/ベゼルの24時間)
機械式は面倒、嵌めていないと止まる、時間がズレる、でもソコがカワイイかも
クォーツ+ソーラは100倍便利だが、機械の相棒一本がいいかもな
伝統のUI/ユーザビリティとか、機能美とか様式美に行きつく


■セイコーNH35A サブマリーナ
スピードタイマー、GMTとくれば、次はサブマリーナでしょ。ベゼルが酸素ボンベの量を表す、潜水開始時に分針をベゼルの0を合わせると何分経ったか分かる、ベゼルは逆回転しないので誤って廻っても分数が加算されるだけ
 時間合わせは5Sportsと同じ、ねじ込み式リューズで先に緩める
 ブレスレットのネジは精密ドライバ1.4mmが良かった、小さいとナメるよ
 グライドロック:ブレスレットの微調整は動く方をパキっと持上げて好きな位置迄スライドさせて押し込む
フルスペック!!
 Superior grade 904 stainless steel construction
 Sapphire crystal with clear anti reflective undercoat
 Ceramic bezel insert
 Solid link bracelet with screw pins and solid end links
 Case size is 40mm, lug width 20mm

■セイコー5 SPORTS Skz209 7S36-01E0(Blue atlas Landshark)
トリッキーなガジェットでヤバいな。回転式コンパスチャプターリング(方位計)、200m water resistant、7S36自動巻き、デイデイト表示、回転式ダイバーズベゼル、ねじ込み式リューズ
方位計の使い方
1)時計を水平にして時針を太陽の方向に合せる。この時、時針の指す方向と、12時の中間の方向が南
2)回転ベゼル(方位計)を回しSを南の方角に合せると、おおよその全方位がでる
※緯度や季節によってはズレが生じることがある
日付は「午前0時」ごろ、曜日は「午前4時」ごろ送るようになっている
 午後8時から午前4時は日付の調整を行わないこと(朝昼夕方に合わせる、反時計回りは駄目)
 竜頭1段目にして反時計回りで前日の日付、時計回りで前日の曜日にセットし、
 竜頭2段目にして時計回りで時刻合わせ
  竜頭0段目:ぜんまい巻き上げがない
ベゼルが回らないとき(そもそも反時計回りにしか回らない)
 アルカリ電解水を入れ何度かやって汚れを取る(不要な部分に浸み込まないように)
 シリコンスプレーを吹く(ベゼルに吹くと若干色が戻り艶がでる)
 SEIKO SKX ブラックボーイのベゼル外して掃除&ブレス交換します! - YouTube
  セロテープをコジリの器具の方に
  時計本体にマスキングテープ
  こじる場所がある場合もある

残るはエクスプローラー/デイトかくらいか、知らんけど、圧倒的にレディーがいいなロレックスデイトジャスト、28mmで濃縮されてる感じで、39/36と28でお揃いとかええけどな。バンド種類の名前:Oyster/Presidential/Jubilee



■カシオDATA BANK DBC-611
QW-3228 (casio.jp)説明書
左側上Aボタンでモード切替:データバンク>計算>アラーム>ストップウォッチ>DT=デュアルタイム
右側下Cボタン:操作音ONOFF
右側上Lボタン:ライト点灯
戻る:÷、進む:+
アラーム5つと時報がセットできる、Aボタンでセット、鳴るセットでAL-1~5が表示
時報セットでSIGが表示、Cボタンでアラーム時報ONOFF

■カシオ ワールドタイム AE-1200WH-1AV
QW-3198_3299 (casio.jp)説明書

■MOD
SEIKO 5 .club
DLW MODS - Seiko Watch Modification Parts (dlwwatches.com)
SeikoMods: Seiko Mod Parts & Watch Mod Parts UK
Seiko Mod Parts | Watch-Modz

Posted by funa : 09:27 PM | Gadget | Comment (0) | Trackback (0)


February 11, 2023

HSTS/CORS/CSPOAuth/OpenID/SAML/XSS/CSRF/JSOP/SSO/SSL/SVG/JWT/WebAssembly
2024-10-6
クレカ情報の流出があったタリーズオンラインストアのWebアーカイブから原因を特定した猛者が現れる→集まった有識者たちにより巧妙な手口が明らかに - Togetter [トゥギャッター]
レスポンスヘッダーに Content-Security-Policy が適切に設定されていれば防げた可能性は高い。
具体的には
▼ connect-src ディレクティブの設定
スクリプトからの外部リソースへの通信先を制限して、マルウェアが悪意あるドメインにデータを送信するを防ぐ。
例. Content-Security-Policy: connect-src 'self' https://api.trustedservice.com;
▼ eval() の禁止
Content-Security-Policy はデフォルトで eval() の使用を禁止しているが、 'unsafe-eval' を指定することで許可できる。
slick.jsのライブラリに仕込まれていたので、管理者がやったんじゃないの?
slickスライダー実装まとめ16選【サンプル付き】 - じゅんぺいブログ (junpei-sugiyama.com)

2024-7-5
Webサービス公開前のチェックリスト (zenn.dev)

2023-02-11
フロントエンド開発のためのセキュリティ入門 - Speaker Deck
 HTTPとHTTPSが混ざっているwebサイトはHSTS(http strict transport securityヘッダ)でHTTPS強制できる
 JSのfetch,xhr/iframe/canvas/WebStorage,IndexedDBでクロスオリジンは危険
 Access-Control-Allow-OriginレスポンスヘッダでCORS(cross origin resource sharing)許可を判定できる
 CSP(Content-Security-Policy)レスポンスヘッダあるはmetaタグで許可するJSを判定できる

SVG
SVG Repo - Free SVG Vectors and Icons
Vector Icons and Stickers - PNG, SVG, EPS, PSD and CSS (flaticon.com)
SVGはテキストファイルなので開いてタグとして使える
ChatGPTにSVGでお絵描きさせる|temoki / Tomoki Kobayashi (note.com)
タグで図が書ける
SVGファイルについて (zenn.dev)
sizeを決めてviewBoxの座標を設定するのがやりやすい

JWT (JSON WEB TOKEN?)
JWTセキュリティ入門 - Speaker Deck

WebAssemblyとは?〜実際にC言語をブラウザで動かす〜【2019年6月版】 #JavaScript - Qiita
コンパイルしてバイナリをWebで実行する、速いJSみたいな、ゲームやエミュやCアプリ的な奴

=========================
2022-04-06
SAML
 SSOのログイン状態を保持する認証プロバイダー(IdP)を使い各アプリ(ServiceProvider)でSSOを実現する
 SSOの仕組みにはエージェント方式、リバースプロキシ方式、代理認証方式など
  ユーザはWebサービスにアクセス
  WebサービスからSSO認証プロバイダーサーバにSAML認証要求をPostする
  SSO認証プロバイダーサーバでSAML認証を解析、ユーザに認証を転送
  ユーザはそれでWebサービスにログインする

SAMLはログイン時にユーザー情報をチェック、OAuthはユーザーの情報を登録
OAuthはアプリケーションを連動させるAPIで有効なアクセストークンかを見る
 アクセストークンには「いつ」「どこで」「なんのために」作られたのか分からない
OpenIDはIDトークンを使い「いつ」「どこで」「なんのために」作られたのか分かる

OAuth 2.0、OpenID Connect、SAMLを比較
OAuth 2.0:新しいアプリケーションに登録して、新しい連絡先をFacebookや携帯電話の連絡先から自動的に取得することに同意した場合は、おそらくOAuth 2.0が使われています。この標準は、安全な委任アクセスを提供します。つまり、ユーザーが認証情報を共有しなくても、アプリケーションがユーザーに代わってアクションを起こしたり、サーバーからリソースにアクセスしたりすることができます。これは、アイデンティティプロバイダー(IdP)がユーザーの承認を得て、サードパーティのアプリケーションにトークンを発行できるようにすることで実現されます。

OpenID Connect:Googleを使ってYouTubeなどのアプリケーションにサインインしたり、Facebookを使ってオンラインショッピングのカートにログインしたりする場合に使用されるのが、この認証オプションです。OpenID Connectは、組織がユーザーを認証するために使用するオープンスタンダードです。IdPはこれを利用して、ユーザーがIdPにサインインした後、他のWebサイトやアプリにアクセスする際に、ログインしたりサインイン情報を共有したりする必要がないようにします。

SAML:SAML認証は、多くの場合に仕事環境で使用されます。たとえば、企業のイントラネットやIdPにログインした後、Salesforce、Box、Workdayなどの多数の追加サービスに、認証情報を再入力せずにアクセスできるようになります。SAMLは、IdPとサービスプロバイダーの間で認証・認可データを交換するためのXMLベースの標準で、ユーザーのアイデンティティとアクセス許可を検証し、サービスへのアクセスの許可/拒否を決定します。
OAuth、OpenID Connect、SAMLの違いとは? | Okta

Oath: idpがトークンを発行、Webサイト間でユーザを認識し3rdからでも個人情報を使えるようになる
OpenID(OIDC): idpとJWT(トークン)で認証するOauth系のSSO、Oauthの拡張でログインが3rdからもできるようになる
SAML: idpで各アプリやAD間をXMLメッセージにより認証管理しSSOを実現
 OpenIDとSAMLが同じような機能
 SAMLはユーザ固有の傾向で大企業SSOが多い、OpenIDはアプリ固有の傾向でWebサイトやモバイルアプリが多い
 SAMLよりOIDCの方が新しくSPAやスマホと親和性が高い
 SaaSとしてOpenIDはOktaのidp、SAMLはPingFederateのidpがメジャー

=========================
2016-01-03
■XSS対策、CSRF対策、脆弱性チェック
情報処理推進機構にチェックリスト有
https://www.ipa.go.jp/security/vuln/websecurity.html
XSS対策
 フォーム送信後の確認画面ではHTMLエスケープ等でサニタイズされた内容の結果を表示
 DBへのクエリについてはプレースホルダやエスケープ等でSQLインジェクションを防ぐ
 target="_blank"はXSSになるので危ない、rel="noopener noreferrer"を付ける
  https://b.hatena.ne.jp/entry/s/webtan.impress.co.jp/e/2020/03/13/35510
  https://laboradian.com/test-window-opener/
CSRF対策
 前ページでhidden値を入れる

 クッキーに具体的なものは入れない、CookieにHttpOnly属性、HTTPS通信ではsecure属性
 エラーメッセージを表示しない
 不要なファイルは削除

 XMLの外部実態参照は禁止、サーバ上でコードが実行される
  →libxml_disable_entity_loader(true)で止める、xmlをアップロードさせない/使用しない、JSON使う
 PDFからHTTPリクエストが発行される
  →PDFをアップロードさせない

------

//SQLインジェクション対策
$sql = "UPDATE users SET name='.mysql_real_escape_string($name).'WHERE id='.mysql_real_escape_string ($id).'";
\ " ' を最低限、\エスケープ
NUL (ASCII 0) /n /r / ' " およびCTRL+Zをエスケープしたい

//クロスサイトスクリプティング対策
表示時には<>&"をメタ文字へ変換
echo htmlspecialchars($_GET['username'], ENT_QUOTES);
$ent = htmlentities($ent, ENT_QUOTES, "UTF-8"); //100個の文字を変換

//クロスサイトスクリプティング対策
別サイトからのポストを弾く
refferを送信しないリクエストもある(別サイトのリファラを弾き、nullもしくは適切ページからを許可する)
セッションIDで判断する

//DOS対策
2重ポスト
IPと日付で2重ポストを防ぐ(同IPのポストがx秒以内を弾く)

■サニタイズの方法
DOCには生のテキスト、DBとHTMLにはエスケープ済みのものを入れる
• 入力があればhtmlエスケープしDBに入れる
• html表示はそのままhtmlエスケープ状態で出力
• Docへはhtmlエスケープを解除し表示
• htmlフォーム内表示はhtmlエスケープを解除し表示
htmlエスケープ
https://weblan3.com/html/special-character
バッククォート以外は分かり易いで文字表記でエスケープする、改行はエスケープしない
< &#60 &lt 不等号(より小さい)
> &#62 &gt; 不等号(より大きい)
& &#38; &amp; アンパサンド
" &#34; &quot; 二重引用符
' &#39; &apos; シングルクォート,アポストロフィ
; &#59: &semi; セミコロン
\ &#92; &bsol バックスラッシュ
` &#096 バッククォート

========

■JSONP
scriptタグを使用してクロスドメインなデータを取得する仕組みのことである。 HTMLのscriptタグ、JavaScript(関数)、JSONを組み合わせて実現される

GoogleAnalyticsのクッキーは1stパーティでサイト側がオーナでありGoogleがオーナーではない
 サイト側のJSでクッキーが作成されるようなっている
 クッキーが送信される相手はどこか?が重要でGoogleでなくサイト側に送信される
 アクセス履歴は別途データをGoogleに送信しており、クッキーはセッション管理に使用される


■SSO
色々な方法がある、SAMLや、サイトにエージェントを組み込み+SSO認証サーバ等
ロジックを確認しないと詳しくは分からない

=========

■SSL
CAはサーバに証明書(署名)を発行
====
クライアントが接続要求
サーバが証明書(署名とRSA公開鍵を含む)を送る
クライアントが証明書を検証(
 どっち?
 1)署名をルート証明書のチェーン(RSA公開鍵)で複合化しドメインを確認
  該当のルート証明書(RSA公開鍵)がブラウザにないと該当CAに要求?
   CRLやOCSPで失効について問合せができるようだがRSA公開鍵の要求は出来なさそう
  (ルート証明書はブラウザにある結局オレオレ証明書に違いない:厳密な審査の上で組込まれている)
 2)クライアントが公開鍵をサーバに送りRSA秘密鍵で暗号化し送り返すとクライアントが複合化してRSA秘密鍵が正しい事を確認
)
クライアントが共通鍵(セッションキー)を生成し公開鍵で暗号化し送る
サーバが秘密鍵で共通鍵を複合
以降共通鍵暗号で通信
 ※ホンマか??
====
ホスト(ドメイン)を持って接続要求をし、暗号化通信後にパスやクエリパラメータを送るので、詳細は暗号化され守られている

Posted by funa : 01:46 AM | Web | Comment (0) | Trackback (0)


January 22, 2023

竹書房 plotted nibbler
ええ本無いな、ダメな方に誘導しているだけで読まん方がいいよな
 どうでもええ、科学的でも前進が少ない、分かりにくい、本となっていない
 上梓しましたよ~という為だけにある
 レビューも信用ならん
 適当なことを言っているだけ、逆誘導
 逆に生産性が無さそうな批評家、評論の方がええかも

といっても、私も逆誘導だよ~ん
ということで… ベリベリベリ竹書房復活ってdoDow


/// 支配の構造 国家とメディア――「世論」はいかに操られるか
仏)フランス革命で労働者が団結して職能組合や結社を厳しく制限
中間共同体を認めず、ルソーの社会契約論に影響された
国家は個人の自由意思に基づく契約により成立、一般意思こそが公の利益を達成する
党派、結社は私的団体であり、私的利益誘導するでなく個人になれと
実際には党派なのに個人と言い張ることが起こる

米)タウンシップがデモクラシーの下支え
地域に根差す自治的な中間共同体、つまり教会
中産階級が階級的ではなくフラットな個人として関係性を結ぶ
中間共同体が国家権力の防波堤になり、パブリックマインドの教育の場となる
行き過ぎた個人主義から共同体を見直す動きも
結社としてのメディア=ローカルニュース
選挙は神の見えざる手、デモクラシーには見えない神の存在があると思っているのでは

プロテスタントの救済、神の国に行くのは厳格で難しい
カトリックは懺悔をすればいいが、Pは大抵の人は救済されないと考えている
救済される自分は救済されない堕落した人間とは付き合えない
つまりエリートとしての連帯は強く救済される同志

人の間で同時性を認識できると共同体やネーション等の連帯感が現れる
同じニュースを見る事、昔は新聞で同時性がありメディアが連帯を近年作りだした
昔はどこに巡礼するかで共同体が決まった、共同体から代表2名で伊勢に行ったとか
ネットはバラバラに小世界を点在させ、相互交流はしない

検閲や強制や弾圧でなく、社会の変化に従って、大衆が自ら忖度し発禁していくだろう
ちびくろサンボ、アンクルトムの小屋、煙草と肺がん、コロナ、陰謀
誰かにとって好ましくないものは何も考えずに燃やしてしまえば平穏無事だ
自分の頭で考えているような気になる、動かなくても動いているような感覚になる、ニュースのみをぎっしり詰め込んでやれ

/// 知ってはいけない現代史の正体
waspはもう米国を支配していない
排他的だったwaspは > 同一化 > 多様性 > というメディア世論で没落 > DS
多文化共生を一つの国家で行えない(DSの分断戦略、欺瞞、国家は単一文化が自然)

戦争紛争を利用し利益を収奪
シリアに介入したい(反アサド⇔ISIS(悪者)←育てる/武器を供給)>無政府状態にした後>介入
時に両方に付く、時に片方、だが裏切ることもある

自由と民主主義は国際介入政策を正当化する口実
- 民主化>民営化>グローバル市場化→国民主権の喪失
- グローバリズム→民族文化を破壊し金融で独裁支配する社会主義化


歴代大統領:グローバリズム←影のキングメーカ:国際金融資本家のコントロール下
トランプ:アメリカファースト/ナショナリズム
プーチン:反グローバリズム

中国:共産党独裁国家、超個人主義、中国人に国家観はない(儲かればいい)→世界のリーダになり得ない

/// アンジャッシュ渡部の 大人のための「いい店」選び方の極意
食の楽しみ、開拓の楽しみ
相手の苦手なものを確認、行きたいところを調べて行く
忙しいとか疲れている時こそ食べに行く:充実感でリフレッシュ
予約時:用途を言っておきたい(デートとか接待とか)、個室はテーブルか座敷か、お土産

/// フロイト vs ユング
フロイトが考えたのはこういうことだ。人間は誰しも、自分でも知らない 「心の秘密」をもっている。世の中には、不幸にも、なぜだかわからないうちに心や体の調子が悪くなり、しかもそのせいで周りとの人間関係までぎくしゃくしてしまっているような人がいる。そういう人の多くは、この「心の秘密」のせいで不幸になっている。

フロイトは、この秘密の在りかを「無意識」と呼んだ。

自分にも分からない 「心の秘密」などというものができてしまうの は、もとはといえばこの「話すこと」に原因があるのだと言ってよい。フロイトは、「無意識」をつくる心の働きを「抑圧」と呼んだが、これは「話すこと」を抜きには考えることが できないメカニズムである。つまり、あることを言わずに別のことを言う、ということではじめて、なにかが外へと追い出される、ということになるのである。

ときどき、精神分析 (まがい)の本を読んでいると、人間に心の病をもたらす根本的な問題は 「人間の本能が壊れている」ことだ、などという説明に出会うことがある。こうした考え方 は、精神分析の立場からすると、まったくの的外れだと言わねばならない。人間が「ことば」というものを話すようになった瞬間から、自らの本能的現実とはまったく異なる次元の「現実」に、すなわち、まさに「言語によって生み出される現実」に、捕らえられてしまうということ、そのことこそが重要なのだ。

言語の働きにのっとって話すことが「無意識」をつくり、また逆に「無意識」を探す道すじを与えてくれるのだとすれば、およそ人間の活動の及ぶあらゆる領域において、「無意識」が存在し、「無意識」が探求されうることになる。だからフロイト以後、文学も、人類学も、政治学も、社会学も、文学作品の中にも、未開社会の畑の中にも、政治的言説の中にも、はたまた社会構造そのものの中にも、「無意識」は存在するし探求されるようになった。

フロイト:チェコ、年子、ユダヤ改修派(ユダヤとして被差別、隣国ナチスとの関係)
ユング:ゲルマン系スイス、父プロテスタント牧師名士、母シャーマン家系
抑圧・トラウマを意識化すると神経症が治る。カタルシス→意識化していない、知らないことは怖い
 抑圧>無意識>神経症(神経症だけでなく無意識に入り込む:夢・失錯行為・機知に反映)
心の構造論
 イドesリビドー:快感原則
 自我ego:健全
 超自我super ego:無意識な躾(破ると後悔や罪責感)
コンプレックス - Wikipedia:無意識に働く心的内容で複合的な観念、好きだが嫌いとか葛藤とかフェチ的な
 エディプスコンプレックス:母好き父嫌いな息子
 エレクトラコンプレックス:父好きな葉は嫌いな娘
 劣等感を意味するのはコンプの一種でコレ、劣等複合(inferiority complex)
  全ての他人よりも不足している、劣っているという信念から劣等感が生じ、極端な内気、自己隔離、社会的従順などが発生
死の欲動・影←対抗するには自我(健全)の強さが必要
 駄目男に惹かれる>快感(受動な不快を能動的に置換して和らげようとしている)
ヌーメン性:聖性が作用し自身が支配される
ニヒリズム:虚無主義、絶対的な価値がなくなる
脳科学の知見
 思考)外部を知覚し判断
 感情)内的寛容や内的欲求を抑圧し評価
 情動)検索、のっとり、恐怖、パニックの少なくとも4つ
力動:反対方向に動くエネルギーの葛藤
 愛情と攻撃性、欲望と禁
転移:患者が分析家に愛情や憎しみ等の感情を向ける、逆に分析家が患者に感情を向けると逆転移
解離:ヒステリーから別人格が現れる
 (ヒステリー:強い感情があり意識から追い出されている記憶)
自由連想法:自由に話し無意識に閉じ込められた記憶を蘇らせる
催眠術:意識は眠らせるが無意識に話し掛け暗示を掛ける、これで支配できる
幼児期の性的トラウマが思春期以降にヒステリーとして現れる
夢:願望充足(あくまで無意識の。だがかつて意識から追放された欲望)
 睡眠自体を守る行為の場合もある
 圧縮+移動+抵抗の検閲
 イドとエゴとスーパーエゴが夢を歪めているのを探る
 夢により意識と無意識を近づけたと言える
子供の夢:強い歪曲や検閲がなく、また抑圧や記憶が少なく欲望成就そのままが多い
大人の夢:遠い記憶/複雑な葛藤/幼年期の記憶で圧縮移動されて分かりにくい
現実と欲望の葛藤→間違い/度忘れ/ヒステリー/脅迫神経症/夢で成就
 プライベートで退行し抑圧を解放しバランスを取っている
(フロイト
夢や症状は個人史の中で探られるべき
脅迫症状には愛憎の葛藤や性的トラウマがある
夢には無意識に抑圧された願望が現れる
無意識は自我が受け入れられないものを放り込むゴミ箱のようなもの
自我は意識の中心、無意識の中に抑圧された衝動や感情が神経症の原因
神経症の原因は幼少期にある
(ユング
夢や症状は集合的無意識に根差す原初的なイメージとも比較対象すべき
物語が重要であり人の苦悩や背景を明らかにする
無意識は意識を補償するもので夢は無意識からのメッセージ
無意識はもっと創造的で植物にすら通底する将来的な層がある
意識と無意識からなる心の中心には自己(セルフ)がありこれを実現することが人生の目標
神経症の原因は現在にある、神経症の人こそ自己実現の可能性をもつ
(オレ
無意識の願望が幼稚な場合は折り合いがつかず問題だな

夢の定型変形
 塔/ペン:ちんこ
 鞄/洞窟:おまんちょ
 王/王妃:両親
 小動物:子供/兄弟
言葉遊びで別の言葉に置き変えらる
夢を他人に話す前提>転移者(分析家)が夢に含まれている
前頭法:頭を叩きながら治療者が語り掛ける
自由連想法:頭に浮かんだことをそのまま語らせる
 不安=内的、恐怖:外的、体内:楽園
不安の原型は出産外傷で分離、孤独、見捨てられ

神経症は無知に押し込まれている
暗示法は信頼関係=転移が必要で危険>フロイトは自由連想法に変えた

フロイト=性欲、子供においては愛着・依存が
 男女間の結合だけでなく、創造・欲求・生命力の源泉・活力

 人間は性欲を学習するので間違いや失敗が起こりやすい
男:エディプスコンプ(母に恋し父を憎む)→去勢を連想→断念し父を真似→超自我→(拗らせ)性同一性
女:エディプスコンプ(母を愛す)→ちんこがない→劣っている→母を嫌悪→父に憧れ→他男と恋愛→(拗らせ)変な恋愛、ユング派はエレクトラコンプレックスという

肛門期:トイレ成功/失敗の躾>SMに発展
ナルシシズム:性的エネルギーを自己に(自己保全)
防衛機制:抑圧(嫌な事は無責任化)、否認(認めない)、分離(感情を切り離し他人事)
防衛機制:同一化、反動形成(嫌なのに丁寧)、投射(被害妄想など)、合理化(知性化:言い訳)、昇華(虐めをスポーツ)
死への欲動(タナトス):正か生き死に、外部とすると他者攻撃となる、あるいは超自我(躾)
生の欲動(エロース):
 戦争=攻撃的欲求
 宗教=幼児は親に守ってもらいたい欲望(幼児神経症的)
 芸術=幼児期に抑圧された性的欲望を形を変え昇華
 性欲・攻撃性・エディプスコンプを転換→仕事/スポーツ/絵/戦争/文学

ユング:心がどこへ向かおうとしているか?心は過去から未来へ発達を続けようとする
フロイト:過去(幼児期)>性的エネルギー
カレン、ホナイ:神経症は性欲でなく文化的要因=対人関係と基底不安(幼児期/孤独で無力)
アルフレッドアドラー:権力闘争/体力知力を求める、劣等感が神経症に

子供の人格形成:親は子供の世界に入るべきでない、自分で世界を発見すべき
幼児の人格形成:母が外部との緩衝になり、受け取れるものだけ選択し赤ちゃんに返すといい

ラカン:
 想像界(鏡像):ナルシシズムと攻撃性で事故や他人を形成する領域
 象徴界:人を人と形成する言語の領域=法
 現実界:死の欲動の領域

男性の去勢不安、女性のペニス羨望>精神分析治療で乗り越えるのが難しい

自我心理学:自我を強くし適応能力を高める(無意識を長期間分析する必要がなくなる
認知行動療法:無意識にアプローチしないプラグマティックなトレーニング療法
 例)ゴキブリ怖い>映像を見て慣れる等(パブロフの犬的)
ニューロサイエンス:心の現象も脳内化学物質プロセス

心理学
 ヴント:要素主義-構成主義-意識内容の考察
 ワトソン:行動主義 S(刺激)-R(反応)
 ヴェルトハイマー:ゲシュタルト心理学=形態(似てるものをグループしがち)
  上の2つの反応観察に反論し全体性に光を当て解明しようとする、心は要素に分解できず部分からは導くことは不可
 フロイト:精神分析
=======
枢軸 axis/pivot
国際関係のうえで親密な友好関係にあり、共同行動をとる国々。ナチス・ドイツ、ファシストのイタリア、軍国主義の日本。ムッソリーニがローマとベルリンを結ぶ垂直線を枢軸として国際関係は転回すると演説して有名に。ひっくり返すの暗喩。
 直喩simile:~のような「雪のような肌」
 暗喩=隠喩metaphor:例えが隠されている「檻の中のライオン」
 換喩metonymy:連想できる代替の語「白衣の力で治す」

Posted by funa : 04:17 PM | Column | Comment (0) | Trackback (0)


September 2, 2022

Overtone
音は複数の成分音の集合で、そのうち最も振動数が少なく高さを決定する音を基本音fundamental tone。
overtoneは上音、基本音以外の部分音。露光過度。
倍音はharmonic overtone。

2022年、特に感動した・気に入った フリーソフト – GIGA!無料通信 (gigafree.org)
楽器パートに分解、MIDI化、高画質化超解像等のヤツ
2021年、特に感動した・気に入った フリーソフト – GIGA!無料通信 (gigafree.org)
ミキシング、AIに喋らせ

張っ付くパンツか 引っ付くパンツか くっつくパンツか ムカつくパンツか、張っ付くパンツか 引っ付くパンツか くっつくパンツか ムカつくパンツか、パンツかパンツかパンツかパンツか

一拍三拍に手拍子入れて、二拍四拍でもみ手をするというのが日本の伝統的なリズム感
2/4拍はバックビート所謂ウラ、前者のキックか後者のスネアでとるか
なお1ト2ト…のトのところが裏拍


ゼブラゾーンを走っていても直線優先でAの勝ち(何割かは引かれるが)
ゼブラゾーン(導流帯)の意味。走行・駐車は可能?|チューリッヒ (zurich.co.jp)


左から、立ち入り禁止部分(オレンジ枠で走行も停止も不可)、安全地帯(オレンジ枠でバス停等で走行も停止も不可)、停止禁止(走行はできるが停止不可)

3歳でクラクションは鳴らせない、ドア解放だと走行中危ないしな
園バスの件、「園バス土足禁止」。 靴が残っていたら絶対に気づく。 費用ゼロですぐ導入可。

■ブラウザの機能拡張を考えようか
誰もが使うべき「YouTube拡張機能」ベスト10 | ライフハッカー・ジャパン (lifehacker.jp)

■秘密のフォント
(1) 菊屋素材@漫画ブラシ・擬音集・などなど (@Kikuya_Sozai) / Twitter
[菊屋素材集]R-18擬音&セリフ ブラシ集 - kick-tyan - BOOTH
あははもじもじ - 無料で使える日本語フォント投稿サイト|フォントフリー (fontfree.me)
あははもじもじフォント - フロップデザインフォント - BOOTH

Posted by funa : 02:54 AM | Column | Comment (0) | Trackback (0)


Navi: <  1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19  >
PhotoGallery


TWITTER
Search

Mobile
QR for cellphone  QR for smart phone
For mobile click here
For smart phone click here
Popular Page
#1Web
#2Hiace 200
#3Gadget
#4The beginning of CSSレイアウト
#5Column
#6Web font test
#7Ora Ora Ora Ora Ora
#8Wifi cam
#9みたらし団子
#10Arcade Controller
#11G Suite
#12PC SPEC 2012.8
#13Javascript
#14REMIX DTM DAW - Acid
#15RSS Radio
#16Optimost
#17通話SIM
#18Attachment
#19Summer time blues
#20Enigma
#21Git
#22Warning!! Page Expired.
#23Speaker
#24Darwinian Theory Of Evolution
#25AV首相
#26htaccess mod_rewite
#27/// BANGBOO BLOG /// From 2016-01-01 To 2016-01-31
#28竹書房
#29F☆ck CSS
#30Automobile Inspection
#31No ID
#32Win7 / Win10 Insco
#33Speaker
#34Arcade Controller
#35Agile
#36G Suite
#37Personal Information Privacy Act
#38Europe
#39Warning!! Page Expired.
#40GoogleMap Moblile
#41CSS Selectors
#42MySQL DB Database
#43Ant
#44☆od damnit
#45Teeth Teeth
#46Itinerary with a eurail pass
#47PHP Developer
#48Affiliate
#49/// BANGBOO BLOG /// From 2019-01-01 To 2019-01-31
#50/// BANGBOO BLOG /// From 2019-09-01 To 2019-09-30
#51/// BANGBOO BLOG /// On 2020-03-01
#52/// BANGBOO BLOG /// On 2020-04-01
#53Windows env tips
#54恐慌からの脱出方法
#55MARUTAI
#56A Rainbow Between Clouds‏
#57ER
#58PDF in cellphone with microSD
#59DJ
#60ICOCA
#61Departures
#62Update your home page
#63CSS Grid
#64恐慌からの脱出方法
#65ハチロクカフェ
#66/// BANGBOO BLOG /// On 2016-03-31
#67/// BANGBOO BLOG /// From 2017-02-01 To 2017-02-28
#68/// BANGBOO BLOG /// From 2019-07-01 To 2019-07-31
#69/// BANGBOO BLOG /// From 2019-10-01 To 2019-10-31
#70/// BANGBOO BLOG /// On 2020-01-21
#71Bike
#72Where Hiphop lives!!
#73The team that always wins
#74Tora Tora Tora
#75Blog Ping
#76無料ストレージ
#77jQuery - write less, do more.
#78Adobe Premire6.0 (Guru R.I.P.)
#79PC SPEC 2007.7
#80Google Sitemap
#81Information privacy & antispam law
#82Wifi security camera with solar panel & small battery
#83Hope get back to normal
#84Vice versa
#85ハイエースのメンテ
#86Camoufla
#87α7Ⅱ
#88Jack up Hiace
#89Fucking tire
#90Big D
#914 Pole Plug
#925-year-old shit
#93Emancipation Proclamation
#94Windows env tips
#95Meritocracy
#96Focus zone
#97Raspberry Pi
#98Mind Control
#99Interview
#100Branding Excellent
Category
Recent Entry
Trackback
Comment
Archive
<     February 2025     >
Sun Mon Tue Wed Thi Fri Sat
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Link