このブログについて
このブログは、爺による「備忘録」です。
言葉の使い方をはじめ、間違っていることも多々あるかもしれません。
あくまでも「備忘録」ですので、これのブログを見て「怒っちゃやーよ!」
このブログは、爺による「備忘録」です。
言葉の使い方をはじめ、間違っていることも多々あるかもしれません。
あくまでも「備忘録」ですので、これのブログを見て「怒っちゃやーよ!」
前回 の導入から4年。
prism.js も成長しただろうし
私の言語も広がってきたので
再度導入してみる。
公式:Prism
公式サイトの ダウンロードページ にて設定。
()内は、<code class=”language-xxxxx”> の xxxxx に設定すべき値。
公式:Supported languages
せっかく Diff を導入したので、そちらで記述してみる。
Line Highlight
Line Numbers
Autolinker
+ Custom Class
Show Language
JSONP Highlight
Highlight Keywords
Remove initial line feed
+ Inline color
+ Keep Markup
Command Line
Unescaped Markup
+ Data-URI Highlight
Toolbar
+ Copy to Clipboard Button
+ Match braces
+ Diff Highlight
+ Treeview
Blogger.comにPrism.jsをCDNで導入する(2020-11-20)
言語追加の方法がわからないので
今回はフル選択してみた。
時代は、5G だしね!
Total filesize: 768.93KB (98% JavaScript + 2% CSS)
ぎゃー!重い・・・
ちなみに前回は
Total filesize: 146.01KB (96% JavaScript + 4% CSS)
でも、読み込み速度はあんまり気にならない。
ラッキー♪
prism.js(1.9.0)を WordPress で利用する 参照。
prism.js(1.9.0)を WordPress で利用する 利用 参照。
(おそらく)今回 Keep Markup プラグインを追加したおかげで
HTML コードを表現する際に < > をエスケープする必要がなくなった。
< > をエスケープする必要があった。
<pre class="line-numbers" data-language="HTML" data-start="" data-line="">
<code class="language-markup">
<p>Example</p>
</code>
</pre>
<pre class="line-numbers" data-language="HTML" data-start="" data-line="">
<code class="language-markup">
<p>Example</p>
</code>
</pre>
過去記事の表示が崩れてるんだろうな・・・。
このエラーは、エラー文は頼りにならないことが多いみたい。
色々なことが原因で、最終的にこういうエラーを吐くことになっているだけなので
毎度、原因を探る作業が必要になりそう。
原因を探るためには、コメントアウトを繰り返し
原因箇所を特定するところから始める。
私の場合は
において、掲題のエラーが出た。
以下の記事を書いたのは、Nuxt に触りたての頃。
今振り返ってみると、その後、Nuxt インストール時に
このような現象は起きていないので
気のせいだったかも?
Nuxt2.15.2
yarn create nuxt-app hello
と普通にインストールしただけなのに
開発サーバを起動したら
at WebSocketServer.handleUpgrade (node_modules/ws/lib/websocket-server.js:193:27)
at WS.handleUpgrade (node_modules/@nuxt/content/lib/ws.js:21:21)
at WS.serve (node_modules/@nuxt/content/lib/ws.js:17:10)
at node_modules/@nuxt/content/lib/middleware.js:12:15
at call (node_modules/connect/index.js:239:7)
at next (node_modules/connect/index.js:183:5)
at next (node_modules/connect/index.js:161:14)
at next (node_modules/connect/index.js:161:14)
at WebpackBundler.middleware (node_modules/@nuxt/webpack/dist/webpack.js:2192:5)
というエラーが出た。
泣きそうになりながら Google 先生へ質問してみた。
nuxt Cannot read property ‘toLowerCase’ of undefined
こちらで検索したところ
GitHub:Cannot read property toLowerCase of undefined(2019-07-24)
Qiita:Cannot read property ‘toLowerCase’ of undefinedのとき何を確認すべきか?(2020-12-09)
などが上位にでてきたんだけど
いずれもコーディングミスを原因とするもの。
どれも新規 Nuxt.js プロジェクトにはありえないので
検索ワードを変更してみることにした。
上記エラーメッセージを引き起こしているファイル名を入れてみた。
WebpackBundler.middleware Cannot read property ‘toLowerCase’ of undefined
で検索すると、WebSocket に関わる記事が最初に出てきた。
中を見ると、エラーメッセージが全く同じ!
途中 @nuxt/content が原因っぽいことが書いてあったので
試しに、@nuxt/content を外してインストールしてみると
確かに件のエラーが出ない。
更に読み進めると
GitHub:Nginx の WebSocket を有効にすると問題が解消される(2020-10-16)
との返信を見つけた。
そこで
Qiita:NginxのリバースプロキシでWebソケットを通す際の設定(2019-12-28)
こちらを参考に、Nginx において WebSocket を有効に設定してみた。
server {
listen 80;
server_name 192.168.56.xxx;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
location / {
proxy_pass http://127.0.0.1:3000;
}
}
これで確かに
@nuxt/content を同梱してインストールしても
件のエラーは出なくなった。
と、ここまで試行錯誤を繰り返した後で
公式に Nginx のリバースプロキシを利用する設定が載っているのを見つけた。
公式:NGINX Using NGINX as a reverse proxy
map $sent_http_content_type $expires {
"text/html" epoch;
"text/html; charset=utf-8" epoch;
default off;
}
server {
listen 80; # the port nginx is listening on
server_name your-domain; # setup your domain here
gzip on;
gzip_types text/plain application/xml text/css application/javascript;
gzip_min_length 1000;
location / {
expires $expires;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 1m;
proxy_connect_timeout 1m;
proxy_pass http://127.0.0.1:3000; # set the address of the Node.js instance here
}
}
こちらで試したところ、件のエラーが出た。
そこで、前述の WebSocket を有効にする設定を加えた。
map $sent_http_content_type $expires {
"text/html" epoch;
"text/html; charset=utf-8" epoch;
default off;
}
server {
listen 80; # the port nginx is listening on
server_name your-domain; # setup your domain here
gzip on;
gzip_types text/plain application/xml text/css application/javascript;
gzip_min_length 1000;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
location / {
expires $expires;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 1m;
proxy_connect_timeout 1m;
proxy_pass http://127.0.0.1:3000; # set the address of the Node.js instance here
}
}
エラーが出る。。。
curl http://localhost:3000/
と、直接アクセスしたときはエラーが出ないので
やっぱり Nginx の問題だと思われる。
location ディレクティブ内のリバースプロキシの設定をコメントアウトしてみた。
map $sent_http_content_type $expires {
"text/html" epoch;
"text/html; charset=utf-8" epoch;
default off;
}
server {
listen 80; # the port nginx is listening on
server_name your-domain; # setup your domain here
gzip on;
gzip_types text/plain application/xml text/css application/javascript;
gzip_min_length 1000;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
location / {
expires $expires;
# proxy_redirect off;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# proxy_read_timeout 1m;
# proxy_connect_timeout 1m;
proxy_pass http://127.0.0.1:3000; # set the address of the Node.js instance here
}
}
エラーが出ない!
いっぱいコメントアウトしたので、選別をしたところ
map $sent_http_content_type $expires {
"text/html" epoch;
"text/html; charset=utf-8" epoch;
default off;
}
server {
listen 80; # the port nginx is listening on
server_name your-domain; # setup your domain here
gzip on;
gzip_types text/plain application/xml text/css application/javascript;
gzip_min_length 1000;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
location / {
expires $expires;
proxy_redirect off;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 1m;
proxy_connect_timeout 1m;
proxy_pass http://127.0.0.1:3000; # set the address of the Node.js instance here
}
}
これならエラーが出ない。
proxy_set_header があるとエラーが出ることが判明。
途方に暮れていたところ
なんとなく、proxy_set_header を location ディレクティブの外へ配置してみた。
map $sent_http_content_type $expires {
"text/html" epoch;
"text/html; charset=utf-8" epoch;
default off;
}
server {
listen 80; # the port nginx is listening on
server_name your-domain; # setup your domain here
gzip on;
gzip_types text/plain application/xml text/css application/javascript;
gzip_min_length 1000;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
location / {
expires $expires;
proxy_redirect off;
proxy_read_timeout 1m;
proxy_connect_timeout 1m;
proxy_pass http://127.0.0.1:3000; # set the address of the Node.js instance here
}
}
エラーが出ない!
解決したとは思えないけど
疲れたので、アプリ側を実装するまで、一旦これでよしとする。。。
GitHub:Websocket error using alternative server framework(2020-06-14)
PLEASE SLEEP:nginx の proxy_set_header の継承ではまった(2013-05-18)
-> 調査の過程でこんな記事も見つけたので、一応メモ。古い記事なので、今は仕様が変わっているかも
久しぶりにこのエラーに遭遇した。
前回と文言が異なるのは、Nuxt の仕様変更かしらね?
コメントアウトを繰り返し、箇所を特定したところ
ここだった。
とりあえず一個上のDOMにv-ifを移動して解決。
ハッカーになりたい!:Nuxt.jsの$route.pathは$nuxt.$route.pathを使え!(2018-09-04)
という記事を見かけたので
こうしたら、エラーが出なくなった。
言われてみれば、元のコードだと
template 直下に v-if が仕込まれているので
状況によっては、template 内が空になるコードとなっている。
これは Nuxt の仕様的に、確かアウトだったような。。。
そのせいか~ 🙄
SourceForge:phpPgAdmin ダウンロードページ より、DL。
2019-11-23 現在
phppgadmin-REL_5-6-0.zip
解凍して出てきた
を ppa とリネームして、CakePHP4 の webroot ディレクトリ直下へ配置。
/webroot/ppa/*
を
とリネーム。
- $conf['servers'][0]['host'] = '';
+ $conf['servers'][0]['host'] = 'localhost';
$conf['servers'][0]['host'] = '192.168.xxx.xxx'; <- IP 直打ちも可
- $conf['servers'][0]['defaultdb'] = 'template1';
+ $conf['servers'][0]['defaultdb'] = 'hoge';
- $conf['default_lang'] = 'auto';
+ $conf['default_lang'] = 'japanese';
phpPgAdmin では、pgsql, postgres, root, administrator というユーザ名でのログインは
制限されているとのこと。
今回はローカル環境でのテストインストールなので
これを解除してみる。
- $conf['extra_login_security'] = true;
+ $conf['extra_login_security'] = false;
Qiita:ローカル環境PostgreSQL + phpPgAdmin でデフォルトユーザーでログインできないときの対処(2016-12-24)
ppa トップページでテーマを選択することができる。
とりあえず
の4種から選べる。
これらが
こちらにある
に対応している。
今回は、Cappuccino にしてみた。
.topbar, .trail {
color: #fff;
background-color: #363330;
margin: 0;
padding: 0;
text-align: left;
}
Chrome で見ているけど、キャッシュがきつく、
スーパーリロードも効かない。
一晩寝かせたら、やっと反映された。
設定を終えて、ppa へアクセスしてみたら、下記エラーが出た。
PHP の PostgreSQL ドライバを追加インストール。
yum install -y --enablerepo=remi --enablerepo=remi-php74 php-pgsql
__snip__
インストール:
php-pgsql.x86_64 0:7.4.0~RC6-15.el7.remi
完了しました!
Apache を再起動して、無事 phpPgAdmin が表示された。
systemctl restart httpd
現状は、パスワードなしのログイン方法しかわかっていない。
それでも、事前 設定 が必要。
PostgreSQL のドライバをインストールしようとしたら
こんな感じになった。
yum install -y php-pgsql
__snip__
updates | 2.9 kB 00:00
(1/3): epel/x86_64/updateinfo | 1.0 MB 00:01
(2/3): remi-safe/primary_db | 1.6 MB 00:04
(3/3): epel/x86_64/primary_db | 6.9 MB 00:11
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php-pgsql.x86_64 0:5.4.16-46.1.el7_7 を インストール
--> 依存性の処理をしています: php-pdo(x86-64) = 5.4.16-46.1.el7_7 のパッケージ: php-pgsql-5.4.16-46.1.el7_7.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: php-pgsql-5.4.16-46.1.el7_7.x86_64 (updates)
要求: php-pdo(x86-64) = 5.4.16-46.1.el7_7
インストール: php-pdo-7.4.0~RC6-15.el7.remi.x86_64 (@remi-php74)
php-pdo(x86-64) = 7.4.0~RC6-15.el7.remi
利用可能: php-pdo-5.4.16-46.el7.x86_64 (base)
php-pdo(x86-64) = 5.4.16-46.el7
利用可能: php-pdo-5.4.16-46.1.el7_7.x86_64 (updates)
php-pdo(x86-64) = 5.4.16-46.1.el7_7
問題を回避するために --skip-broken を用いることができます。
これらを試行できます: rpm -Va --nofiles --nodigest
そこで、php アップデート のときのコマンドを参考に
前述のようにしたら、無事にドライバをインストールできた。
ユーザ名を、postgres。
パスワードは、なし、ALTER ROLE で再設定後の両方を試したけど
ログインできない。
ドキュメント を見てみたら
Support for PostgreSQL 8.4.x, 9.x, 10.x, 11.x
あ、れ?
もしかして、12.1 だから?
多分そういう問題ではないよね。。。
設定 をしたら、パスワードなしならログインできるようになった。
テーブルを結合して一括削除を行う場合。
DELETE の後に、テーブルエイリアスを書く必要があるとのこと。
DELETE
h <- これがミソ
FROM
`hoges` AS h
LEFT JOIN `moges` AS m
ON m.`hoge_id` = h.`id`
WHERE
h.`id` = 5
知らなかった。。。
確かに、ミソのところがないと、構文エラーとなる。
これがエイリアスでなくて、テーブル名の直書きだったらどうなのかとか
未調査。
Qiita:mysqlでjoinした結果をdelete(2015-01-27)
OS のユーザを切り替え。
su - postgres
最終ログイン: 2019/11/17 (日) 19:40:30 JST日時 pts/0
全てはここから。
psql -h [host_name] -p [port_no] -U [user_name] [db_name]
という書式でログイン。
psql -h localhost -p 5432 -U muchag testdb
psql (12.1)
"help"でヘルプを表示します。
で、下記のような、SQL 文入力待機状態になる。
postgres ユーザが postgres データベースへアクセスする場合のみ使える?
psql
\q
exit も有効。
psql --version
psql (PostgreSQL) 12.1
SELECT version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 12.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
\du
ロール一覧
ロール名 | 属性 | 所属グループ
----------+--------------------------------------------------------------------------+--------------
postgres | スーパユーザ, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}
psql -l
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+----------+-------------------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
\l
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+----------+-------------------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
SHOW all;
SHOW [設定名];
psql --help
\?
\h
利用可能なヘルプ:
ABORT ALTER PROCEDURE ALTER VIEW CREATE FOREIGN TABLE CREATE TABLESPACE DROP DATABASE DROP SCHEMA GRANT SELECT
ALTER AGGREGATE ALTER PUBLICATION ANALYZE CREATE FUNCTION CREATE TEXT SEARCH CONFIGURATION DROP DOMAIN DROP SEQUENCE IMPORT FOREIGN SCHEMA SELECT INTO
ALTER COLLATION ALTER ROLE BEGIN CREATE GROUP CREATE TEXT SEARCH DICTIONARY DROP EVENT TRIGGER DROP SERVER INSERT SET
ALTER CONVERSION ALTER ROUTINE CALL CREATE INDEX CREATE TEXT SEARCH PARSER DROP EXTENSION DROP STATISTICS LISTEN SET CONSTRAINTS
ALTER DATABASE ALTER RULE CHECKPOINT CREATE LANGUAGE CREATE TEXT SEARCH TEMPLATE DROP FOREIGN DATA WRAPPER DROP SUBSCRIPTION LOAD SET ROLE
ALTER DEFAULT PRIVILEGES ALTER SCHEMA CLOSE CREATE MATERIALIZED VIEW CREATE TRANSFORM DROP FOREIGN TABLE DROP TABLE LOCK SET SESSION AUTHORIZATION
ALTER DOMAIN ALTER SEQUENCE CLUSTER CREATE OPERATOR CREATE TRIGGER DROP FUNCTION DROP TABLESPACE MOVE SET TRANSACTION
ALTER EVENT TRIGGER ALTER SERVER COMMENT CREATE OPERATOR CLASS CREATE TYPE DROP GROUP DROP TEXT SEARCH CONFIGURATION NOTIFY SHOW
ALTER EXTENSION ALTER STATISTICS COMMIT CREATE OPERATOR FAMILY CREATE USER DROP INDEX DROP TEXT SEARCH DICTIONARY PREPARE START TRANSACTION
ALTER FOREIGN DATA WRAPPER ALTER SUBSCRIPTION COMMIT PREPARED CREATE POLICY CREATE USER MAPPING DROP LANGUAGE DROP TEXT SEARCH PARSER PREPARE TRANSACTION TABLE
ALTER FOREIGN TABLE ALTER SYSTEM COPY CREATE PROCEDURE CREATE VIEW DROP MATERIALIZED VIEW DROP TEXT SEARCH TEMPLATE REASSIGN OWNED TRUNCATE
ALTER FUNCTION ALTER TABLE CREATE ACCESS METHOD CREATE PUBLICATION DEALLOCATE DROP OPERATOR DROP TRANSFORM REFRESH MATERIALIZED VIEW UNLISTEN
ALTER GROUP ALTER TABLESPACE CREATE AGGREGATE CREATE ROLE DECLARE DROP OPERATOR CLASS DROP TRIGGER REINDEX UPDATE
ALTER INDEX ALTER TEXT SEARCH CONFIGURATION CREATE CAST CREATE RULE DELETE DROP OPERATOR FAMILY DROP TYPE RELEASE SAVEPOINT VACUUM
ALTER LANGUAGE ALTER TEXT SEARCH DICTIONARY CREATE COLLATION CREATE SCHEMA DISCARD DROP OWNED DROP USER RESET VALUES
ALTER LARGE OBJECT ALTER TEXT SEARCH PARSER CREATE CONVERSION CREATE SEQUENCE DO DROP POLICY DROP USER MAPPING REVOKE WITH
ALTER MATERIALIZED VIEW ALTER TEXT SEARCH TEMPLATE CREATE DATABASE CREATE SERVER DROP ACCESS METHOD DROP PROCEDURE DROP VIEW ROLLBACK
ALTER OPERATOR ALTER TRIGGER CREATE DOMAIN CREATE STATISTICS DROP AGGREGATE DROP PUBLICATION END ROLLBACK PREPARED
ALTER OPERATOR CLASS ALTER TYPE CREATE EVENT TRIGGER CREATE SUBSCRIPTION DROP CAST DROP ROLE EXECUTE ROLLBACK TO SAVEPOINT
ALTER OPERATOR FAMILY ALTER USER CREATE EXTENSION CREATE TABLE DROP COLLATION DROP ROUTINE EXPLAIN SAVEPOINT
ALTER POLICY ALTER USER MAPPING CREATE FOREIGN DATA WRAPPER CREATE TABLE AS DROP CONVERSION DROP RULE FETCH SECURITY LABEL
\h [SQL コマンド名] <- 詳細を見る
真面目に書くと、ログインできない。。。
psql -h localhost -p 5432 -U postgres
psql: エラー: サーバに接続できませんでした: FATAL: Ident authentication failed for user "postgres"
公式:構成設定
こちらは、アプリケーション設定のファイル。
CakePHP4 では、
が追加されている。
そして、.gitignore の記述が、CakePHP3 と比べて
- /config/app.php
+ /config/app_local.php
のように変更されている。
環境に依存しない設定を
環境に依存する設定を
へ、記述するルールみたい。
も追加されていた。
'Datasources' => [
'default' => [
'host' => 'localhost',
/*
* CakePHP will use the default DB port based on the driver selected
* MySQL on MAMP uses port 8889, MAMP users will want to uncomment
* the following line and set the port accordingly
*/
//'port' => 'non_standard_port_number',
'username' => 'my_app',
'password' => 'secret',
'database' => 'my_app',
/**
* If not using the default 'public' schema with the PostgreSQL driver
* set it here.
*/
//'schema' => 'myapp',
/**
* You can use a DSN string to set the entire configuration
*/
'url' => env('DATABASE_URL', null),
],
/*
* The test connection is used during the test suite.
*/
'test' => [
'host' => 'localhost',
//'port' => 'non_standard_port_number',
'username' => 'my_app',
'password' => 'secret',
'database' => 'test_myapp',
//'schema' => 'myapp',
],
],
本体とテストそれぞれの、
データベースホスト、ユーザ名、パスワード、データベース名を設定。
今回は、CakePHP4 デフォルトの MySQL ではなく
PostgreSQL を利用するので
'driver' => 'Cake\Database\Driver\Postgres',
こちらも、本体とテストのそれぞれに追記。
が追加されていた。
// if (!env('APP_NAME') && file_exists(CONFIG . '.env')) {
// $dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']);
// $dotenv->parse()
// ->putenv()
// ->toEnv()
// ->toServer();
// }
このコメントアウトを復帰。
こちらに基づいて、
を作成。
export APP_NAME="__APP_NAME__"
export DEBUG="true"
export APP_ENCODING="UTF-8"
export APP_DEFAULT_LOCALE="en_US"
export APP_DEFAULT_TIMEZONE="UTC"
export SECURITY_SALT="__SALT__"
公式:インストール
公式には
と書かれているけど
まだドキュメントを更新し始めたばかりみたいなので
変わる可能性があるかも?
まだ正式リリースを迎えていないので
おまけ付きでインストール。
composer create-project --prefer-dist cakephp/app:4.x-dev /media/sf_CakeTest
スクリプトエディタのツールボタン [関数を選択]-[(対象の関数名)] [(再生ボタン)] または Ctrl + R
ただし、ドキュメントでは、文章中にボタンが配置されてしまうので
うまく扱えなかった。
function onOpen() {
var ui = DocumentApp.getUi();
var menu = ui.createMenu('スクリプトメニュー');
menu.addItem('リスト変換', 'main');
menu.addToUi();
}
onOpen メソッドで、当該ドライブファイルを開いたときのイベントハンドラとして
リスト追加スクリプトを記述する。
iwb.jp:Googleスプレッドシート Apps Scriptの3つのプログラム実行方法(2018-01-22)
MVC 3 から、標準で導入されたらしい。
Microsoft:ASP.NET Core の Razor 構文リファレンス
インライン式。
「コードナゲット」とも呼ばれるみたい。
複数行に渡る場合以外は、閉じる必要がない。
全て使える。
Razor の根幹となる @ を文字列として表記したい場合は
例によって @@ と、重ねて記述する。
複数行に渡る処理を書きたい場合は、@{} で記述する。
コードブロック内に出力内容を記述することも可能。
if などの構文を記述する際は、コードブロック拡張版を利用する。
if などの構文を記述する際は、コードブロック拡張版を利用する。
javascript へ値を渡すときは
‘(シングルクォーテーション)
“(ダブルクォーテーション)
いずれかで囲む必要があるらしい。
vaguely:【ASP.NET Core】Razorで遊んでみる(2018-11-08)
GitHub:nkjmlab/nkjmlab-utils-jpdatum
あちこちの記事で、ドライバの入手先として
公式:MySQL Community Downloads Connector/J
を挙げていたけど、どうやって DL してよいのかわからなかった。
同ページに、Recommended Windows Download: と書いてあるから
MySQL インストールディレクトリに同梱されているのかと思ったけど
エクスプローラで、mysql-connector-java で検索してみたものの、ヒットせず。
仕方がないので
Maven Repository:MySQL Connector/J 8.0.18
こちらの、Files:jar (2.2MB) から DL した。
2019-11-05 現在
mysql-connector-java-8.0.18.jar
として配置。
ビルド・パス の設定。
数多くサンプルがある中、下記が見やすかったので
不要な部分を削除して、そのままいただきました。
TASK NOTES:JavaでMySQLに接続してデータ操作をする(2015-04-14)
import java.sql.*;
public class MySQLConnector {
public static void main(String[] args) {
Connection con = null;
try {
// MySQLに接続
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
System.out.println("MySQLに接続できました。");
} catch (SQLException e) {
System.out.println("MySQLに接続できませんでした。");
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
System.out.println("MySQLのクローズに失敗しました。");
}
}
}
}
}
Statement stm = con.createStatement();
String sql = "select * from programing";
ResultSet rs = stm.executeQuery(sql);
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("取得結果 -> " + id + ":" + name);
}
Statement stm = con.createStatement();
String sql = "insert into programing values(4, 'Python'), (5, 'Go')";
int result = stm.executeUpdate(sql);
System.out.println("更新件数は" + result + "です。");
TASK NOTES:JavaでMySQLに接続してデータ操作をする(2015-04-14)
→とても見やすく、コードは、ほぼそのまま真似させていただきました。