カテゴリー: 未分類

  • [言語比較]Forall : 値の数だけ繰り返す

    [言語比較]Forall : 値の数だけ繰り返す

    Lotus Script 言語

    例:

    Forall 参照変数 In 複数値
     式
     Exit Forall ' Forall から抜け出します
    End Forall

    注意
    参照変数は Forall で使用する特別な変数で、Dim では宣言できません
    参照変数の値を書き換えると In に続く複数値が変更されます

    List : キーと値のペアで記憶する連想配列(辞書、ディクショナリー)を使います

    VbScript 言語

    For Each 変数名 In 複数値
     式
     Exit For ‘ For から抜け出します
    Next

  • [言語比較]Print : メッセージを表示したりログへ記録

    [言語比較]Print : メッセージを表示したりログへ記録

    Lotus Script 言語

    • Print 値
       ※改行は Chr (10) を使用します。プラットフォーム固有の改行へ変換されます

    注意
    クライアントで実行しているときはステータスバーへ表示し、サーバーで実行しているときはログ(log.nsf)へ記録します
    ステータスバーへ表示されるメッセージをログへ記録するには notes.ini に LogStatusBar=1 を設定します
    ログをテキスト形式のコンソールログ(console.log)にも記録するには notes.ini に Console_Log_Enabled=1 を設定します

    VbScript 言語

    コマンドプロンプトから実行する CScript モードのとき
    WScript.Echo 値
    WScript.StdOut.WriteLine 値
    WScript.StdOut.Write 値 ‘ 改行が追加されません
     ※標準出力へ表示されます

    ダブルクリックで実行する WScript モードのとき
    WScript.Echo 値
     ※ダイアログボックスが表示されます

    Lotus 式言語

    @StatusBar (値);

    注意
    クライアントで実行しているときはステータスバーへ表示し、サーバーで実行しているときはログ(log.nsf)へ記録します
    ステータスバーへ表示されるメッセージをログへ記録するには notes.ini に LogStatusBar=1 を設定します
    ログをテキスト形式のコンソールログ(console.log)にも記録するには notes.ini に Console_Log_Enabled=1 を設定します

  • [言語比較]Split : 区切記号で文字列を配列へ変換

    [言語比較]Split : 区切記号で文字列を配列へ変換

    Lotus Script 言語

    • 配列 = Split (文字列) ‘ 区切記号は空白になります
    • 配列 = Split (文字列, 区切記号)
    • 配列 = Split (文字列, 区切記号, 戻り値の要素数)
    • 配列 = Split (文字列, 区切記号, 戻り値の要素数, 評価方法)

    戻り値の要素数
    -1 : 指定なし。すべての区切記号で分割
    0 : 戻り値に値なし。戻り値の要素数は無し
    1 : 分割なし。戻り値の要素数は-1と同じ
    2 : 最初の区切記号だけで2つに分割。戻り値の要素数は2つまで
    3 : 最初と2つ目の区切記号だけで3つに分割。戻り値の要素数は3つまで

    評価方法
    0 : 大文字小文字、全角半角を区別します
    1 : 大文字小文字を区別しません
    4 : 全角半角を区別しません
    5 : 大文字小文字、全角半角を区別しません

    VbScript 言語

    • 配列 = Split (文字列) ‘ 区切記号は空白になります
    • 配列 = Split (文字列, 区切記号)
    • 配列 = Split (文字列, 区切記号, 戻り値の要素数)
    • 配列 = Split (文字列, 区切記号, 戻り値の要素数, 評価方法)

    評価方法
    0 : バイナリーモード
    1 : テキストモード(大文字小文字を区別しません)

    Lotus 式言語

    • @Explode (文字列); ‘ 区切記号は空白・カンマ(,)・セミコロン(;)になります
    • @Explode (文字列, 区切記号);
    • @Explode (文字列, 区切記号, 戻り値にブランクを含めるか?);
    • @Explode (文字列, 区切記号, 改行を区切り記号として扱うか?);

    区切記号
    区切記号の長さは1文字です
    区切記号に「ab」を指定すると「a」と「b」が区切記号になります

    戻り値にブランクを含めるか?
    False : (初期値)文字列の最初や最後に区切記号がある、または区切記号が連続しているとき、戻り値にブランクが含まれないようにします
    True : 戻り値からブランを取り除きません

    改行を区切り記号として扱うか?
    True : (初期値)改行を区切記号に含めます
    False : 改行は区切記号ではありません

  • [言語比較]Format : 数値を文字値へ変換

    [言語比較]Format : 数値を文字値へ変換

    Lotus Script 言語

    • 文字値 = Format (数値)
    • 文字値 = Format (数値, 形式)

    数値の形式の例
    ¥123,457 = Format (123456.789, {Currency})
    123,456.79 = Format (123456.789, {Standard})
    12345678.90% = Format (123456.789, {Percent})
    1.23E+05 = Format (123456.789, {Scientific})
    98% = Format (0.98, {#0%})
    ¥123,456. = Format (123456, {$#,##0.})
     ※桁区切記号(,)、小数点(.)、通貨記号($)はオペレーティングシステムで指定された記号に変換されます

    VbScript 言語

    • FormatCurrency (数値)
    • FormatNumber (数値)
    • FormatPercent (数値)
       ※オプションを色々と指定できます

    Lotus 式言語

    • @Text (数値);
    • @Text (数値; 形式);

    数値の形式の例
    123456.789 = @Text (123456.789);
    123456.79 = @Text (123456.789, {F});
    1.23E+05 = @Text (123456.789, {S});
    \123456.79 = @Text (123456.789, {C});
    123,456.789 = @Text (123456.789, {,});
    123,45678.9 = @Text (123456.789, {%});

  • [言語比較]Format : 日時値を文字値へ変換

    [言語比較]Format : 日時値を文字値へ変換

    Lotus Script 言語

    • Format (日時)
    • Format (日時, 形式)

    日時の形式の例
    2020/11/29 = Format (Now, {Short Date})
     ※オペレーティングシステムで指定された日付形式になります
    14:51 = Format (Now, {Short Time})
     ※オペレーティングシステムで指定された時刻形式になります
    2020/11/29 14:51:06 = Format (Now, {yyyy/mm/dd hh:mm:ss})
    11/29 11:06 = Format (Now, {mm/dd mm:ss})
    02:51:06 PM = Format (Now, {hh:mm:ss AM/PM})
     ※月と時はどちらもmmで指定しますが、hhのあとのmmは時と解釈されます
     ※スラッシュ(/)とコロン(:)はオペレーティングシステムで指定された記号に変換されます
     ※AM/PMと記載するとhhは01~12になり、AMまたはPMが付加されます
     ※am/pmと小文字で記載すると、amまたはpmが付加されます
    2020/11/29 14:51:06 = Format (Now, {General Date})

    VbScript 言語

    • FormatDateTime (日時)
       ※色々とオプションを指定できます

    Lotus 式言語

    • @Text (日時);
    • @Text (日時; 形式);

    日時の形式の例
    2020/11/29 14:51:06 = @Text (@Now);
    2020/11/29 14:51:06 = @Text (@Now; {S2});
    2020/11/29 = @Text (@Now; {S0});
    14:51:06 = @Text (@Now; {S1});
    14:51 = @Text (@Now; {T1});

  • [言語比較]Const : 変更されない値に名前を設定

    [言語比較]Const : 変更されない値に名前を設定

    C#

    Const 名前 = 値;

    Lotus Script 言語, VBScript 言語

    Const 名前 = 値

    注意
    設定できる値部分には、計算式や変数を書くことができません
    Const に限りませんが、標準で Lotus Script は Private になり、VBScript は Public になります

  • [言語比較]List,Listtag : キーと値のペアで記憶する連想配列(辞書、ディクショナリー)

    [言語比較]List,Listtag : キーと値のペアで記憶する連想配列(辞書、ディクショナリー)

    Lotus Script 言語

    • 宣言 : Dim 変数名 List As 型
    • 辞書? : True または False = IsList (変数名)
    • キーを追加 : 変数名 (キー) = 値
    • 既にキーが存在する? : True または False = IsElement (変数名 (キー))
    • 値を取り出す : 値 = 変数名 (キー)
    • すべて取り出す :
    Forall 参照変数 In 変数
     キー = ListTag (参照変数)
     値 = 参照変数
    End Forall
     ※参照変数は Forall で有効な特別な変数で Dim で宣言しません
     ※参照変数を更新すると In に続く変数の値が更新されます

    Forall : 値の数だけ繰り返します

    • キーを削除 : Erase 変数名 (キー)
    • キーをすべて削除 : Erase 変数名
       ※キーは文字値になります
       ※一般的に List は配列よりも多くの値を保存できます

    VbScript 言語

    • 言語として連想配列の機能がありません
    • Set 変数名 = CreateObject (“Scripting.Dictionary”) として、オブジェクトで連想配列を使います

    Lotus 式言語

    連想配列の機能がありません

  • [言語比較]ArrayAppend : 値をまとめて新しい配列へ

    [言語比較]ArrayAppend : 値をまとめて新しい配列へ

    Lotus Script 言語

    • 動的配列 = ArrayAppend (配列, 単数値または配列)

    エラーになる例
    ArrayAppend (単数値, 単数値または配列)

    動的配列とは
    Lotus Script の配列は2種類あります
    ひとつは Redim で値の数を変更できる動的配列、もうひとつは値の数を変えられない静的配列です

    既存の配列に値を追加する方法
    動的配列に入る値の数を変更するには Redim Preserve 配列名 (上限値) を使用します
    初期値では下限値が 0 となっているため、上限値を 1 にすると配列の値の数は (0) と (1) の2つになります
    Preserve キーワードを忘れると、配列の値が初期化されます
    新しく増やした部分に値を入れるには 配列名 (Ubound (配列名)) = 値 とします

    VbScript 言語

    Lotus Script 言語の既存の配列に値を追加する方法でおこないます

    Lotus 式言語

    • 配列 = 単数値または配列 : 単数値または配列
  • [言語比較]Abs : 数値を符号のない絶対値へ

    [言語比較]Abs : 数値を符号のない絶対値へ

    Lotus Script 言語, VbScript 言語

    • 数値 = Abs (数値)
    • Null値 = Abs (Null値)

    エラーになる例
    Abs (複数値)
    Abs (文字値)

    Lotus 式言語

    • 数値 = @Abs (数値)
    • 数の複数値 = @Abs (数の複数値)
  • [言語比較]If : 条件によって分岐

    [言語比較]If : 条件によって分岐

    Lotus Script 言語

    If 条件式 Then
     式
    Elseif 条件式 Then
     式
    Else
     式
    End If

     ※If ~ Elseif ~ Elseif と繰り返せます
     ※Elseif Else ともに使わないことができます

    If 条件式 Goto ラベル
    ラベル:
    式
    If 条件式 Goto ラベル Else 式
    ラベル:
    式

     ※If ~ Goto ~ Else ~ は改行せずに書きます

    VbScript 言語

    If 条件式 Then
     式
    Elseif 条件式 Then
     式
    Else
     式
    End If

     ※If ~ Elseif ~ Elseif と繰り返せます
     ※Elseif Else ともに使わないことができます

    Lotus 式言語

    • @If (条件式; 式; 式);
       『条件式; 式; 』は最大99回繰り返せます
    • @V2If (条件式; 式; 式);
       ※@V2If は旧バージョン用です、上位互換がある @If に書き換えることができます
  • [言語比較]ArrayGetIndex : 配列のどこに値が含まれているか調べる

    [言語比較]ArrayGetIndex : 配列のどこに値が含まれているか調べる

    Lotus Script 言語

    • 見つかった検索値の位置 = ArrayGetIndex (配列, 検索値)
    • 見つかった検索値の位置 = ArrayGetIndex (配列, 検索値, 比較方法)
       ※文字値へ変換してから比較します

    比較方法
    0 = 大文字小文字、全角半角を区別します
    1 = 大文字小文字を区別しません
    4 = 全角半角を区別しません
    5 = 大文字小文字、全角半角を区別しません
     ※規定は 0 ですが、規定を Option Compare で変更することができます

    Lotus 式言語

    • 見つかった検索値の位置 = @Member (検索値; 配列); ‘ 見つからなかったときは 0 を返します
    • True/False = @IsMember (検索値(文字値); 配列); ‘ 見つかったとき @True を返します
    • True/False = @IsMember (検索値(配列値); 配列); ‘ 検索値がすべて見つかったとき @True を返します
    • True/False = @IsNotMember (検索値(文字値); 配列); ‘ 見つかったとき @False を返します
    • True/False = @IsNotMember (検索値(配列値); 配列); ‘ 検索値のいずれかが見つかったとき @False を返します
       ※@IsNotMember は !@IsMember と一致しません
  • [言語比較]StrToken : 区切記号で区切られた文字値の一部を拾う

    [言語比較]StrToken : 区切記号で区切られた文字値の一部を拾う

    Lotus Script 言語

    • StrToken (文字値, 区切記号, 場所)
    • StrToken (文字値, 区切記号, 場所, 比較方法)

    場所
    0 のとき 1 とみなされます
    0 より大きいとき、左から何番目か?
    0 より小さいとき、右から何番目か?

    比較方法
    0 = 大文字小文字、全角半角を区別します
    1 = 大文字小文字を区別しません
    4 = 全角半角を区別しません
    5 = 大文字小文字、全角半角を区別しません
     ※規定は 0 ですが、規定を Option Compare で変更することができます


    えおか = StrToken ({あいう,えおか,きくけ}, {,}, 2)

    Lotus 式言語

    • @Word (文字値; 区切記号; 場所);

    場所
    0 のとき 1 とみなされます
    0 より大きいとき、左から何番目か?
    0 より小さいとき、右から何番目か?

  • [言語比較]ArrayUnique : 配列から重複を取り除く

    [言語比較]ArrayUnique : 配列から重複を取り除く

    Lotus Script 言語

    • ArrayUnique (1次元配列)
    • ArrayUnique (1次元配列, 比較方法)

    比較方法
    0 = 大文字小文字、全角半角を区別します
    1 = 大文字小文字を区別しません
    4 = 全角半角を区別しません
    5 = 大文字小文字、全角半角を区別しません
     ※規定は 0 ですが、規定を Option Compare で変更することができます
     ※配列が文字列のときに比較方法を選択できます

    Lotus 式言語

    • @Unique (配列)
       ※パラメータなしの @Unique は、呼び出すたびに異なる文字列を返します

    比較方法
     ※大文字小文字を区別します

  • [言語比較]New : クラスからオブジェクトをつくる

    [言語比較]New : クラスからオブジェクトをつくる

    New : クラスからオブジェクトをつくります

    Lotus Script 言語

    • Set 変数 = New クラス名 ()
    • Set 変数 = New クラス名 (値)
    • Set 変数 = New クラス名
       ※最初に実行される New 関数は値を受け取ることができます
       ※New クラス名へ値を渡さないときは括弧を省略できます

    VbScript 言語

    • Set 変数 = New クラス名
       ※最初に実行される Class_Initialize 関数は値を受け取ることができません
       ※クラス名のうしろに括弧をつけるとエラーになります

  • [言語比較]型名を調べる

    [言語比較]型名を調べる

    値の型名を調べます

    C#
    string 型名 = 値.GetType().FullName;
    Visual Basic
    型名 = Microsoft.VisualBasic.TypeName(値) // 戻り値はString
    Lotus Script 言語
    型名 = Typename(値) // 戻り値はString
  • [PHP]文字列を囲う記号は何ですか

     『”(ダブルコーテーション)』で囲まれた文字列に『$(ドルマーク)』を含むと、$より後ろの文字は変数名として扱われます。
    変数名を含まない文字列を書くときは、文字列を『’(シングルコーテーション)』で囲むことができます。

     記号を普通の文字だよっと指示するときは、『\(エンマーク)』を付けます。
    例えば。。。
    $(ドルマーク) → \$
    “(ダブルコーテーション) → \”
    ‘(シングルコーテーション) → \’
    \(エンマーク) → \
    ((開きかっこ) → (
    )(閉じかっこ) → )
    (改行) →\r\n

  • [PHP]CakePHPインストール

    [PHP]CakePHPインストール

    PHPをインストール

     CakePHPにはPHP本体が含まれませんし、CakePHPは普通のアプリのようにダウンロードしてインストールするものではありません。なんというか、CakePHPのテンプレートプロジェクトをつくるみたいな感じです。
     はじめに次のサイトからWindows用(x64スレッドセーフ、ZIP圧縮)のPHPをダウンロードします。

    https://windows.php.net/download

     ZIPファイルの中身を任意のフォルダに置きます。

     [システムのプロパティ]-[システムの詳細設定]-[環境設定]の[Path]に中身を置いたフォルダを追加します。

     php.iniを次のように変更します。この変更をしていないとComposerの命令でエラーが発生します。

    ;extension=intl
     ↓
    extension=intl

    Composerをインストール

     CakePHPはComposerを使ってインストールします。
     まずはComposerをインストールします。次のサイトからComposerをダウンロードします。

    https://getcomposer.org/download/

     ダウンロードのリンクがわからないときは次のリンクからダウンロードできます。

    https://getcomposer.org/Composer-Setup.exe

     ダウンロードが終わったら実行します。
    選択肢がでてきたら『Install for all users (recommended)』を選びます。
    チェックマークがあっても変更しません。

    Composerのアップデート方法

     Windowsコマンドプロンプトから次の命令を実行します。

    composer self-update

    CakePHPのプロジェクトをインストール

     まず新しくindex.phpを置く空のフォルダを作成します。このフォルダに何か入っていると失敗します。
     つぎにWindowsコマンドプロンプトを開きます。
    カレントディレクトリを作成したフォルダにするために次の命令を実行します。

    cd /d "フォルダのパス"

     Composerを最新に更新します。

    composer self-update

    CakePHPのプロジェクトをつくります。

    composer create-project --prefer-dist cakephp/app

     途中で『Set Folder Permissions ? (Default to Y)』と聞かれたら『Y』と入力します。

    エラーがでたとき

    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - cakephp/cakephp[4.4.0, ..., 4.4.11] require ext-intl * -> it is missing from your system. Install or enable PHP's intl extension.
        - Root composer.json requires cakephp/cakephp 4.4.* -> satisfiable by cakephp/cakephp[4.4.0, ..., 4.4.11].
    
    To enable extensions, verify that they are enabled in your .ini files:
        - D:\php\php.ini
    You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
    Alternatively, you can run Composer with `--ignore-platform-req=ext-intl` to temporarily ignore these required extensions.

     上のエラーでは『require ext-intl』と書かれています。このばあいはPHPをインストールしたフォルダにある『php.ini』を次のように変更します。

    ;extension=intl
     ↓
    extension=intl

     無事にCakePHPの開発を始められれば幸いです。

  • [Java]初めてApache Tomcatをセットアップ

    [Java]初めてApache Tomcatをセットアップ

     Javaでウェブサイトを作りたくて Windows クライアントに Apache Tomcat をセットアップしました。色々なサイトを参考にしましたので、わたしもまとめ情報を公開します。

     でもね、開発するだけなら Tomcat も HTTP Server も不要でした。詳しくはこちら↓で紹介しています
    Spring Initializrで始めるウェブ開発

    セットアップするソフトウエア

     ダウンロードしたファイルは次のものになります。今回はすべてZIPファイルをダウンロードしました。ダウンロード先のリンクを貼っておきます。

    JDK (Java Development Kit)

     まずはJDKからセットアップします。
     ダウンロードしたZIPファイル内の[jdk-23]フォルダを任意のローカルディスクに保存します。わたしはフォルダ名を[jdk]に変更しました。

     次にWindowsのシステム環境変数を設定します。Tomcatでも設定しますので、あとでまとめて設定しても良いです。
     [スタート]から[環境変数]を検索して、[システム環境変数の編集]を開きます。[システムのプロパティ]-[詳細設定]タブが開きますので、右下の[環境変数]ボタンを押します。

     [JAVA_HOME]を追加して値をJDKのフォルダ名にします。例えば D:\webservice\jdk になります。
     また[Path]にJDKのフォルダの中の[bin]を追加します。例えば D:\webservice\jdk\bin になります。

    Apache Tomcat

     JDKに続いて Apache Tomcat をセットアップします。
     ダウンロードしたZIPファイル内の [apache-tomcat-10.1.30] フォルダを任意のローカルディスクに保存します。わたしはフォルダ名を[tomcat]に変更しました。

     次に設定ファイルを更新します。
     Tomcatのフォルダにある conf\server.xml をメモ帳で開きます。
     <Connector port=”8080″ から /> までをコメントアウトして無効にします
     <Connector protocol=”AJP/1.3″ から /> までをコメントアウトから外して有効にします
     <Connector protocol=”AJP/1.3″ から /> の間に secretRequired=”false” を追記します。
     <Host から </Host> の間に <Valve className=”org.apache.catalina.valves.RemoteAddrValve” allow=”127.0.0.1″ /> を追記します。
     ファイルを保存して閉じます。

    (Windowsのみ)
     Tomcatのフォルダにある conf\logging.properties をメモ帳で開きます。
     java.util.logging.ConsoleHandler.encoding = UTF-8 行を java.util.logging.ConsoleHandler.encoding = SJIS に変更します。

     次にWindowsのシステム環境変数を設定します。
     [CATALINA_HOME]を追加して値をTomcatのフォルダ名にします。例えば D:\webservice\tomcat になります。
     また[Path]にTomcatのフォルダの中の[bin]を追加します。例えば D:\webservice\tomcat\bin になります。

     サービスとして起動するには、コマンドプロンプトを開いてトムキャットの bin ディレクトリへ移動して次のコマンドを実行します。

    service.bat install

     もし「[error] [ 3540] 指定されたサービスは既に開始されています。」と表示されたら、既にサービスに登録されていることを疑ってみます。サービス名はAから始まる「Apache Tomcat ・・・」です。

     次にWindowsサービスの一覧を開いて「Apache Tomcat ・・・」を見つけます。
     「スタートアップの種類」が手動になっていますので、自動へ変更します。

    Apache HTTP Server

     最後に Apache Http Server をセットアップします。
     ZIPファイル内の [Apache24] フォルダを任意のローカルディスクに保存します。わたしはフォルダ名を[apache]に変更しました。

     次に設定ファイルを更新します。
     Apache HTTP Serverのフォルダにある conf\httpd.conf をメモ帳で開きます。
     Define SRVROOT “パス” のパスを実際のパスに書き換えます。例えば D:/webservice/apache になります。
     次の2行の先頭にある#を取り除いて有効にします
    #LoadModule proxy_module modules/mod_proxy.so
    #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
     次の2行を追記します。
    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/

     ファイルを保存して閉じます。

     サービスとして起動するには、コマンドプロンプトを開いてアパッチの bin ディレクトリへ移動して次のコマンドを実行します。

    httpd.exe -k install

    MariaDB

     MySQLを使おうかMariaDBにしようか、色々と悩みました。色々と調べてみるとMySQLとMariaDBには際立った違いはなく、こだわらない人には「どちらでもよい」と感じられる程度の差異があるとの認識に達しました。今回はMariaDBを使うことにします。

     MSIファイルをダブルクリックしてセットアップを始めます。
     パスワードやインストール先パスを入力し、「Use UTF8 as default server’s character set」のチェックを入れます。

     これでMariaDBのセットアップが終わり、サービスとしてMariaDBが動作しています。

     次にWindowsのシステム環境変数を設定します。[Path]にMariaDBのフォルダの中の[bin]を追加します。例えば D:\webservice\MariaDB\bin になります。

    MariaDB Connector/J

     ダウンロードしたjarファイルを次の2つのフォルダに保存します。

    • jdk/lib
    • tomcat/lib

     Tomcatが開始されているときはファイル保存後に再起動します。

    開始(サービス登録していないとき)

     最初に Tomcat を開始します。
     Tomcat のフォルダにある bin\startup.bat をダブルクリックで Tomcat を開始します。
     [JAVA_HOME]に関するエラーが表示されたばあいは、環境設定のパスを再確認します。パスをコピペしてみると良いでしょう。

     次に Apache Http Server を開始します。
     Apache HTTP Serverのフォルダにある bin\httpd.exe をダブルクリックで Apache Http Server を開始します。

     最初に開始するときは Windows によって PC が保護されます。

     これを回避するために bin\httpd.exe ファイルのプロパティを開いて、[全般]タブの下側にある[許可する]にチェックを入れて[適用]します。これで bin\httpd.exe ファイルをダブルクリックで実行できるようになりました。

     ブラウザーを開いて http://localhost を開きます。Apache Tomcat の画面が表示されれば成功です。

    終了(サービス登録していないとき)

     開いている httpd.exe の画面の右上にある X をクリックして閉じます。
     次に Tomcat のフォルダにある bin\shutdown.bat をダブルクリックで Tomcat を終わらせます。

    https

     これでローカルPCにサーブレットとJSPの実行環境が整いました。
     本番環境では https が使われますので、http から変更する設定が必要になります。でもドメインが必要になりますので、ローカル環境では難しいとおもいます。別の機会に紹介できればいいなとおもいます。

    アプリを動かす設定

     Tomcat/webapps のフォルダに アプリ名(コンテキストルート)/WEB-INF のサブフォルダを作ります。例えば tomcat\webapps\hello\WEB-INF という風です。

    サーブレットファイルを配置

     サンプルのサーブレットファイル(なんとか.class)は WEB-INF フォルダに classes サブフォルダを作って保存します。

    web.xml を配置

     Tomcat/conf/web.xml を WEB-INF フォルダにコピペして、メモ帳で開きます。次のブロックを探しましょう。

    <servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
     ・・・
    <load-on-startup>1</load-on-startup>
    </servlet>

     ↑これを、↓このように書き換えて保存します。

    <servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>アプリ名(コンテキストルート)</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>

    設定反映

     Tomcatを再起動することで設定が読み込まれます。

    実行

     ブラウザーを開いてURL「http://localhost/アプリ名(コンテキストルート)」を開きます。
     無事に開きましたでしょうか?

    稼働確認プログラム

     稼働確認のためにつくったプログラムはこちらからダウンロードできます
    [Java]Tomcat-MariaDBサンプルプログラム

  • [Java]Spring Initializrで始めるウェブ開発

     Spring Bootのサンプルプログラムをつくってビルドしてみました
     OSはWindowsを使いました

     内容は Spring クイックスタートガイド に沿っています

    準備

     Javaが使えるようになっていることが必要です。JDKのセットアップの詳細はこちら↓に記載しています
    JDK (Java Development Kit) - [Windows]初めてApache Tomcatをセットアップ

     Maven, Tomcat, Spring Boot はインストール不要です

    Spring Initializrでひな形をつくります


     まずは Spring Initializr のサイト↓を開きます
    Spring Initializr

     次のような感じで設定します。
     Spring Boot のバージョンは、特に制約が無ければ括弧がないものの中で大きな数値を選びます。Packaging はウェブ用の『War』を選びます。Java のバージョンはお使いの環境にあわせます
     右側のDependencies で『Spring Web』を追加します

     設定が終わったら『GENERATE』ボタンを押します。ダウンロードが始まります

    ひな形を更新します

     ダウンロードしたひな形を展開します
     これからは、先の『Package name』に設定した値を『パッケージ名』、『Name』に設定した値を『ネーム名』と表記します
     展開したフォルダの中にある src\main\java\パッケージ名\ネーム名Application.java をメモ帳で開きます

    元はこんな感じです↓

    package パッケージ名;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class HelloApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(HelloApplication.class, args);
    	}
    
    }

    追記したものはこんな感じになります↓ 太字の行を追加します

    package パッケージ名;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class HelloApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(HelloApplication.class, args);
    	}
    
    	@GetMapping("/hello")
    	public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
    		return String.format("Hello %s!", name);
    	}
    
    }

     ファイルを保存して閉じます

    ビルドします

    次の手順でビルドと動作確認ができます

    1. Windowsコマンドプロンプトを開きます
    2. ひな形の中にある pom.xml が置かれたフォルダへ移動します
    3. 『mvnw clean package spring-boot:run』コマンドを実行します
    4. 『… : Started HelloApplication in …』と表示されて画面が止まるまで待ちます(コマンドは終了しません)
    5. ブラウザを開きます
    6. http://localhost:8080/hello へアクセスします
    7. ブラウザに『Hello World!』と表示されます

     Windowsコマンドプロンプトを終わるときはキーボードから「Ctrl + C」キーを押します

     Windowsバッチをつくるとこうなります

    cd /d "%~dp0"
    call mvnw clean package spring-boot:run
  • [Java]Apache Mavenインストールからプロジェクト作成まで

     片仮名で「メーベン」とするのが日本語っぽいでしょうか。色々なライブラリを使ったJavaのプログラムをビルドするためにあるそうです

    ダウンロード

     こちら(Apache Maven のダウンロード – Apache Maven Project)から圧縮ファイルをダウンロードできます。

    インストール

     解凍したら任意のフォルダに保存します

     次にWindowsのシステム環境変数を設定します。
     [スタート]から[環境変数]を検索して、[システム環境変数の編集]を開きます。[システムのプロパティ]-[詳細設定]タブが開きますので、右下の[環境変数]ボタンを押します。

    Windows環境変数

     [Path]にMavenのフォルダの中の[bin]を追加します。例えば D:\webservice\maven\bin になります。

    確認

     確認のために、次のようにMavenのバージョンを表示してみましょう

    mvn -v

    settings.xml設定

     Mavenによって自動ダウンロードされるファイルが保存されるフォルダを作成します。次にsettings.xmlを更新します

    1. お好きな場所にフォルダを作成します
    2. Maven\conf\settings.xmlをメモ帳で開きます
    3. キーボード Ctrl + F キーで『<localRepository>』を探します
    4. 『<!–』から『–>』まではコメントなので、それよりも外にフォルダを指定します。次のような行を追加します↓
    <localRepository>D:\webservice\maven\repository</localRepository>

     これで設定は終わりです

    プロジェクト作成

    Spring Initializrでひな形をつくる

     Mavenには次のようなSpring Bootのアーキタイプがありますが、10年も更新されず放置されているようです

    3213: remote -> org.springframework.boot:spring-boot-sample-tomcat-archetype (Spring Boot Tomcat Sample)


     Spring Initializrで『Project』を『Maven』にして、ひな形をつくると良いでしょう

    Mavenでひな形をつくる

     流れは次のようになります

    1. Windowsコマンドプロンプトを開きます
    2. プロジェクトをつくるフォルダへ移動します
    3. mvnコマンドを実行します

    コマンドは次のようなものです↓

    cd /d "プロジェクトをつくるフォルダ"
    mvn -B archetype:generate "-DgroupId=グループ名" "-DartifactId=プロジェクト名"

    注意事項

    • グループ名に「-(ハイフン、マイナス記号)」を含めるとビルド時にエラーになります。1行目のハイフンのところで「;(セミコロン)」がないと言われます

    実行結果

    次のようにフォルダとファイルがつくられます↓

    プロジェクトをつくるフォルダ
      プロジェクト名フォルダ
        srcフォルダ
          mainフォルダ
            javaフォルダ
              グループ名フォルダ
                App.javaファイル
          testフォルダ
            javaフォルダ
              グループ名フォルダ
                AppTest.javaファイル
        pom.xmlファイル

    App.javaはこんな感じです↓ コメントを取り除いています

    package グループ名;
    
    public class App 
    {
        public static void main( String[] args )
        {
            System.out.println( "Hello World!" );
        }
    }

    AppTest.javaはこんな感じです↓ コメントを取り除いています

    package グループ名;
    
    import junit.framework.Test;
    import junit.framework.TestCase;
    import junit.framework.TestSuite;
    
    public class AppTest 
        extends TestCase
    {
        public AppTest( String testName )
        {
            super( testName );
        }
    
        public static Test suite()
        {
            return new TestSuite( AppTest.class );
        }
    
        public void testApp()
        {
            assertTrue( true );
        }
    }

    pom.xmlはこんな感じです↓

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>グループ名</groupId>
      <artifactId>プロジェクト名</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>プロジェクト名</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>

    ビルド

     できたサンプルをビルドするには、プロジェクト作成時につくられたpom.xmlファイルがあるフォルダへ移動してから次のようにコマンドを入力します

    cd /d "プロジェクトをつくるフォルダ\プロジェクト名"
    mvn compile

    削除

     プロジェクトを削除するには、プロジェクト作成時につくられたpom.xmlファイルがあるフォルダへ移動してから次のようにコマンドを入力します

    cd /d "プロジェクトをつくるフォルダ\プロジェクト名"
    mvn clear
  • [Java]SPRING BOOT CLIインストール

     EclipseやVisual Studio Codeを使うばあいは不要です
     Spring Initializrを使っても良いかもしれません

     次のページの『手動インストール』部分にある圧縮ファイル(例えば spring-boot-cli-3.3.5-bin.zip)をダウンロードします
    Spring Boot のインストール - Spring

     任意のフォルダに保存します。

     [スタート]から[環境変数]を検索して、[システム環境変数の編集]を開きます。[システムのプロパティ]-[詳細設定]タブが開きますので、右下の[環境変数]ボタンを押します。

    Windows環境変数

     [Path]にSpring Boot CLIフォルダの中の[bin]を追加します。例えば D:\webservice\spring_CLI\bin になります

  • [MariaDB]データベースを作成してみます

    [MariaDB]データベースを作成してみます

    HeidiSQLで

     MariaDBをインストールするとHeidiSQLが付いてきます。このHeidiSQLを開いて新しくデータベースを作成してみます

    画面左側の [localhost] - [新規作成] - [データベース] を選びます

    [データベースを作成] 画面で、任意の [名前] をいれます
    [照合] は何を選んだらいいの?というのが今回のお話しの中心になります

    照合

    データを比較するときにどうするかというものです
    日本語対応のUTF-8にするのでutf8mb4にしますが、utf8mb4から始まるものがたくさんあります
    細かいことは列の設定でもできるそうなので、データベースの設定としてはutf8mb4_binにします
    binはバイナリ比較をするという意味で、アルファベットの大文字小文字や平仮名片仮名を別の文字として比較します

    データベースを作成するときに名前と照合が必要でした

    テーブル

    MariaDBはOS2/400と同様に、あらかじめを定義する必要がありそうです

    Notes/Dominoはデータベースのパスとタイトルを決めればOKで、基本の NoteID と UniversalID のふたつのテーブルは一律に自動作成されました
    こういうところがMariaDBとNotes/Dominoの違いなんだねと感じます

    先程作成したデータベース名のところでマウス右ボタンクリックして、[新規作成] - [テーブル] を選びます

    インターネットで見つけた『掲示板サーブレットを作成する』記事のデータベースならこんな感じになるのかなとサンプルを作ってみました

    コマンドプロンプトで

     Windowsコマンドプロンプトを開いて新しくデータベースを作成してみます
     例えば次のように操作できます

    mariadb -u ユーザー名 -p
    (パスワード入力)
    create database `データベース名`;
    show databases;
    use `データベース名`;
    create table `テーブル名` (`カラム名` 型 オプション,`カラム名` 型 オプション,・・・);
    show tables;
    select count(*) from `テーブル名`;
    
    drop table `テーブル名`;
    drop database `データベース名`;
    exit;

    データ定義 - MariaDBナレッジベース

    よくあるエラー

     MariaDB中のデータベース名やテーブル名などの前後は「`(バッククォート:Shift + @)」で囲みます。バッククォートを忘れると次のようなエラーが出ます

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '*' at line *

     名前によってはバッククォートを付けなくても大丈夫なこともあります。例えば先頭文字が英字でコマンドとは異なる文字列のばあいです

  • [Java]Tomcat-MariaDBサンプルプログラム

    [Java]Tomcat-MariaDBサンプルプログラム

     Java Servletの開発環境をつくったあと、テストするためにつくったJavaファイルとコンパイルバッチを無料ダウンロードできます

    ダウンロードファイルの中身は次のものです
    • HelloWorld.java
    • コンパイル(管理者として実行).bat
    コンパイルするときのファイルの配置は次のようにしています

    %CATALINA_HOME%\webapps\hello\WEB-INF
     web.xml
     src\HelloWorld.java
     classes\HelloWorld.class (コンパイル結果)

     『コンパイル(管理者として実行).bat』はどこにあっても構いません
     Tomcatのサービス名は『Tomcat10』としています

     『HelloWorld.java』内の{ユーザー名、パスワード}は実行環境にあわせて変更してください

    実行環境を構築する記事はこちらです

    [Windows]初めてApache Tomcatをセットアップ

    『HelloWorld.java』の動作

     ダウンロードできる『HelloWorld.java』はTomcatおよびMariaDBを使ったServletの開発環境が正しく構築できているか確認するためにつくりました

    プログラムがおこなうこと

     HelloWorld.javaは次の順番で動作し、ログをHTMLで表示します

    1. MariaDBに接続します
    2. 8桁の今日の日付でデータベースをつくります
    3. つくったデータベースに6桁の今の時刻でテーブルをつくります
    4. つくったテーブルに1行のデータを追記します
    5. テーブルの中身を取得します
    6. つくったデータベースを削除します
    7. MariaDBから切断します

  • [スマートフォン]SIMカードを抜き差しするとき電源は切る?

    [スマートフォン]SIMカードを抜き差しするとき電源は切る?

     iPhoneのSIMを交換することになって、方法をインターネットで調べたときのハテナ?をメモします。
     まとめサイトの記事のいくつかはSIMカードを交換するときはiPhoneの電源を切りましょうと書かれています。
     iPhoneのメーカーAppleの公式サイトでは、電源について記載がありません。電源を切る必要はなく、気にする必要はないということでしょう。ただしSIMトレイを引き出すときに差し込むピンを強く押し込まないように注意があります。

     インターネットではメーカーサイトと異なることが書かれていることがあります。私たちも気を付けないと…

    [Apple]iPhone の SIM カードを取り出す/入れ替える

  • [検索エンジン]ドメインを限定した検索

    site:ドメイン

     どこかの国のサイトから検索したいときは、その国のドメインのサイトから検索します。例えば次のようになります

    検索語 site:.uk

     日本の政府関係のサイトから検索したいときは次のようになります

    検索語 site:.go.jp
  • [Excel]ワークシート名を取得

     ウェブやモバイルのエクセルでは CELL関数 がサポートされていないそうです

    ワークシート名を取得する関数

     Excelのワークシート名をセルに表示するためにCELL関数を使います。CELL関数の戻り値にはファイルパスとワークシート名を含むため、ワークシート名を抽出する必要があります

    =CELL("filename")
     または
    =CELL("filename",A1)
    
     ↓
    "https://・・・/一部のフォルダ名/[ファイル名.xls]シート名"

     上の式にある『A1』は範囲を表します。現在のワークシートのA1セルという意味です。A2でもB1でもOKです。現在のワークシートのどこかを指していれば何でもOKです
     範囲を省略することもできますが、別のワークシートで同じ式が使われると、こちらの計算結果も別のワークシートのものと同じになるそうです。きっとキャッシュが絡んだ問題なのでしょう

    現在の Excel ファイルの名前、パス名、またはワークシート名をセルに挿入する - Microsoft

    CELL 関数 - Microsoft

    文字列からワークシート名を抽出

     CELL(“filename”)の戻り値に含まれる最後の角括弧(])より右側がワークシート名になります

    簡易に最初の角括弧より右側をとる式はこちら
    =LET(FN,CELL("FILENAME",A1),MID(FN,FIND("]",FN)+1,LEN(FN)))
    
    きちんと最後の角括弧より右側をとる式はこちら
    =LET(FN,CELL("FILENAME",A1),IF(ISERROR(FIND("]",FN)),"",MID(FN,FIND(決して使われない記号,SUBSTITUTE(FN,"]",決して使われない記号,LEN(FN)-LEN(SUBSTITUTE(FN,"]",""))))+1,LEN(FN))))
     ※注:「決して使われない記号」はパスやワークシート名に含まれない1文字

     きちんと最後の角括弧より右側をとる式はとても長いです。何をしているか説明します

    1. CELL(“FILENAME”,A1)」で、ワークシート名を含む値を取得して値の名前をFNにします
    2. IF(ISERROR(FIND(“]”,FN)),””,」で、FN値に角括弧が含まれていないときはブランクを返して終わります
    3. LEN(FN)-LEN(SUBSTITUTE(FN,”]”,””))」で、角括弧の数を調べます。角括弧をすべて取り除いたFN値の長さと、元のFN値の長さを比べることで、角括弧の数を調べています
    4. SUBSTITUTE(FN,”]”,決して使われない記号,角括弧の数)」で、一番最後の角括弧を決して使われない記号に置き換えます
    5. FIND(決して使われない記号,一番最後の角括弧を決して使われない記号に置換したFN値)」で、一番最後の角括弧の位置を特定します
    6. MID(FN,一番最後の角括弧の位置+1,LEN(FN))」で、一番最後の角括弧よりも右側を取得します

    感想

     こういった関数型の言語は「ローコード」とか言われて簡単に使えそうな雰囲気を醸し出すのに成功しています。でもこのように長いコードになると「読めない・理解できない」です。

  • [Excel]年齢の計算

    [Excel]年齢の計算

     年齢に関しては『年齢のとなえ方に関する法律』『年齢計算ニ関スル法律』と『民法 第百四十三条』に記載があります。
     生まれた日が0歳になりますので、次の誕生日は1歳になります。
     そして生まれた時刻は関係ありません。日付がかわる深夜00:00から誕生日が始まります。

     これらの法律の条文を読んでいる限りではわからなかったのですが、『年齢の計算に関する質問主意書 平成十四年七月二十五日』の1項には「法律上の満年齢計算では誕生日の前日に年齢を加算する」と記載があります。つまり4月1日生まれのひとは3月31日に年をとることになります。

     これを踏まえて、年齢を求めるエクセルの計算式は次のようになりました。

    =DATEDIF(誕生日-1,TODAY(),"Y")
     または
    =DATEDIF(DATE(誕生日の年,誕生日の月,誕生日の日)-1,TODAY(),"Y")
    日付に整数を加減算することの意味

     日時値の整数部分は日付を表し、小数部分は時刻を表します。例えば日時値から1を差し引くと前日になります。

  • [Windows]コマンドと同じ名前のbatを作らないこと

     Windowsでbatファイルをつくるとき、最も気を付けなければならないのはファイル名でしょう。
     ファイルの検索はカレントディレクトリが最優先されるため、命令を実行したつもりがバッチを実行してしまって???となることがあります。

  • [Linux]lsで取得したファイル一覧をTSV形式に変換して表計算ソフトに取り込みました

    [Linux]lsで取得したファイル一覧をTSV形式に変換して表計算ソフトに取り込みました

     lsコマンドでファイルの一覧を取得できますが、表計算ソフトに貼り付けられるようなテーブルではありません。使い勝手を良くするためにCSVまたはTSV形式のファイルに変換してみましょう。

     lsコマンドの結果は次のような規則があります。
     「/」で始まる行はディレクトリをあらわします。ここからディレクトリの情報が表示されるという意味です。
     「-(ハイフン)」で始まる行はファイルです。

     では、ノーツ(開発プラットホーム)のアクションボタンでCSVやTSVに変換するプログラムをコーディングしてみましょう。
     ※最初はC#で変換しようとしましたが、ノーツの手軽さに負けました。

     次は、Windows OS のドキュメントフォルダの source.txt ファイルを読み込んで result.tsv を作成するプログラムになります。コーディングの手間を減らすためにファイル名を固定にしています。

    Option Declare
    
    Const SOURCE_FILE = {source.txt}
    Const CHAR_SET = {UTF-8}
    Const RESULT_FILE = {result.tsv}
    Const PathPartition0 = {/}   ' 初期値
    Const PathPartition1 = {\}   ' 選択値
    
    Sub Click(Source As Button)
    	Dim RESULT_SEPARATOR As String
    	RESULT_SEPARATOR = Chr (9)
    	
    	Dim sourcefolder As String
    	Dim pathpartition As String
    	Dim sourcefilepath, resultfilepath As String
    	Dim scriptshell As Variant
    	Dim sourcefile, resultfile As Integer
    	
    	On Error Resume Next
    	Set scriptshell = CreateObject ({WScript.Shell})
    	sourcefolder = scriptshell.SpecialFolders ({MyDocuments})
    	On Error Goto 0
    	If 0 = Len (sourcefolder) Then
    		Print {MyDocuments フォルダが不明}
    		Exit Sub
    	End If
    	pathpartition = PathPartition0
    	If 0 < Instr (1, sourcefolder, PathPartition1) Then
    		pathpartition = PathPartition1
    	End If
    	sourcefilepath = sourcefolder + pathpartition + SOURCE_FILE
    	
    	
    	sourcefile = Freefile ()
    	Err = 0
    	On Error Resume Next
    	Open sourcefilepath For Input As sourcefile Charset = CHAR_SET
    	On Error Goto 0
    	If 0 < Err Then
    		Print {ファイルが見つかりません : } + sourcefilepath
    		Exit Sub
    	End If
    	resultfile = Freefile ()
    	resultfilepath = sourcefolder + pathpartition + RESULT_FILE
    	On Error Resume Next
    	Open resultfilepath For Output As resultfile
    	On Error Goto 0
    	If 0 < Err Then
    		Print {ファイルを作成できません : } + resultfilepath
    		Close sourcefile
    		Exit Sub
    	End If
    	
    	Dim sourceline, currentdirectory As String
    	currentdirectory = {}
    	Do Until True = Eof (sourcefile)
    		Line Input #sourcefile, sourceline
    		Select Case Left (sourceline, 1)
    		Case {/}
    			Select Case Right (sourceline, 1)
    			Case {:}
    				currentdirectory = Left (sourceline, Len (sourceline) -1)
    			End Select
    		Case {-}
    			Dim columns (1) As String
    			Dim position, beforeposition, column As Long
    			columns (0) = currentdirectory
    			beforeposition = -1
    			column = 1
    			For position = 1 To Len (sourceline)
    				Select Case Mid (sourceline, position, 1)
    				Case { }
    					If (beforeposition + 1) <> position Then
    						column = column + 1
    					End If
    					beforeposition = position
    				Case Else
    					If (beforeposition + 1) = position Then
    						If 8 = column Then
    							columns (1) = Mid (sourceline, position)
    							Exit For
    						End If
    					End If
    				End Select
    			Next
    			Print #resultfile, Implode (columns, RESULT_SEPARATOR)
    		End Select
    	Loop
    	Close resultfile
    	Close sourcefile
    End Sub

      表計算ソフトを開いて、メニューの[開く]から result.tsv を選択して、区切文字をタブに指定して読み込めば完了です。
     ls で / 以下すべてを取得しているとき、result.tsv の中身を表計算ソフトへコピペするとメモリ不足エラーが表示されることがあるため注意です。

  • [Windows]古いファイルをまとめて削除

     コンピューターのファイルには、動作記録(ログ)や破棄されなかった一時ファイル(ワーク)が含まれます。長く動いているコンピューターにはこれら多くのファイルが残ります。ほおっておくと記憶領域(ハードディスク)の多くを占めるようになるかもしれません。
     更新日時が古いものを削除するには、次のようなWindowsバッチ(*.bat)をつくって動かします。毎月とか毎年など定期的に動かせば安心ですね!

    forfiles /P "パス" /S /D -猶予日数 /C "cmd /C if false==@isdir (echo delete @file @fdate @ftime @fsize byte & del @path)"
    rem 『パス』の末尾は¥マークで終わらないこと!
    rem 『猶予日数』は0から32768の範囲で指定します

    forfiles | Microsoft Docs