20210116のJavaに関する記事は7件です。

[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)
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Qiita登録後の動作確認 初めての投稿 HelloWorld Java

Hello Worldを表示

Main.java
class Main {
public static void main(String[]args){
System.out.println("Hello World");
 }
}

これからの為に

Markdown書き方まとめ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Qiita登録後の動作確認 初めての投稿 HelloWorldを表示

Hello Worldを表示

Main.java
package com.test;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

これからの為に

Markdown書き方まとめ
MarkDown記法【初心者によるまとめ】

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

バイトコードと仮想マシーン

バイトコードと仮想マシーン

WindowsやmacOSなどのPC向けプログラムはスパコンでは動かない

パソコンとスパコンでは、CPUが理解できる命令(マシン語)が異なるから
しかし、Javaで開発したプログラムはPCでもスパコンでも同様に動く

これは、Javaコンパイラから出力されるバイトコードが特定のCPUに依存しない凡用的なマシン語であるため

Windows用のマシン語にスパコンで実行する場合にはスパコン用のマシン語に変換される

PCやスパコン中にある
「凡用マシン語を理解するコンピューター」がバイトコードを実行しているように見える

これが「Java仮想マシン(JVM)」という名前の由来

スパコン

一般的なコンピュータでは解くことが困難な大規模で高度な科学技術計算を高速に行うことができ、主に研究機関や企業などで使われている

パソコンの数十万倍の速度での計算処理を可能とする高性能なコンピューターのこと

バイトコード

Javaの仮想マシンのために用いられる実行可能なプログラムとしてのバイナリデータ
機械語ではなく、中間コードに分類

開発の流れで理解

コンパイル
- ソースコードはそのままでは実行できない
- コンパイルという処理を行い、ソースファイルをクラスファイルに変換する「.class」
- ソースコードの各命令をコンピューターが実行しやすいように変換したバイトコードというものが中に詰まっている
- コンパイルはコンパイラというソフトウェアを用いて誤りがあればコンパイルが失敗し誤りの箇所が指摘される

実行
- バイトコードはソースコードに比べ実行に適しているが、実行はできない
- インタリプタと呼ばれるソフトウェアに対してバイトコードの変換実行を依頼する
- インタリプタは内部にJVMという仕組みを持っていて結果としてコンピューターはソースコードで支持した通りに動作する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Java-バイトコードと仮想マシーン

バイトコードと仮想マシーン

WindowsやmacOSなどのPC向けプログラムはスパコンでは動かない

パソコンとスパコンでは、CPUが理解できる命令(マシン語)が異なるから
しかし、Javaで開発したプログラムはPCでもスパコンでも同様に動く

これは、Javaコンパイラから出力されるバイトコードが特定のCPUに依存しない凡用的なマシン語であるため

Windows用のマシン語にスパコンで実行する場合にはスパコン用のマシン語に変換される

PCやスパコン中にある
「凡用マシン語を理解するコンピューター」がバイトコードを実行しているように見える

これが「Java仮想マシン(JVM)」という名前の由来

スパコン

一般的なコンピュータでは解くことが困難な大規模で高度な科学技術計算を高速に行うことができ、主に研究機関や企業などで使われている

パソコンの数十万倍の速度での計算処理を可能とする高性能なコンピューターのこと

バイトコード

Javaの仮想マシンのために用いられる実行可能なプログラムとしてのバイナリデータ
機械語ではなく、中間コードに分類

開発の流れで理解

コンパイル
- ソースコードはそのままでは実行できない
- コンパイルという処理を行い、ソースファイルをクラスファイルに変換する「.class」
- ソースコードの各命令をコンピューターが実行しやすいように変換したバイトコードというものが中に詰まっている
- コンパイルはコンパイラというソフトウェアを用いて誤りがあればコンパイルが失敗し誤りの箇所が指摘される

実行
- バイトコードはソースコードに比べ実行に適しているが、実行はできない
- インタリプタと呼ばれるソフトウェアに対してバイトコードの変換実行を依頼する
- インタリプタは内部にJVMという仕組みを持っていて結果としてコンピューターはソースコードで支持した通りに動作する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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:8080

Apache 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 restart

Tomcat9の設定

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のルートページが表示されれば成功です。

別の端末のブラウザでも表示されるか確かめます。
アクセスがうまくいかない場合はポート開放、ファイアウォールの設定などを見直してみてください。

お疲れ様でした。

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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

参考サイト

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む