投稿者: ume

  • [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から切断します

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

    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))」で、一番最後の角括弧よりも右側を取得します

    感想

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

  • [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
  • [Domino]業務の標準化・承継を推進する事例

    [Domino]業務の標準化・承継を推進する事例

    業務をひとからひとへ継承するときどうしていますか?

     業務の手順を普段から作成している場合だけでなく、引き継ぎが必要になってから文章を書くこともあるとおもいます。
     それらの文章はすべての担当者が共有する標準的な手順として扱われていますか?

     表計算やワープロなど数多くのファイルをファイルサーバーやシェアポイントなどへ保存していませんか?
     会社の資産として整理整頓できていますか?

    手順を管理するアプリ(データベース)

    それぞれの担当者がおこなう雑多な業務のやり方を常日頃から入力・更新しておくアプリがありました。
     創造的な業務はざっくりした手順で、機械的に進める業務は細かい手順を入力します。
     このアプリには会社全体でおこなっている業務の手順が集められて、これを参考に管理・合理化を進める部署では業務の合理化・標準化を進めます。

     直接ノーツドミノへ入力することでファイルが散らかることがありません。ファイルをひとつひとつ開いて中身を確認するような手間はありません。文章は素早く検索できます。

     将来、事業承継をすることになったときでも、会社の業務すべての手順があれば、引き継いだひとも安心です。

    仕組み

    文章を管理するデータベースソフトウエアであり、業務アプリを素早く開発する基盤でもある『ノーツドミノ』を使うと、このアプリをノーコード(プログラム開発不要・エンジニア不要)で開発できます。

  • [Domino]手作りDXを推進するノーツドミノ

    [Domino]手作りDXを推進するノーツドミノ

    ICTエンジニア不要でDXを推進する方法をお伝えします。強力な開発プラットフォームがICTエンジニアなしでDXを推進できるようにします。

     個々のデータを入力・表示する画面は文章を編集する方法の延長です。データ一覧を表示する画面は個人ビューやフォルダをつくる方法と同じです。
     このようにユーザーが使うことの延長線上にデザイン(設計)することがあるのがノーツの特徴になります。ノーツドミノを使っていれば自然にデザインに入っていけます。

     データ入力・表示するデザインは、ノーツドミノで表を含む文章を入力したことがあればスムースに作成できます。ノーツドミノに文章を作成する要領で作成し、追加でデータを入力するフィールドを配置することでデザインが完成します。ユーザーの文章作成画面とデザイン画面の使い勝手が同じなので、業務を一番知っているユーザーが自信を持ってDXを主導することができます。

     データを一覧表示するデザインは、個人ビューや個人フォルダーと同じものです。ノーコードから作成できます。

     このようにユーザーがデザインできるのがノーツドミノの利点です。しかしながらパフォーマンスを考慮に入れたデザインが必要になったら、総合的な知識があるノーツドミノのICTエンジニアにお任せください。

  • [Domino]分かり易い画面をもつノーツドミノ

    [Domino]分かり易い画面をもつノーツドミノ

    一定のルールにのっとったUI(ユーザーインターフェース)で、どのアプリも作られています。ひとつのアプリを使えるようになれば、他の何百というアプリも抵抗なく使えます。業務で使うアプリは操作方法の文書を読まなくても使えると嬉しいです。恰好がパッとしなくてもよいのです。無駄なく確実に使えるアプリであることが一番です。

     アプリはテンプレート(ひな形)から設定を変更するノーコードでつくることができます。小さいプログラムを入れたローコードや、ICTエンジニアに依頼してプロコードで新しいテンプレートをつくることもできます。テンプレートができあがれば、同様のアプリをいくつでもつくることができます。

     DXを推進するためにユーザーが自分でアプリをつくっていくことができます。ユーザーがDXを推進できるというのがノーツの特徴ですが、ノーコードでつくられたアプリができることは限られます。
     ユーザーによってアプリがたくさんつくられますが、管理用ソフトウエアで制御することができます。ユーザーがICT部門に権限を与えてくれなくても、ICT部門は権限を取得できます。そっと見守るように管理することもできます。

     セキュリティ設定を制御することでICT部門が独占的にアプリを開発・リリースできるようにすることができます。一般的にアプリが高度化・複雑化します。
     個々のユーザーが求める情報を優先的に表示するようにするためにはICTエンジニアの技術力と経験が必要になります。ひとによって見えるものが違うというのは完成イメージを想像するのが難しいです。思いやりも必要ですね。

     アプリ間やシステム間の連携をするようになるとノーツドミノってイイよねってなります。

  • [Domino]欲しい情報が最初に目に入るノーツドミノ

    [Domino]欲しい情報が最初に目に入るノーツドミノ

    私が作成したもの、私のチームが作成したもの、とにかく私に関係あるもの、これらの情報が真っ先に見える情報システムって素敵ですよね。必要な情報を探さない、そこにある、私は大好きです。

     個人ビューは誰でもノーコードから作成できます。アクセスする権限さえあれば、私が求める形式で、私が見やすい並び順で、私が見たいものだけをノーコードやローコードでいつでも表示できます。情報エンジニアにしか扱えないプロコードは必要ありません。

     『購読』という機能を使えば、私がウォッチする範囲のデータが投稿または更新があると通知してくれます。これはノーツクライアントから誰もが使えるプロコード不要の機能です。

  • [Domino]ノーツドミノでつかう言語

    [Domino]ノーツドミノでつかう言語

     ノーツ/ドミノ(Notes/ Domino)で使われるおもな言語にはロータススクリプト(Lotus Script)とロータス式言語(Lotus 式言語やアットマーク関数と呼ばれます)があります。サーバーサイドではJavaも使えます。ロータススクリプトもロータス式言語もコードを保存するときに自動でコンパイルされますので、普段はコンパイルを意識することはありません。
     ロータススクリプトは VBScript に似たところがある言語ですが、後発だけあってエラー処理や変数の型などはかなり改善されて使いやすくなっています。Visual Basic にそっくりです。

     ノーツ/ドミノをウェブ関係で使うと、JavaScriptやJavaを使います。表示まわりではHTML/CSSも使うでしょう。

     Windows上でドミノサーバーを動かしていると、管理用のプログラムを C# や VBScript で書くことがあります。C#コンパイラ(csc.exe)は.NETの実行環境に含まれています。VBScriptはWindows標準コマンドWScriptやCScriptからソースコードをコンパイルせずにコマンドプロンプトやマウスダブルクリックで実行することができます。

  • プログラムをつくれるようになる方法

    プログラムをつくれるようになる方法

    プログラムをつくりませんか?コンピューターの記録やファイルやデータを整理するときに、ちょちょいとプログラムをつくってはお仕事を片付けるのに役立ちます。
     プログラムをつくる能力を身につけるために、具体的にはどんな行動があるでしょうか?…何からはじめたらいいでしょうか?
     プログラムをつくれなくて困っているひとをみかけます。いったい何が最初のプログラムをつくる障害になっているのでしようか。一緒に考えてみましょう。

    プログラムとは?

     プログラムを作れるようになるために、私がおすすめする最初の行動は『プログラムという言葉の意味を調べる』ことです。
     孫子さんがむかし『敵を知り己を知れば百戦あやうからず』と書いています。教科書に長年掲載されているとおもいますので、孫子さんを知っているひとは多いのではないかとおもいます。孫子さんも言っているし…ということで、プログラムという言葉の使用例をネットで検索し、プログラムという言葉の意味を国語辞典や英和辞典などの辞書で調べましょう。

    プログラムという言葉の使用例

     フィギュアスケートのプログラム、運動会のプログラム、海外留学のプログラム、ポイントやマイレージのプログラム、プログラム細胞死、観光立国実現に向けたアクション・プログラム、…コンピューター関連ではない用例がたくさんありますね。

    プログラム(Program)の意味

     番組、予定、計画をたてること、目録、演目、手順を指示したもの、前もって書いたもの、…
     いろいろな意味がでてきました。

    プログラムとはつまり…

     プログラムとは『方法や順番を考えることやその結果できあがったもの』と定義しましょう。何かの記録であって、次の行動に役立てるつもりがないものは、手順を記載してあってもプログラムではないでしょう。
     生活の場でさがしてみると、目的地へ約束の時間に到着するように電車の時間を調べることはプログラムでしょう。持ち物のリストをつくることもプログラムですね。
     料理のレシピもプログラムですが、レシピを読みながら料理をつくることはプログラムを利用しているだけでプログラムではありません。レシピなしにその場で考えながら料理をつくることはプログラムでいいでしょう。

    つくる前の準備

     プログラムを『方法や順番を考えることやその結果できあがったもの』と定義したので、ぢゃあトレーニング…といきたいのですが、そのまえに基礎能力や心身の状態について考えていきましょう。これはとても大切なことで、きちんとやらないと苦労するとおもいます。

    十分な睡眠をとる

     睡眠を十分にとることは最も大切です。私の経験では、睡眠不足のときに書いたプログラムは翌日修正するよりも、破棄して書き直したほうが時間の節約になるくらいです。睡眠は頭脳労働の質に大きな影響を与えます
     睡眠中には記憶の整理がおこなわれるそうなので、効果的に学ぶために十分な睡眠をとりましょう。
     夜の部屋は薄暗い電球色にしたり、パソコンやスマートフォンを使わないようにしたり、眠れないだろうなぁとおもっても毎日同じ時刻に寝る時間を確保しましょう。睡眠に割く時間は今までよりも多めにしましょう。1週間くらい同じような生活をしていると頭がさえてくるとおもいます。

    軽い運動をする

     プログラムをつくることは頭脳労働であると考えます。頭を働かせるための習慣をおこなうことが有効です。お茶やコーヒーなどからカフェインを接種することは有効です。また通勤や昼休みに身体を動かすことも有効です。
     勤務の前に軽い運動を強制するという観点では、公共交通機関を使って通勤することは理にかなっていると感じます。

    辞書をつかう

     この文章は日本語で書いています。ブラウザーの機械翻訳をとおして日本語ではない言語で読むひとがいるかもしれませんが、日本語で読まれることが圧倒的に多いでしょう。
     誰かの知恵を教えてもらうには言葉を使うことが多いとおもいます。言葉を気にかけることはとても大切です。教えるひとは知恵を言葉に変換して伝えます。教わるひとは言葉を知恵に逆変換します。この2回の翻訳の出来によって伝わる知恵の質に影響を与えます。
     教えるひと教わるひとの言葉のひとつひとつの意味が違っていたとしたら知恵が正しく伝わりません。日本語を英語に翻訳したものを日本語に再翻訳するとデタラメな文章になることがあります。これに近いことを日常的な言葉のやりとりでおこなっていたとしたら、知恵を教えてもらうのはとても難しいことです。
     少しでも知恵を正しく受け取るには国語辞典が役に立ちます。よく理解できなかったことや、何で?と感じた言葉をひとつひとつ国語辞典で確認するとよいでしょう。言葉の知らなかった意味を発見することがあるかもしれません。

    シンプルなツールを用意する

     短期間でプログラムをつくれるようになろうとしていますので、あらたに使い方を覚えなければならない高機能なツールは最小限にしましょう。Windowsのメモ帳でプログラムをつくれるならそれでじゅうぶんです。高機能エディターや統合開発環境の使いかたを覚えるのは時間の無駄でしかありません
     ツールを選ぶことができるのなら心にとめておくとよいでしょう。

    評価を聞く耳を持つ

     こっそりプログラムをつくるのでなければ、誰かに見せたり使わせたりするとおもいます。仕事でプログラムをつくるのなら、良い評価を得ることがある反面、安定動作しなければ批判を浴びることもあるでしょう。あなたが全力で創り上げたプログラムは多くのひとから評価・批判されることになります。
     プログラムに限らず、仕事で創作をすると様々な評価を聞くことになります。評価されることを避けながら創作を続けるのは難しいとおもいます。評価・批判されることは、あなたの創作物に興味を持ったということです。前向きに考えて創作に生かしましょう。

    ちからを伸ばす方法あれこれ

     目的を達成する方法はひとつとは限りません。『方法や順番を考えること』はプログラムそのものです。さあプログラムをつくるちからを伸ばすプログラムを一緒に考えましょう。

    テレビをみる

     子ども向けの教育番組は考えるちからを伸ばすためにいろいろなことをやってくれます。おとながみても楽しい番組もあります。例えば次の番組は制作にちからがはいっていて、気づかせてくれるものがあるとおもいます。

    ピタゴラスイッチ - 4~6歳児を対象にした「考え方」を育てる番組

     子ども向けの教育番組で、映像をたくさん使って教えてくれます。おとながみても楽しいTV番組でしょう。

    積み木をする

     小さい子と一緒に積み木で遊びましょう…とは言いません。
     コンピューターのプログラムは積み木と共通するところがあります。コンピューターの回路はごく単純な計算やデータのコピーといった基本的なことしかできません。それらを組み合わせることで複雑なことをやっています。
     実際にプログラムをつくる場面でも、プログラム言語が用意した言葉を使って新しい言葉をつくります。基本的なものを組み合わせて新しいものをつくりあげるところは積み木と共通します。
     いろいろなものを組み合わせる習慣をつけることはプログラムをつくるために役にたつとおもいます。

    イメージトレーニングする

     プログラムをつくることが上達への近道だとおもいますが、つくれないひとに向かって『まずはつくってみたら?』というのはおかしいです。まずはイメージトレーニングをしてみましょう。プログラムをつくっているイメージを膨らませることならできるかもしれませんね。
     とても短いプログラムはお約束の部分を除くと1行から数行になることが多いとおもいます。ハローワールドとメッセージを出力するだけのプログラムを見かけることがあります。いつも同じように書くお約束の部分はコピペできるようにメモっておけばいいでしょう。

     それではハローワールドとメッセージを出力する部分を詳しく見ましましょう。Lotus Scritでは『Print “ハローワールド”』、 Lotus 式言語では『@StatusBar (“ハローワールド”)』、 VBScriptでは『WScript.Echo “ハローワールド”』、 C#では『using System; Console.WriteLine(@”ハローワールド”);』、 C++では『#include <iostream>; using namespace std; cout << “ハローワールド” << endl;』

    のようになります。
     はい、見てわかるとおもいますが言語によってバラバラです。そこはよしとして、注目すべきなのは 命令を使うためのお約束、命令、ハローワールドを囲う記号、ハローワールド、行末のお約束 というようにプログラムは細かいものの組み合わせになっていると気づくことが大切です。細かいものを組み合わせて行をつくり、行を組み合わせてひとまとまりの章になります。その全体がアプリケーションという単体で動くプログラムになります。
     最初からスラスラと作っていけるものではないので、一行つくるのに何時間もかかったり、ひとつの機能をつくるのに何日もかかったとなげく必要はありません。それが普通だとおもってください。

    知識を得る

     インターネット、本やYouTubeなどから知識を得ることができます。でも知識を得ることに熱中しないでください。方法や順番を考えるちからを伸ばすことがもっとも大切なことで、知識を得ることは目的から外れます。

     考えてみてください、知識があればプログラムをつくれるようになるでしょうか?私はそのようにおもいません。
     すでになんらかのプログラムをつくったことがあるひと、すでにプログラムをつくる能力が備わっているひとであれば、別の言語や環境でプログラムをつくるときに言語の特徴やエディターの使い方などの新しい知識を得る必要があるでしょう。こういうときでも言語ひとつひとつの関数を覚えることはしません。使う関数の詳細な仕様は繰り返し調べるようにしています。記憶ってあまり正確ではないと感じています。

    そのほか

     ほかにはどんな方法があるでしょうか?
    皆さんも考えてみてください…

     わたしが教えてきた経験から言わせていただくと。。「プログラムをつくれるようになりたい」という強いおもいから、基本情報技術者試験のような検定試験の勉強をする方向へちからを集中してしまったひとは想いを遂げられない。。。と感じています。 もしかしたら壁が高すぎたから試験勉強に逃げたのかもしれませんが本当のところはわかりません。

     プログラムをつくれるようになるために細部にまで目を向けて繰り返し練習することが大切です。勉強とはちょっと違うと感じています。

     近ごろはブラウザにAIの回答がでてきますね。でもプログラミングに関しては参考にできないと感じます。表面上の文章はきちんとしていますが、論理的思考で推論していない感じが強く感じられてモヤモヤします。 「知識が豊富だけれど経験がないひと」という比喩で伝わりますでしょうか。

  • [Excel]年齢の計算

    [Excel]年齢の計算

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

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

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

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

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

  • [Java]パッケージjakarta.servletは存在しません

     javacでコンパイルするとき『-classpath “%CATALINA_HOME%\lib\servlet-api.jar”』を追加してみましょう。

     なお『import javax.servlet』は『import jakarta.servlet』に変更になっています。

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

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

  • [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]初めて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サンプルプログラム

  • [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 の中身を表計算ソフトへコピペするとメモリ不足エラーが表示されることがあるため注意です。

  • [CGI]サーバーをいたわってキャッシュを付けました

    [CGI]サーバーをいたわってキャッシュを付けました

     ユーザーのブラウザーから要求がある度にCGIを動かしていたらサーバーの生産性が低いです。特にカミュプリィの『西暦・年齢・和暦・干支対照表』CGIは1年に1回更新すればよい表ですので、要求の度にCGIを動かしていたら、、、うん、無駄よね。

    CGIの対応

     CGIですので実行結果は標準出力へHTMLの内容を出します。また、HTMLの内容をそのままキャッシュファイルにも書き出します。こうしてCGIを動かす度にキャッシュファイルが更新されるようにしました。

    HTTPサーバーの対応

     CGIを置いたディレクトリに「.htaccess」設定ファイルを作成します。URLの指定がディレクトリ止まりであれば、キュッシュファイルを優先して開くようにしました。
     次の例では「まるまる.html」キュッシュファイルが優先で、Pythonで書いた「まるまる.cgi」CGIが劣後になりましす。

    DirectoryIndex まるまる.html まるまる.cgi

     これで、普段はCGIを置いたディレクトリを呼び出すと、「まるまる.html」キャッシュファイルがクライアントに渡されます。
     キャッシュファイルがないときは「まるまる.cgi」CGIが呼び出されます。キャッシュファイルがないのは最初だけなので、ディレクトリを呼び出してCGIを実行するのは最初の1回だけですね、この設定は不要かもしれません。

    OSの対応

     タイマーで定期的にプログラムを開始できるクーロン(cron)で、毎年1月1日に「まるまる.cgi」CGIを呼び出します。

    管理者の対応

     年号が変わったときは、年号ファイルの設定を変更してから、CGIのファイル名を含めたURL「https://www.commuply.co.jp/tools/wareki/まるまる.cgi」をブラウザーから呼び出します。
     CGIのプログラム内容を変更したときもCGIのファイル名を含めたURLをブラウザーから呼びます。

  • [CGI]わかりやすさを目指して

    [CGI]わかりやすさを目指して

     カミュプリィの『西暦・年齢・和暦・干支対照表』CGIを書くときに気を付けたところは「コードのわかりやすさ」です。

    どのようにわかりやすくしたか?

     CGIはHTMLの内容を出力するプログラムです。表示された『西暦・年齢・和暦・干支対照表』でマウス右ボタンをクリックして「ページのソースを表示」で表示されたものを出力する処理をおこなっています。

     それならCGIが出力するHTMLの内容をそのままファイルに保存しておくのが、もっとも全体がわかりやすくなるとおもい、ざっくり次の内容でテキストファイルを保存しました。

    <!doctype html>
    <html dir="ltr" lang="ja" prefix="og: https://ogp.me/ns#" >
    <head>
    	<meta charset="utf-8">
    	<title>西暦・年齢・和暦・干支対照表</title>
    </head>
    <body>
    	<table>
    		<caption>西暦・年齢・和暦・干支対照表</caption>
    		<thead>
    			<tr>
    				<th>西暦</th>
    				<th>年齢</th>
    /* HEADER CREATE */
    				<th ID="ETO">干支</th>
    			</tr>
    		</thead>
    		<tbody>
    /* TABLE CREATE */
    		</tbody>
    	</table>
    <div class="indent">
    </div>
    </body>
    <footer>
    /* COPYRIGHT CREATE */
    </footer>
    </html>

     『/* HEADER CREATE */』『/* TABLE CREATE */』『/* COPYRIGHT CREATE */』部分のHTMLが足りていませんので、干支や和暦の情報をもとにCGIが補います。CGIには静的なHTMLが一切含まれないことで、読みやすくなっています。

    甲子 (きのえね)
    乙丑 (きのとのうし)
    丙寅 (ひのえとら)
     ・・・
    2019/05/01,令和
    1989/01/08,平成
    1926/12/25,昭和
     ・・・

     このCGIはPythonで作成しましたが、他の言語でも同様の工夫はできるのではないかとおもいます。

  • [Linux]ファイル一覧を取得

    [Linux]ファイル一覧を取得

    Linux系でファイルとディレクトリの両方を取得するには次のコマンドを実行します

    ls -a -l -R --time-style=long-iso /

    すべてのファイルを取得するため「/(ルートディレクトリ)」を設定します

    出力結果をファイルに書き出すには次のようにします

    ls -a -l -R --time-style=long-iso / 1>ファイル名 2>&1

    「2>&1」でエラーもファイルに書き出します

    ファイルだけを取得したいときは次のようにします

    ls -a -l -R --time-style=long-iso / | grep -v "^d" | grep -v "^l" | grep -v "^c" | grep -v "^b" | grep -v "^total " >ファイル名

    「grep -v」で先頭文字が{d, l, c, “total “}行を除外します
    grepを付けると「2>&1」が無効になってエラーが画面表示されるみたいです

    lsの行頭の記号の意味

    d : ディレクトリ
    l : シンボリックリンク
    c, b : デバイスファイル
    – : ファイル

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

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

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

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

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

  • [Windows]パスワードを変更する

     Windowsでパスワードを変更しようとするとき、通常は Ctrl + Alt + Delete キーを押してパスワード変更の画面をだします。

     リモートデスクトップからパスワードを変更するには Ctrl + Alt + End キーを押します。キーがかぶらないように工夫されていますね。

  • [MariaDB]開発環境をととのえる

    はじめに

     Windowsに Apache HTTP Server、PHP、MariaDB をインストールして開発環境を構築してみます。
     最初は XAMPP をインストールしたのですが、あるとき動かなくなって、どうしたら復旧するのかわからなくなりました。「こんなことになるのなら個別にインストールしたほうがわかりやすくない?」とおもい、個別にインストールとセットアップをすることにしました。

    PHP(ピーエイチピー)

     最初に PHP をインストールします。PHP は次のリンクから、スレッドセーフのZIPをダウンロードします。ZIPファイルの中身をお好きなところへコピーします。

    https://windows.php.net/download

     『php.ini-development』ファイルをコピーして『php.ini』にします。
     そして『php.ini』の次の各行の先頭の『;』を取り除きます。

    • ;extension=pdo_mysql
    • ;extension_dir = “ext”

     Windowsの[設定]-[システム]-[バージョン情報]-[システムの詳細設定]で、[システムのプロパティ]-[詳細設定]タブを開き、下のほうにある[環境変数]ボタンを押します。[システム環境変数]の[Path]を編集して、PHP のファイルをコピーしたフォルダ(例: C:\PHP)を追加します。

    Apache HTTP Server(アパッチ)

     インストールファイルを次のリンクからダウンロードします。

    https://www.apachelounge.com/download/

     ダウンロードした ZIP ファイル中の『Apache○』フォルダごと、お好きなところへコピーします。
     そして『Apache○\conf\httpd.conf』の次の各行のように更新したり追加したりします。

    • Define SRVROOT “○:/Apache○”
    • ServerName localhost:80
    • Options FollowSymLinks
    • DirectoryIndex index.php index.html
    • LoadModule php_module (PHPのApache用DLLファイルのパス、例: C:/PHP/php8apache2_4.dll)
    • <FilesMatch “.php$”>(改行)AddHandler php-script .php(改行)AddType application/x-httpd-php .php(改行)</FilesMatch>
    • PHPIniDir “(PHPのフォルダ、例: C:\PHP)”

     設定が終わったら Apache を Windowsサービスに登録します。管理者モードでWindowsコマンドプロンプトを開きます。そして Apacheの bin ディレクトリへ移動するコマンド(例: CD /D ○:\Apache○\bin)を実行します。続けて『httpd.exe -k install』でサービスに登録されますが、まだサービスは開始されていません。

    MariaDB(マリアディービー)

     インストーラーを次のリンクからダウンロードします。

    https://mariadb.com/downloads/

     インストーラーを実行して、例えば次のように選択・入力していきます。インストールが完了すると、自動でサービスに登録され、開始されます。

    • New root password: (開発するときは指定しないほうが楽)
    • Use UTF-8 as default server’s character set: 選択

     次に『MariaDB\data\my.ini』を開いて確認します。『utf8mb4』は4バイト対応のUTF-8です。

    [mysqld]
    character-set-server=utf8mb4
    skip-character-set-client=handshake
     ・・・
    [client]
     ・・・

    おわりに

     最後にWindowsを再起動します。
     Apache のドキュメントルートは『○:\Apache○\htdocs』になります。このフォルダに *.php ファイルを置いて、ブラウザーから『http://localhost/○.php』を呼び出してみましょう。

  • [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の開発を始められれば幸いです。

  • [C#]List<型>

    using System.Collection.Generic;
    List<型> 変数名 = new List<型>();
    変数名.Add(値); // 追加
    変数名[位置(0-)] = 値; // 更新、追加はできない
    変数名.RemoveAt(位置(0-)); // 削除
    値(true==削除した) = 変数名.Remove(値); // 削除
    変数名.Clear(); // すべて消去
    値 = 変数名[位置]; // 取得
    変数名.Sort(); // 並び替え
    件数 = 変数名.Count;
    位置 = 変数名.IndexOf(値); // -1 == 含まれない
    型[] = 変数名.ToArray(); // Listから配列へ
    foreach(var 一時変数名 in 変数名) { 値 = 一時変数名; }

  • [Windows]Show-NetFirewallRule

     ファイアーウォールの設定を全量表示するときに、PowerShellでShow-NetFirewallRuleコマンドを使います。

     Show-NetFirewallRuleコマンドに先立ってDateコマンドを実行すると、Show-NetFirewallRuleの出力内容が要約されるようです。RemoteAddress部分が長いとき、Dateコマンドのあと(直後でなくてもよい)にShow-NetFirewallRuleコマンドを実行すると、RemoteAddressの値が{IPアドレス IPアドレス…}と省略されます。

  • [Ubuntu]別名を設定

    はじめに

     例えばLaravelで使う[sail]ですが、フルパスを付けると[/home/○/○○/vendor/bin/sail]となります。毎回使うことを考えると、もっと短くしたいと考えるでしょう。
     ※○や○○には環境によって異なる値が設定されます。

    フルパスを調べる

     今どこにいるのか、カレントディレクトリを調べましょう。Ubuntuで次の命令を入れます。

    pwd

     うまく /home/○/○○/vendor/bin/sail の○部分を調べることができたでしょうか?

     次にUbuntuの設定ファイルに追記します。Ubuntuで次の命令を入れて、テキストエディターを起動します。

    vi ~/.profile

     コンソールにファイル内容が表示されたとおもいます。
    キーボードで「i」キーを押して、挿入モードにします。カーソルはファイルの先頭位置にあるとおもいます。その位置で次の行を挿入します。[○]部分は、先に調べたパスで置換してください。

    alias sail='[ -f sail ] && bash sail || bash /home/○/○○/vendor/bin/sail'

     次に[Enter]キーを押して改行します。そして[ESC]キーを押して挿入モードを終えます。
    ファイルを保存して閉じるために次の命令を入力して[Enter]キーを押します。

    :wq

     更新したファイルを反映させるために、Ubuntuへ次の命令を入力します。

    source ~/.profile

     これで別名の設定は終了です。[sail]と入力したらsailのヘルプが出てくるようになりましたか?

  • [PHP]Laravelの開発環境をWindowsで整える

    はじめに

     WindowsパソコンにLaravelの開発環境を整えました。およそ次のとおりになります。

    1. WSL(WindowsでLinuxを使えるようにするもの)
    2. WSLにUbuntuをインストール
    3. WindowsにDocker Desktopをインストール
    4. UbuntuにLaravelをインストール

    WSL

     [コントロールパネル]>[プログラム]>[プログラムと機能]>[Windowsの機能の有効化または無効化]を開いて、次の項目にチェックを入れます。

    • Linux 用 Windows サブシステム
    • 仮想マシン プラットフォーム

     これをPowerShellで設定するには次のようにします。PowerShellは[管理者として実行]します。

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

    WindowsでWSL2を使って「完全なLinux」環境を作ろう!

     ここまで設定したら、一旦Windowsを再起動します。

    Ubuntu

     パソコンから目を離しても、Windowsがスリープしないように、[システム]>[電源とバッテリー]で設定しておきます。

     それでは、Ubuntuをインストールしましょう。PowerShellを[管理者として実行]し、次のようにします。

    wsl --install

     Ubuntuがインストールされると、新しいユーザーの名前とパスワードの登録がおこなわれます。
    ユーザー名とパスワードは何でもよいですが、ブランクにできません。このパスワードは頻繁に使いますので、しっかりメモしておきましょう。
     成功すると、[スタート]>[すべてのアプリ]に[Ubuntu]が登録されます。

    WSL を使用して Windows に Linux をインストールする

     次に、Ubuntuを更新しましょう。[スタート]>[すべてのアプリ]から[Ubuntu]を開いて、次のようにします。

    sudo apt update && sudo apt upgrade -y
    exit

     ここでWindowsを再起動します。

     もういちど、Ubuntuを開いて、次のようにします。

    sudo do-release-upgrade
    exit

     途中で[y]や[ENTER]の入力を求められます。

     更に、WindowsとUbuntuの改行コードの違いを吸収するために次のようにします。

    sudo apt-get install -y dos2unix
    find . -type f -print0 | xargs -0 dos2unix

    Docker Desktop

     次のサイトからWindows用のDocker Desktopをインストールします。これはWindowsのアプリです。

    ドッカーデスクトップ

     インストールが正常に終わると[Installation succeeded]と表示されます。そのあとDocker Desktopを開くとチュートリアルが始まりますが、とりあえずスキップしましょう。

    ララベルとドッカー

    Laravel

     Ubuntuを開いて、次のようにします。
    [○○]部分には任意のディレクトリ名を入れます。例えば[example-app]とすることができます。

    curl -s "https://laravel.build/○○?php=81" | bash
    cd ○○ && ./vendor/bin/sail up

     これで、開発環境は整いました。

    【Docker】Laravel Sailのインストールと使い方を確認

    Laravelを開く

     ここからは、コンピューターを開いてLaravelにアクセスするたびにおこないます。
    まずはUbuntuを開いて、次のようにします。

    cd ○○ && ./vendor/bin/sail up -d

     [○○]部分には、先に curl -s “https://laravel.build/○○?php=81” | bash したときの○○を入れます。
     次に、ブラウザを開いて http://localhost/ にアクセスします。無事にLaravelの画面が表示されたでしょうか。

     なお、Laravelを終わらせるには、次のようにします。

    ./vendor/bin/sail down

    おわりに

     開発環境の細かいところは、参加するチームによって色々と差異があるとおもいます。基本的なところが押さえられていたなら いいな..とおもいます。

  • [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

  • [Domino]ノーツドミノとは

    [Domino]ノーツドミノとは

    ノーツドミノとは

     ノーツドミノとはコンテンツマネジメントシステム(CMS)のひとつです。
     文字コードが異なる複数の国の文字をひとつの文書に表示するためにロータスマルチバイト文字セット (LMBCS) というノーツ固有のユニコードが使われ、文書を保存・検索するためにつくられた付属のデータベースに保存されます。
     機密文書を扱えるように表示・編集などのセキュリティは非常に細かく、やろうとおもえば段落ごとに設定することができます。

     ノーツドミノに付属するデータベースは分散型で、国・企業や言語が異なるサーバにも情報を複製して配置でき、ひとつのサーバが止まってもクライアントがサーバを切り替えて業務を継続できます。

     厳密には『ドミノ(Domino)』がサーバーソフトウエアで、『ノーツ(Notes)』がクライアントソフトウエアになります。クライアントソフトウエアには、ブラウザーやスマートフォンからサーバーにアクセスする『ノマド(Nomad)』があります。

     また、ノーツドミノはアプリケーションを開発・実行するアプリケーションプラットホームでもあります。開発環境は専用ソフトをパソコンにインストールして使います。オブジェクト指向言語によるプロコード開発だけでなく、マウスで選択していくノーコード開発や、関数を使ったローコード開発もできます。
     統合開発環境(IDE)は Eclipse をベースにしたデザイナー(Domino Designer)や、ブラウザーアプリを簡単に開発するためのリープ(Domino Leap)があります。

     ドミノはメールの送受信や中継をするメールサーバでもあります。コンテンツマネジメントシステム(CMS)としてメールをデータベースに蓄積することや、アプリケーション開発プラットホームとしてメールを受信や中継するタイミングで動くアプリケーションを開発することができます。

     ノーツドミノに付属または作ったアプリケーションが、グループウエアとして皆で協力して業務を進めるツールになります。グループウエアといえばノーツと言われた時期があります。

    用途

     ノーツドミノは次の用途で企業や企業グループ向けに使われます。

    • 有用な社内文書を蓄積・分類・共有・検索ができます
    • 少ないコストで業務アプリをつくれます
    • 電子申請(ペーパーレス)ができます
    • 社内外のメールの送受信と蓄積・分類・共有・検索ができます
    • メールのように、文書に添付ファイルを添えて保存できます

    終わったか?

     近ごろもノーツドミノ話題として、『ノーツドミノが終わった』『ノーツドミノのサポートが終わった』というお話を聞くことがあります。これは10年前に発売された古いバージョンのサポートが終わったという意味です。新しいバージョンは出続けていますし、当然にサポートがあります。

    高いか?

     他にも『ノーツドミノのライセンスが高い』というお話しを聞きます。ノーツドミノはIDあたり月950円です。(HCL Dominoの価格(料金・費用) – ITreview
     実際にノーツドミノからシェアポイントやセールスフォースへ移行したお客様のお話しでは『ノーツドミノのライセンスは安かった』と聞いています。ノーツドミノは開発環境やデータベースまで含んだオールインワンのソフトウエアで、追加のライセンスなしで使えます。後付けされたリープやセームタイム(Sametime)には別途ライセンスが必要だったとおもいますが、これが無ければ使えないものではありません。
     ノーツドミノ以外の良く比較されるソフトウエアは単機能であることが多いため複数の製品を組み合わせて使います。(SharePoint Online のオプションの比較 – Microsoft) それぞれにライセンス料がかかるため『トータルではノーツドミノが安い』となります。
     開発や維持管理までお話しを拡げると、ノーツドミノはノーツドミノを知れば使いこなせます。 複数のソフトウエアを組み合わせると、それぞれの製品を知ることはもちろんですが、組み合わせによってできる/できないというところまでわからないと使いこなせないため必要なエンジニアの数が激増します。 エンジニアの人件費合計も『ノーツドミノは安い』となります。

    実際のところノーツはいくらするの?

     ノーツドミノを導入するといくらかかるかコストを試算してみましょう。

    ライセンス料金

     ライセンスは月950円ですから、年11,400円になります。

    サーバー料金

     サーバーはIntel(AMD不可)の2コアCPUと8GBメモリーと3GBの空きディスク容量があればOKです。(システム要件 – HCL Domino

    VPS

     プロバイダのVPSを使えばインターネット経由でアクセスできます。
     例えば、さくらのVPS W8Gプラン(メモリ8GB、SSD400GB)なら要件を満たし、年107,690円になります。(さくらのVPS for Windows Server

    ミニPC

     ミニPCなら10万円で買えるものがありますし、ディスクが少ないモデルでは3万円でも買えそうです。
     社内にミニPCを置くことになるとおもいますが、インターネットからアクセスするばあいは固定IPアドレスが必要になります。

    クラウド

     Amazon・Google・Microsoftなどのクラウドでもノーツドミノは動きますが、金額の試算が難しいためここでは言及しません。

    エンジニアの料金

     最初の導入や、プロコードを使った複雑な業務アプリケーションをつくるのはエンジニアにやってもらったほうがいいと考えます。

     最初の導入でやってもらう内容をギュッと厳選すれば、過去には2日でおこなった実績があります。

     業務アプリケーションの開発では、内容によって幅が広いですが、ひとつ5日くらいでしょうか。

     エンジニアが月120万円くらいなので、1日なら6万円くらいです。週1日でお願いすると年300万円くらいになります。
     アシスタントエンジニアなら半額くらいになるとおもいますが、高度なことができなかったり、エンジニアよりも時間がかかって割高になるため注意しましょう。
     経験では、エンジニアとアシスタントエンジニアを組み合わせると割安になります。

    ノーツの合計金額

     それではノーツドミノを使うといくらかかるか総コストを出してみましょう。

    自力で構築・運用するばあい

     さくらのVPS W8Gプランのばあいでは、ひとりで使うなら年119,090円5人で使うなら年164,690円(ひとりあたり年32,938円)、10人で使うなら年221,690円(ひとりあたり年22,169円)、100人で使うなら年1,247,690円(ひとりあたり年12,477円)になります。

     10万円のミニPC(電気代含まない)を3年間使ったばあいでは、ひとりで使うなら年44,733円5人で使うなら年90,333円(ひとりあたり年18,067円)、10人で使うなら年147,333円(ひとりあたり年14,733円)、100人で使うなら年1,173,333円(ひとりあたり年11,733円)になります。

     これでライセンスとサーバーが用意できましたので、ノーコードやローコードなどを使って一般ユーザーが頑張れば業務アプリケーションをつくることができます。文章の共有は十分できます。
     外部のエンジニアに頼らずに開発と管理をする企業がありますので、十分に現実的です。

    少しだけエンジニアに頼るばあい

     次のように最初の導入と技術支援をエンジニアに依頼したばあいはいくらになるでしょうか。

    • 導入で、エンジニアとアシスタントエンジニアが2日で18万円、5年償却
    • 維持管理と業務アプリケーション開発支援で、エンジニアとアシスタントエンジニアが月1日で月9万円

     さくらのVPS W8Gプランのばあいでは、ひとりで使うなら年1,235,090円5人で使うなら年1,280,690円(ひとりあたり年256,138円)、10人で使うなら年1,337,690円(ひとりあたり年133,769円)、100人で使うなら年2,363,690円(ひとりあたり年23,637円)になります。

     10万円のミニPC(電気代含まない)を3年間使ったばあいでは、ひとりで使うなら年1,160,733円5人で使うなら年1,206,333円(ひとりあたり年241,267円)、10人で使うなら年1,263,333円(ひとりあたり年126,333円)、100人で使うなら年2,289,333円(ひとりあたり年22,893円)になります。

    表にまとめてみました

     これらを次の表にまとめました。

    サーバーエンジニア1人5人10人100人
    さくらのVPS W8Gプラン頼まない年119,090円年164,690円(ひとりあたり年32,938円)年221,690円(ひとりあたり年22,169円)年1,247,690円(ひとりあたり年12,477円)
    さくらのVPS W8Gプラン導入と支援年1,235,090円年1,280,690円(ひとりあたり年256,138円)年1,337,690円(ひとりあたり年133,769円)年2,363,690円(ひとりあたり年23,637円)
    10万円のミニPC 3年償却頼まない年44,733円年90,333円(ひとりあたり年18,067円)年147,333円(ひとりあたり年14,733円)年1,173,333円(ひとりあたり年11,733円)
    10万円のミニPC 3年償却導入と支援年1,160,733円年1,206,333円(ひとりあたり年241,267円)年1,263,333円(ひとりあたり年126,333円)年2,289,333円(ひとりあたり年22,893円)

    関連

    関連する記事はnoteにもあります。

    ノーツのサポートが終わるというけれど。。。

  • [Domino]文書の貼り付けを禁止する方法

    [Domino]文書の貼り付けを禁止する方法

    はじめに

     多くのユーザーに使われているアプリを長年使用していると、個人メールだったり他のアプリの文書だったりが紛れ込んでいることがあります。

    文書の貼り付けを禁止する方法

     アプリのすべてのビューのQueryPasteイベントに次の行を追加することで、貼り付けを禁止することができます。

    Continue = False

     このアプリの文書だけは許可したいというふうに、一部の文書を許可するばあいにはもっと複雑なコードを書く必要があります。

    さいごに

     文書を貼り付ける以外にも、メニューから[ファイル]-[インポート]で文書を追加することができます。この対策として、追加されてしまった文書を表示しないようにしたり、自動削除したりする方法が考えられます。