- 投稿日:2021-01-16T20:57:29+09:00
[JavaScript] たのしいタグ付きテンプレート文字列
これはなに?
タグ付きテンプレート文字列で色々遊んでみる記事です。
タグ付きテンプレート文字列とは?
文字列と言っていますが、文字列と言うよりは、関数の呼び出しかたです。
例えば、ある関数があったとしまして
function myFunc(){}普通はこのように呼び出しますが、
myFunc();タグ付きテンプレート文字列は、このように呼び出します。
myFunc``ここで使用した関数を特別にタグ関数と言います。
タグ関数に渡される引数
タグ関数に渡される引数は、文字列をパースした結果になります。
第1引数は配列です。式以外の部分文字列が入っています。
第2引数以降は可変長です。式を評価した結果になります。実際にどのような引数が渡されるのか確認するために、このような関数を定義しました。
function myTag(strings, ...keys) { console.log('strings = ', strings); console.log('keys = ', keys); }呼び出してみます。
myTag`abc`; /* 結果 : strings = (1)["abc"] keys = (0)[] */myTag`Java${100}Script`; /* 結果 : strings = (2)["Java" ,"Script"] keys = (1)[100] */myTag`pl ${1 + 1} mu ${2 * 2} di ${3 / 3}`; /* 結果 : strings = (4)["pl " ," mu " ," di " ,""] keys = (3)[2 ,4 ,1] */組み込み関数をタグ関数として使ってみる
こんなこともできますが、意味はないですねww
parseInt`abc` // 結果 : NaN parseInt`010` // 結果 : 10 encodeURI`\n` // 結果 : '%0A'色々な値を返すタグ関数
タグ関数はただの関数なので、Promiseを返したり、関数を返したりもできますね。
意味なくPromise返してみたり。
function myTag(strings) { return new Promise((resolv) => { resolv(strings.join('|'); }) }myTag`a${0}${1}b`.then(console.log); // 結果 : 'a||b'関数を返してみたり。
function myTag(strings) { return function(d) { return strings.join(d); } }console.log(myTag`a${0}${1}b`('---')); // 結果 : 'a------b'おまけ : TypeScriptでタグ関数を定義する
引数を
TemplateStringsArray
にします。function myTag(strings: TemplateStringsArray, ...keys: Array<any>): any { // (snip) }
- 投稿日:2021-01-16T17:44:06+09:00
Qiita登録後の動作確認 初めての投稿 HelloWorld Java
- 投稿日:2021-01-16T17:44:06+09:00
Qiita登録後の動作確認 初めての投稿 HelloWorldを表示
- 投稿日:2021-01-16T17:06:18+09:00
バイトコードと仮想マシーン
バイトコードと仮想マシーン
WindowsやmacOSなどのPC向けプログラムはスパコンでは動かない
パソコンとスパコンでは、CPUが理解できる命令(マシン語)が異なるから
しかし、Javaで開発したプログラムはPCでもスパコンでも同様に動くこれは、Javaコンパイラから出力されるバイトコードが特定のCPUに依存しない凡用的なマシン語であるため
Windows用のマシン語にスパコンで実行する場合にはスパコン用のマシン語に変換される
PCやスパコン中にある 「凡用マシン語を理解するコンピューター」がバイトコードを実行しているように見えるこれが「Java仮想マシン(JVM)」という名前の由来
スパコン
一般的なコンピュータでは解くことが困難な大規模で高度な科学技術計算を高速に行うことができ、主に研究機関や企業などで使われている
パソコンの数十万倍の速度での計算処理を可能とする高性能なコンピューターのことバイトコード
Javaの仮想マシンのために用いられる実行可能なプログラムとしてのバイナリデータ
機械語ではなく、中間コードに分類開発の流れで理解
コンパイル - ソースコードはそのままでは実行できない - コンパイルという処理を行い、ソースファイルをクラスファイルに変換する「.class」 - ソースコードの各命令をコンピューターが実行しやすいように変換したバイトコードというものが中に詰まっている - コンパイルはコンパイラというソフトウェアを用いて誤りがあればコンパイルが失敗し誤りの箇所が指摘される 実行 - バイトコードはソースコードに比べ実行に適しているが、実行はできない - インタリプタと呼ばれるソフトウェアに対してバイトコードの変換実行を依頼する - インタリプタは内部にJVMという仕組みを持っていて結果としてコンピューターはソースコードで支持した通りに動作する
- 投稿日:2021-01-16T17:06:18+09:00
Java-バイトコードと仮想マシーン
バイトコードと仮想マシーン
WindowsやmacOSなどのPC向けプログラムはスパコンでは動かない
パソコンとスパコンでは、CPUが理解できる命令(マシン語)が異なるから
しかし、Javaで開発したプログラムはPCでもスパコンでも同様に動くこれは、Javaコンパイラから出力されるバイトコードが特定のCPUに依存しない凡用的なマシン語であるため
Windows用のマシン語にスパコンで実行する場合にはスパコン用のマシン語に変換される
PCやスパコン中にある 「凡用マシン語を理解するコンピューター」がバイトコードを実行しているように見えるこれが「Java仮想マシン(JVM)」という名前の由来
スパコン
一般的なコンピュータでは解くことが困難な大規模で高度な科学技術計算を高速に行うことができ、主に研究機関や企業などで使われている
パソコンの数十万倍の速度での計算処理を可能とする高性能なコンピューターのことバイトコード
Javaの仮想マシンのために用いられる実行可能なプログラムとしてのバイナリデータ
機械語ではなく、中間コードに分類開発の流れで理解
コンパイル - ソースコードはそのままでは実行できない - コンパイルという処理を行い、ソースファイルをクラスファイルに変換する「.class」 - ソースコードの各命令をコンピューターが実行しやすいように変換したバイトコードというものが中に詰まっている - コンパイルはコンパイラというソフトウェアを用いて誤りがあればコンパイルが失敗し誤りの箇所が指摘される 実行 - バイトコードはソースコードに比べ実行に適しているが、実行はできない - インタリプタと呼ばれるソフトウェアに対してバイトコードの変換実行を依頼する - インタリプタは内部にJVMという仕組みを持っていて結果としてコンピューターはソースコードで支持した通りに動作する
- 投稿日:2021-01-16T16:53:20+09:00
【RaspberryPi】Apache2とTomcatを連携させてみる
概要
TomcatをラズパイのApache2と連携させ、外部に公開、アクセスできるようにする。
はじめに
この記事は、Raspberry Piの初期設定、ドメインの取得、Apache2の導入、ポート開放等が済んでいる前提の記事です。
お済みでない方は、先にそちらの設定を行うことを推奨します。使用環境
- Raspbian 10.7
- Apache 2.4.38
- Tomcat 9.0.31
環境構築
まずパッケージの更新をしておきます。
$ sudo apt update $ sudp apt upgradeパッケージの更新が終わったらTomcatのインストールを行います。
執筆時点(2021/01/15)ではtomcat9
が最新のようです。$ sudo apt install tomcat9インストールが完了したら正常に動作しているか確認します。
$ curl localhost:8080Apache Tomcatの情報がかえってこれば成功です。
tomcat9
はインストールした時点で起動時に自動的に開始するようになっています。各種設定
Apache2の設定
この記事では、AJPプロトコルを使ってApacheとTomcatを連携させていきます。
似たような方法にmod_jk
を用いた連携方法もありますが、余計なパッケージをインストールしたくないのでここでは説明しません。
Apache + mod_jk + 各種アプリケーションサーバの設定方法まず、AJPを利用するためのモジュールを有効にします。
$ sudo a2enmod proxy proxy_ajp
/etc/apache2/mods-enabled
ディレクトリを確認してモジュールが有効になっているか確かめます。
/etc/apache2/mods-enabled
ディレクトリの中に、proxy.conf
,proxy.load
,proxy_ajp.load
の3つがあれば成功です。次に、リバースプロキシの設定を行います。
root権限で/etc/apache2/sites-available
ディレクトリに設定用のtomcat_ajp.conf
を作成します。tomcat_ajp.conf<VirtualHost *:80> # サーバーの名前 ServerName example.com # サーバー管理者のメールアドレス ServerAdmin hogehoge@example.com # リバースプロキシの設定 <Location /> ProxyPass ajp://localhost:8009/ ProxyPassReverse ajp://localhost:8009/ </Location> </VirtualHost>設定ファイルが作成出来たら設定を有効にします。
$ sudo a2ensite tomcat_ajp同じドメインでほかにもサイトを公開している場合、ロケーションにアプリケーション名を設定するか別のドメイン・サブドメインを使って設定を分けるといいと思います。
ここでは、テストのためにほかの設定ファイルは読み込まれていないものとします。設定を反映させるためにApacheを再起動します。
$ sudo service apache2 restartTomcat9の設定
Tomcatの設定ファイルがあるディレクトリは、
/etc/tomcat9/
,/var/lib/tomcat9/conf/
の2つがありますが、優先されるのは/etc/tomcat9/
に含まれる方のようなので、そちらを編集します。
上手くいかない場合は、/var/lib/tomcat9/conf/
の方を変更してみてください。
/etc/tomcat9/server.xml
を編集していきます。
まず、直接Tomcatにアクセスができなくするため、デフォルトの8080ポートの部分をコメントアウトします。server.xml<!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -->
次に8009ポートの部分を編集します。コメントアウトが付いている場合は外してください。
AJPコネクタが信頼できないサイトと接続できないようにするためにsecretRequired
オプションを追記します。server.xml<Connecter protocol="AJP/1.3" address="::1" port="8009" secretRequired="false" redirectPort="8443" />設定を反映させるためにTomcatを再起動します。
$ sudo service tomcat9 restartポート8080が閉じているか確認します。
$ curl localhost:8080接続が拒否されれば成功です。
動作確認
まず、ラズパイ上のブラウザで設定したサーバー名にアクセスします。
Tomcatのルートページが表示されれば成功です。別の端末のブラウザでも表示されるか確かめます。
アクセスがうまくいかない場合はポート開放、ファイアウォールの設定などを見直してみてください。お疲れ様でした。
参考
- 投稿日:2021-01-16T10:29:08+09:00
Ubuntu(Linux)でのJava環境構築方法
TL;DR
UbuntuでJava環境を構築する際には、SDKMANを使用することがおすすめです。
apt経由でもJavaをインストールすることは可能ですが、自分でバージョンを選択したりバージョンを切り替えたりすることが難しいです。また、gradleなどのツールはリポジトリの追加が必要など、手間がかかってしまいます。
SDKMANを使用すれば、簡単に複数バージョンのJava(とJava関連のツール)をインストールし、バージョンを切り替えて使用することができます。SDKMANのインストール
公式サイトのインストール手順に沿って行います。
まず、以下のコマンドを実行します。SDKMANがダウンロードされ、インストールされます。
curl -s https://get.sdkman.io | bash
インストール完了後、新しいターミナルを開き、以下のコマンドでSDKMANにパスを通します。
(一度実行するだけでOK。.bashrcなどに記載する必要は無し。)
source "/home/ユーザー名/.sdkman/bin/sdkman-init.sh"
インストールに成功しているかは、以下のコマンドで確認します。バージョンが表示されれば、インストールは成功です。
sdk version
Javaのインストール
まず、以下のコマンドでインストール可能なJavaを確認します。
sdk list java
インストールは以下のようにして行います。(例:AdoptOpenJDKのJava11(LTS)をインストール)
sdk install java 11.0.9.open-adpt
別バージョンのJavaをインストールする場合も、同様にインストールします。
sdk install java 14.0.2.hs-adpt
Javaツールのインストール
AntやMaven、GradleなどのJavaツールもSDKMANでインストール可能です。
例えば、Gradleをインストールする場合、Javaと同様に以下のコマンドでインストールします。
sdk list gradle
sdk install gradle 6.8
参考サイト