投稿者: よろず工房

  • ChatGPTにURLを使って情報を渡す

     Chat GPTに事前に情報を渡して学習させる方法

    1.Webスクレイピングという技術

     WebサイトからWebページのHTMLデータを取得し、
       見出しや写真といった特定のデータを抽出する技術
       データの取得を「クロール」、データの抽出を「スクレイプ」と呼ぶ

     Pythonのスクレイピングに適したライブラリ

    Webページ取得データ抽出特徴
    Requests○✖️Webページを取得する
    シンプルで人が直感的に分かりやすいプログラムを記述できる
    Beautiful Soup✖️○取得したWebページの情報を加工する
    Selenium○○Webページ取得と、データ抽出の両方が利用できる
    JavaScriptが使用されたサイトやログインにも使用できる
    動作が遅いのがデメリット

     RequestsでHTMLのデータを取得し、
       BeautifulSoupでページのタイトルや見出しなどの情報を摘出する

    2.パラメータ設定

    import requests
    from bs4 import BeautifulSoup
    
    # 指定したURLのWebページを取得
    url = 'https://example.com'
    res = requests.get(url)
    
    # BeautifulSoupを使ってWebページのテキストを取得
    soup = BeautifulSoup(res.text, 'html.parser')
    text = soup.get_text()
    
    # 取得したテキストをチャットGPTに渡す
    response = chat_gpt.generate(text)

    3.注意点

     Webスクレイピングは、Webページの利用規約に違反する場合がある
       事前に利用規約を確認し、適切に利用する必要がある

     Webスクレイピングは、自動的に大量のリクエストを送信するため、
       Webサイトのサーバーに負荷をかける可能性がある
       適切な間隔を空けてリクエストを送信する

     Webサイト内の情報やコンテンツを
       複製・再利用することが禁止されている場合が多いので注意すること

  • ThunderBirdの起動(Mac)

    必要に応じて起動方法を使い分ける

    1.プロファイルマネージャを使用する

     「ThunderBird」を起動する際に、事前に用意したプロファイル(設定ファイル)を目的に合わせて使い分ける方法がある。

     プロファイルの設定は「プロファイルマネージャー」を使用する。
       「プロファイル マネージャー」は通常では動かせないので
       ”起動スイッチ”をつけて「ThunderBird を起動させ
       使用目的に合った「プロファイル」を新たに用意する

    2. プロファイルマネージャで設定する

     プロファイルマネージャの起動
       「アプリケーション」→「ユーティリティ」から、「ターミナル」を起動
       「アプリケーション」の「Thunderbird」を右クリックし
         「パッケージの内容を表示」をクリック
       「Contents」→「MacOS」の中にある「thunderbird-bin」を、
         ターミナルのウィンドウにドラック&ドロップ
       表示されたパスの最後に、「 -p」を入力してenter

     「プロファイルの選択」画面が表示されるので、
         「新しいプロファイルを作成」をクリックする

     登録内容を確認して「Thunderbirdを起動」を押下する
       プロファイルの「今後・・・使用する」を選択し
         チエックを入れると起動時に
         必ずここで選んだプロファイルが使用される
       プロファイルの「今後・・・使用する」を選択しないと
         起動時にプロファイルを手動で選ぶことになる

     「ウィザードの完了」画面が表示されるので
       新しいプロファイル名称を登録し、「完了」を押下する

    選択画面

    3.profiles.iniについて

     ここまででprofiles.iniが作成される
       作成される場所はThunderbird.appのLibrary/Thunderbird/profiles.ini
         ※ライブラリーの見方
           Finderでアプリケーションを選ぶ
           同時にOptionキーを押しながら移動をクリックする
           隠しファイルのライブラリーが見える様になる
           続けてThunderbirdホルダーを開けばProfilesホルダーが見える

     同じ場所にProfiles.iniお存在する
     

    3.profilesを指定して起動させる

     コマンドを用意してprofilesを使い分ける
       以下のようなコマンドを用意し、テスト実行させ確認しておく

    /Applications/Thunderbird.app/Contents/MacOS/thunderbird-bin -no-remote -p ●●●.default

       修正部分は
         -no-remote部分は多重起動を許可するために必要
         ●部分はprofiles.iniを参照して指定する

    4.ショートカットの作成

     LaunchpadからAutomatorを起動する

     起動画面の「アプリケーション」を選択する

    起動画面

     用意したprofilesを使った起動用コマンドを設定する
       左上隅に「シェル」と入力
       「シェルスクリプトを実行」と表示される、右側の設定エリアにドラッグする
       右側がシェルスクリプトの設定画面になる
       初期状態なので用意した実行コマンドを設定する
       右上隅の「実行」をクリックして起動されることを確認する

    設定画面

     ファイルとしてショートカット(拡張子.app)を書き出す
       後は自由にショトカットを使用する

  • 並べ替え(アルゴリズム)

      Pythonで6種類の並べ替えアルゴリズムを調べる
        昇順に並べ替えることを前提とする(降順は内容を読み替えてください)

    1.バブルソート

     隣同士の値を比較、必要があれば入れ替え、を繰り返して整列させる
       計算回数は、O(n^2)

     サンプルコード

    def bubble_sort(arr):
        n = len(arr)
        for i in range(n):
            for j in range(0, n-i-1):
                if arr[j] > arr[j+1]:
                    arr[j], arr[j+1] = arr[j+1], arr[j]
    
    # 使用例
    arr = [64, 34, 25, 12, 22, 11, 90]
    bubble_sort(arr)
    print("ソート済み配列:")
    for i in range(len(arr)):
        print("%d" %arr[i]),

    2.クイックソート

     基準値を設けて、基準値より大きいブロックと小さいブロックに分けて並び替える
       計算回数は、O(n log n)

     サンプルコード

    def quick_sort(arr, low, high):
        if low < high:
            # pivotを決定する
            pivot_index = partition(arr, low, high)
    
            # pivotを中心に左側をソートする
            quick_sort(arr, low, pivot_index - 1)
            # pivotを中心に右側をソートする
            quick_sort(arr, pivot_index + 1, high)
    
    def partition(arr, low, high):
        # pivotを最後の要素に設定する
        pivot = arr[high]
        # pivotより小さい要素を左側に、大きい要素を右側に配置する
        i = low - 1
        for j in range(low, high):
            if arr[j] < pivot:
                i += 1
                arr[i], arr[j] = arr[j], arr[i]
        # pivotを適切な位置に配置する
        arr[i+1], arr[high] = arr[high], arr[i+1]
        return i+1
    
    # 使用例
    arr = [64, 34, 25, 12, 22, 11, 90]
    n = len(arr)
    quick_sort(arr, 0, n-1)
    print("ソート済み配列:")
    for i in range(n):
        print("%d" % arr[i]),

    3.マージソート

     対象のデータを分割し、分割後の小さいブロック内で整列、再度統合する
       計算回数は、O(n log n)

     サンプルコード

    def merge_sort(arr):
        if len(arr) > 1:
            # 中央の位置を求める
            mid = len(arr) // 2
    
            # 左側と右側に分割する
            left_half = arr[:mid]
            right_half = arr[mid:]
    
            # 左側と右側を再帰的にソートする
            merge_sort(left_half)
            merge_sort(right_half)
    
            # ソート済みの左側と右側をマージする
            i = j = k = 0
            while i < len(left_half) and j < len(right_half):
                if left_half[i] < right_half[j]:
                    arr[k] = left_half[i]
                    i += 1
                else:
                    arr[k] = right_half[j]
                    j += 1
                k += 1
    
            # 左側に残った要素を配列にコピーする
            while i < len(left_half):
                arr[k] = left_half[i]
                i += 1
                k += 1
    
            # 右側に残った要素を配列にコピーする
            while j < len(right_half):
                arr[k] = right_half[j]
                j += 1
                k += 1
    
    # 使用例
    arr = [64, 34, 25, 12, 22, 11, 90]
    merge_sort(arr)
    print("ソート済み配列:")
    for i in range(len(arr)):
        print("%d" %arr[i]),

    4.選択ソート

     データ内の最小値(最大値)の値を見つけて、左から順番に並び替える
       計算回数は、o(n^2)

     サンプルコード

    def selection_sort(arr):
        n = len(arr)
        # 配列の先頭から末尾まで、最小値を選択して配置する
        for i in range(n):
            min_index = i
            for j in range(i+1, n):
                if arr[j] < arr[min_index]:
                    min_index = j
            arr[i], arr[min_index] = arr[min_index], arr[i]
    
    # 使用例
    arr = [64, 34, 25, 12, 22, 11, 90]
    selection_sort(arr)
    print("ソート済み配列:")
    for i in range(len(arr)):
        print("%d" %arr[i]),

    5.挿入ソート

     左から順番に要素を比較しながら入れ替えていく方法
       計算回数は、最大でn(n-1)/2

     サンプルコード

    def insertion_sort(arr):
        n = len(arr)
        # 配列の先頭から末尾まで、要素を挿入して配置する
        for i in range(1, n):
            key = arr[i]
            j = i - 1
            while j >= 0 and key < arr[j]:
                arr[j+1] = arr[j]
                j -= 1
            arr[j+1] = key
    
    # 使用例
    arr = [64, 34, 25, 12, 22, 11, 90]
    insertion_sort(arr)
    print("ソート済み配列:")
    for i in range(len(arr)):
        print("%d" %arr[i]),

    6.ヒープソート

     二分木(親1に対して子2のツリー構造)の一種を構築して並べ替えをおこなう
       計算回数は、O(n log n)

     サンプルコード

    def heapify(arr, n, i):
        largest = i  # 親ノード
        l = 2*i + 1  # 左の子ノード
        r = 2*i + 2  # 右の子ノード
    
        # 左の子ノードが親ノードより大きい場合
        if l < n and arr[largest] < arr[l]:
            largest = l
    
        # 右の子ノードが親ノードより大きい場合
        if r < n and arr[largest] < arr[r]:
            largest = r
    
        # 親ノードが最大値でない場合、親ノードと最大値を交換する
        if largest != i:
            arr[i], arr[largest] = arr[largest], arr[i]
    
            # 子ノードのヒープも修正する
            heapify(arr, n, largest)
    
    def heap_sort(arr):
        n = len(arr)
    
        # 最初に、配列をヒープ構造にする
        for i in range(n // 2 - 1, -1, -1):
            heapify(arr, n, i)
    
        # ヒープから一つずつ最大値を取り出して、配列の末尾に配置する
        for i in range(n-1, 0, -1):
            arr[i], arr[0] = arr[0], arr[i]  # 最大値を末尾に配置
            heapify(arr, i, 0)  # 未ソート部分のヒープを再構築する
    
    # 使用例
    arr = [64, 34, 25, 12, 22, 11, 90]
    heap_sort(arr)
    print("ソート済み配列:")
    for i in range(len(arr)):
        print("%d" %arr[i]),

     

  • 画像自動生成AI

     どんな画像が欲しいかを指示すると、
       AIがそれに沿った画像を自動生成する仕組み

    1.画像生成サービス

     MidJourney
       2022年7月にオープン、ベータ版の使用開始
       欲しい画像を英文テキストで入力する
         AIがそれに沿った画像を自動生成する
       DiscordのBotコマンドを使用し画像を作成する
         DiscordのBot・・・オンライン環境で決められた手順で処理される
       一定数までの画像生成は無料、超えると有料サービスになる

     AIピカソ(iOS版、Android版)
       2022年8月31日に公開
       Stable Diffusionを使用する
       文章を入力すると、AIが画像生成してくれるスマホアプリ
         
     お絵描ばりぐっとくん
       2022年8月28日に公開
       Stable Diffusionを使用する
       文章をLINE公式アカウントに送信すると、
         AIが画像生成してくれるLINEアプリ

       1日に絵を描いてもらえる回数は1アカウント10回まで
         500円で無制限になる
         Stable Diffusionを使用する
         文章を入力すると、AIが画像生成してくれるサービス

     memeplex
       2022年8月27日に公開
       Stable Diffusionを使用する、今後他のエンジンも追加予定
       日本語で指示するだけで作画させることができる無料サービス
         日本語は英語に自動翻訳されるので
         漠然としたものを作るのが得意なエンジンなので
         日本語の指示を繰り返し工夫・改善しながら生成する

     novelAI
       2021年6月15日公開
         最初は小説(文章)を生成するサービス
         文章を入力すると次の文章を予測して文章が出てくる
       2022年10月3日
         Stable Diffusionを使用した画像生成機能が付加される
         日本語で指示するだけで作画させることができるサービス
         画像の生成は有料となる

     Stable Diffusion
       2022年8月23日に無償公開
       欲しい画像を英文テキストで入力する
         AIがそれに沿った画像を自動生成する

       ソースコードが公開されている
         生成する画像を人為的に制限しない(チエックしない)仕組み
         モデルがディープフェイクの作成に使用できてしまう

         モデルを使う上ではその詳細な理解は必要ない
           Webサイトが提供しているサービスを利用したり
           ローカルPCやGoogle Colabにモデルをインストールして
             スクリプトを実行したり
             プログラムコードを記述/実行したり、できる
           デモサイトで手軽に試すことも可能

    2.モデル

     Stable
       Stable Diffusionのモデルデータ
       アニメ絵以外は最強
       memeplex、AIピカソ、ばりぐっとくんで使われている

     Waifu
       2次元イラスト490万枚以上のモデルデータ
       和風アニメ(美少女)が強い
       イラストに特化する
         memeplexで使われている

     trinart
       約1920万枚+αで訓練を行ったキャラクターに特化したモデルデータ
         他のモデルとは全く使えるプロンプトの内容が異なる
       和風アニメに強い
       アニメ・マンガ特有のあらゆる表現が通る
         memeplexで使われている


    Stable

    Waifu

    trinart

    3.補足

     更新日時点での情報であり
       現在、急速に拡大している領域です
       都度、最新情報を確認してください

     

  • WPの構造

    WordPressはシステム本体のPHPプログラムと投稿記事を保存しているデータベースから構成されている

    1.ファイルとディレクトリ

    ファイル(最も重要なファイル)
    .htaccess 設定ファイル
     Apache用に準備されているディレクトリ単位のWebサーバー設定情報等
     セキュリティー強化等に使用する
    index.php Web用トップ画面
     画面情報(HTMLプログラムと同様)
    wp-config.php 設定ファイル
     データベースの接続情報、インクルードファイルの設定情報等
     見本としてwp-config-sample.phpがある
      データベース名
      データベースユーザー名
      データベースパスワード
      データベースホスト
      その他
    ディレクトリ(主なディレクトリ)
    wp-admin/ 管理者用でホームページの各種設定や記事を書くためのプログラム
    wp-content/ テーマファイル、アップした画像等のファイル、プラグインファイル、バックアップファイル
    wp-include/ 基本プログラム

    2.データベース

     データベースの中身を「phpMyAdmin」を使って表示する
       接頭語(wp_)が付いた11個のテーブルで構成されている
         ※接頭語(wp_)はインストール時に任意に変更できます

    wp_commentmeta各コメントにはメタデータと呼ばれる情報を持ってこの場所に格納
    wp_commentsコメント・トラックバック・ピンバックデータを格納
    wp_linksリンク作成で入力されたリンク情報を格納
    wp_options管理 > 設定で設定されたオプション設定情報を格納
    プラグインの設定情報が格納されることも多い
    wp_postmetaメタデータという各投稿記事特有の情報を格納
    プラグインが情報を当テーブルに追加することがある
    wp_posts投稿記事のほか、ページ、ナビゲーションメニューのデータを格納
    wp_terms投稿およびリンクの分類(カテゴリ・タグ)に使われる語句の基本情報を格納
    wp_term_relationships各投稿記事とカテゴリ・タグとの関連付け情報を格納
    wp_term_taxonomy投稿およびリンクの分類上の語句(カテゴリ・タグ)データを格納
    wp_usermeta各ユーザ特有のユーザ・メタデータを格納
    wp_users登録ユーザ情報を格納
  • 画像自動生成AIと著作権

     著作権法的に問題になる3つの点を説明する

    0.全体像

     AIソフトウェアの開発(学習・訓練)や、AIソフトウェアの利用の全体像
       画像自動生成の工程は学習フェーズと利用フェーズの2つで構成される

    画像自動生成AIの全体像

    1.他人の著作物を収集し利用すること

    学習フェーズ
     AIソフトウェアを開発・提供するサービサーに関連する部分
       AIIソフトウェアを生成するために
       他人の画像や文章などの著作物を勝手に収集して利用することができるか

     他人の著作物を勝手に収集して機械学習技術を用いて画像生成には
       元となるデータ(著作物)をネット上で収集します

     日本著作権法30条の4第2号の権利制限規定
       収集されたデータの著作権は通常データの生成者が保有しているため
       学習フェーズでAIソフトが使用するには著作権者の許諾が必要

       平成30年改正著作権法によって導入された著作権法30条の4第2号
         生成に必要な著作物の利用行為(データの複製や翻案)は、
         原則として著作権者の承諾を行わなくても可能である
         ただし、著作権者の利益を不当に害する場合は不可とした

         平成30年には「情報解析」に利用するためなら
           原則として著作物を自由に利用できる、とした上に
           いずれの方法によるかを問わず、と規定した

         そのため、著作物の使用目的に関する限定がないため、
           現在では自由にデータを使用できる状態

     日本著作権法は国内法(※日本国内に関する法律)
       作業者とサーバの両方が国内なら著作権法が適用されます
       作業者またはサーバのいずれかが外国なら著作権法は適用されません

       利用行為が日本国内であれば著作権法が適用されます
         著作権者が日本なのか外国なのか
         著作物の利用者が日本なのか外国なのか は無関係で
         あくまでも利用行為が国内の場合のみ適用されます

     次の問題は
       著作権者が使用禁止と明記し、画像生成を制限している場合は

       30条の4第2号で営利・非営利問わず著作物の利用行為が可能となるが
       著作者が自ら「AI学習に使うのは禁止にします」と表明した場合は
         原則、使用するには著作権者の承諾が必要なのですが、
         権利制限規定に該当すれば承諾がなくとも利用が可能です
           ※権利制限規定には
             著作物が自由に使える多種多様な条件を規定している

         著作者が禁止にします、と表明するだけで契約が成立するかどうか
           契約は一方的な表明だけでは成立しない
           成立するためには当事者双方の意思が合致することが必要

           契約は締結した当事者間でしか契約内容の効力は及ばない
             契約を締結していない第三者がデータを利用することは可能

         Zは利用規約に同意しておらず利用規約に拘束されないからです。 
      

    2.自動生成された画像の著作権

    利用フェーズ
     AIソフトウェアを利用して画像を自動生成するユーザに関連する部分
        自動生成された画像に著作権が発生するか

     著作権が発生するのは人間の創作物に限られている
       AIの利用により作成されたコンテンツには著作権は発生しない

       「人間が創作した」と「AIの利用により作成された」の線引き
         人間に「創作的寄与」があったかによって判断される
         AIに具体的かつ詳細な指示をしたか、によって判断される

       人間が簡単な指示しかしていなければ、
         生成された画像がいかに独創的であったとしても著作権は発生しない

       現在使われている画像自動生成AIは
         短い呪文を入力したら一発で素晴らしい画像が出て来る
         「創作的寄与」がなく、著作権が発生しない可能性が高い

         詳細かつ長い呪文(秘密の呪文)を唱えて画像を生成した場合は
           「創作的寄与」があり、著作権が発生する可能性が高い
           通常は何度も呪文を唱えて複数の画像を生成し
             その中から好みの画像をピックアップする
             明らかに「創作的寄与」が行われている

         画像自動生成AIの生成物には著作権が発生する

     呪文を法的に保護する方法
       呪文自体を著作物として保護する場合
         呪文が「読んで意味のある文章」なら著作物である
         呪文が文章とは言えないなら著作物ではない
     
         特別な意味を持つ呪文は著作物になる
           呪文が著作物に該当しても効果が無い
             著作物として管理する手間が大変になる
             利用するにしても承諾を得る手間が大変になる
             著作物として保護しても従う人はいない

       呪文が著作物に該当しても保護できない場合
         呪文を不正競争防止法上の営業秘密にし
         良い呪文が見つかったら秘匿し
           販売・提供する際には秘密保持契約を締結した上で提供する

     自動生成された画像の著作権は誰が有するか
       画像生成AIソフトウェアの制作者には著作権はありません
       画像やデータセットを生成・提供した者にも著作権はありません
       長い呪文を唱えて画像を生成した者には著作権が発生する

       「呪文を作成した人」と「呪文を使って画像生成をした人」が別人の場合
         複雑になってまとめきれず、案は幾つかある
           AIソフトを著作者とする
           AIソフトの作成者を著作者とする

    3.偶然に生成された場合の著作権侵害

    利用フェーズ
     サービス提供者とサービス利用者双方に関連する部分
       学習に用いられた画像と同一の画像が『偶然』自動生成された場合、
       著作権侵害に該当するか

       サービス提供者は画像自動生成AIというツールを提供し、
       サービス利用者は同ツールを利用して画像を自動生成する
         学習フェーズでデータとして取集したデータと
         利用フェーズで出来上がった画像が同じになった場合のこと     

         自動生成した画像を利用した利用者が著作権侵害になるのか
         仮に利用者が侵害したとなった場合、提供者も責任を負うのか

     同じ画像が生成されて著作権侵害になる要件
       作風の類似に過ぎない場合
         類似性・・・作風・スタイルレベルで類似している場合
                 類似性を満たさず、著作権侵害には該当しない
               表現レベルで類似している場合
                 類似性を満し、著作権侵害には該当する
           必ずしもはっきりしたものではないため、争いになる

       依拠性の有無の場合
         依拠性・・・他人の著作物に依拠するかどうか
                 学習用データセットに含まれていれば依拠性あり
                 既存著作物がパラメータ化されてれば依拠性なし
           結論は出ていない

     著作権侵害に該当する場合に誰が責任を負うのか
       ユーザ
         ユーザ自身が既存著作物の複製行為を行っていることになる
           私的領域内だと適法
           販売・配信した場合は著作権侵害に該当する
             ユーザに故意・過失がない場合は損害賠償請求はできない

       ツール提供者
         学習用データセットの生成・提供行為
           データセットは著作権侵害につながる危険性は相当に低い
           法的責任を問われることはない

         画像自動生成AIソフトウェアの生成・提供行為
           十分な量のデータセットを元データとして生成された画像は
           類似した画像は極めて偶然にしか生成されない
           法的責任を問われることはない
     
           既存著作物と同じ画像が非常に高い確率で生成される場合
           類似したデータのみ収集したデータセットの場合
           法的責任を問われる
     
         画像自動生成AIソフトウェア生成ツールの提供行為
           データの学習によってツールの危険性は異なること
           ツールの提供行為を行っただけ
           法的責任を問われることはない

     著作権以外の権利の侵害
       パブリシティ権侵害
         有名人の肖像が自動生成された場合

       名誉権侵害
         実在の人物の顔に裸体を合成した画像が出力された場合

  • Linuxの特徴

    Linuxを初めて使用するに当たって

     Windows使用者がLinuxを使おうとして最初に戸惑う点を8つ挙げます
       いずれも「習うより、慣れろ」で直ぐに解消されます

    1.LinuxはOSが複数存在する

     Microsoft社のみが開発・提供するWindows とは異なり、
       Linux のディストリビューション(distribution)を提供するベンダーは複数 社あります
         Linux のソースコードはオープンソースであり、
         さまざまなベンダーが目的別に独自のディストリビューションを開発・提供しています

       使用者は複数のディストリビューション(ベンダー)の中から自由に選択します

     Linuxコミュニティーが存在する
       Linuxはオープンソースソフトウェア(OSS)であり開発・運営は、
         世界中のコントリビューター(contributor)によるコラボレーション活動に支えられています

       独占企業の1社だけが提供するOSではありません
         障害対応、最新版の提供等の窓口として幅広く自由に活動しています

    2.LinuxはCLI (Command Line Interface)が中心

     GUI はオプションです
       他のアプリケーションと同じように削除や置換ができます
         必要に応じてユーザーが最適なGUI を選択し使用できます

       古いデバイスだとシステムリソースに制約が有ります
         リソースの消費が少ないGUI をインストールすることが可能です

     Microsoft社は単一のGUI (Graphical User Interface)を提供する
       CLIも使えるようにしているものの、あくまでもGUI が中心です

    3.Linuxはオフィスでも使える

     かつてはサーバ専用OSであったが、今ではオフィスや家庭の個人ユーザーでも使えます
       GUIがWindowsの様に洗練されてきており、
         ソフトウェアのインストールや管理が各段に簡単になっています

    4.Linuxはフリーである

     Linuxはオープンソースソフトウェア(OSS)です
       OSのソースコードがオープンだということは何事もフリーということになります
         ソースコードを修正しより優れたOSを開発できます
         誰でもコピーして使えるので、最初から無料で利用できます
         ウィルスを埋め込んでも、元のソースと比較すれば直ぐに発見できます

     Microsoft社のWindowsはソースコードを公開していません
       あらかじめ実行可能な状態に変換し、ユーザに提供されています
       ソースコードを変更することは基本的にはできない

    5.Linuxの基本は「コマンド」である

     Linuxでの作業の基本はCLIによるコマンドを利用する
       サーバの運用ではCLIの方がさまざまな作業を迅速かつ容易に実行しやすい

       さまざまなコマンドや関連するオプションを覚えやすくするために、
         クイックレファレンスを提供するマニュアルコマンド「man」が実装されている

    6.Linuxはディレクトリで管理する

     Linuxはファイルを特定のディレクトリに保管する
       Windows のフォルダに相当する

       下記のディレクトリは規定の名前でルートディレクトリの直下に存在する
         設定ファイル・・・/etc
         ユーザーデータ・・・/home
         システムログファイル・・・/var/log

    7.Linuxの管理者アカウントはrootである

     Linuxの管理者アカウントにはrootを使用する
       Windowsのアドミン(Administrator)に相当する

       不正使用のリスクがあるのはWindowsとなんら変わらない

    8.LinuxではOfficeの代替策を検討する

     LinuxではWindowsで利用していたアプリは利用できないことがある
       特に「MicrosoftOffice」は代替策をとる必要がある
         オープンソースの「LibreOffice」を検討するのが良い

    9.その他

     アクセス権(Permission)に慣れる必要があります
       Linuxで作成されるファイルやディレクトリにはアクセス権を設定する必要があります
         読み取り(r)、書き込み(w)、実行(x)の3種類を設定します
         Windowsには無い概念ですので使い慣れることが一番重要です

  • 独自ドメインの利用

     独自ドメインを導入(利用)すべき理由を説明します

    1.独自ドメインとサブドメイン

     独自ドメインとは、独自に名前を登録しているインターネット上の住所
       世界で唯一無二の住所として利用できます
         Webサイト(URL)とメール(アドレス)に使用されます
       名前を登録するには登録料、維持するには維持費が掛かります

     サブドメインとは、独自ドメインから用途別に割振られるインターネット上の住所
       多くの場合、独自ドメインの管理者から無料で貸し与えられます
       無料大型ブログ、無料ホームページ等々に多数存在します

    2.独自ドメインとサブドメインの比較

    比較項目独自ドメインサブドメイン
    費用有料無料
    利用期限契約(維持費の支払)による管理者の方針により左右される
    利用制限自由度が高い制約事項が存在する
    信頼性対外的な信頼性の向上記憶に残らず印象が薄くなる
    SEO対策工夫・改善が行える工夫・改善の余地が少ない

    3.比較項目の説明

    ・費用
      独自ドメインは新規登録および契約更新の際に費用が掛かります
        登録先(ドメイン管理者)業者によって費用は異なります
        登録種別(用途や意味)により金額に幅が有ります
          数百円~数千円と幅が有ります

      サブドメインは無料で利用できます

    ・利用期限
      独自ドメインは毎年の更新費(維持費)を支払えば永続的に利用できます

      サブドメインは独自ドメイン所有者の運営方針に左右されます
        社会情勢によるサービス打切りの不安が付きまといます  

    ・利用制限
      独自ドメインは契約範囲内での利用には制限がありません

      サブドメインでは割振られた範囲内での利用になります
        複数の登録者での利用ですから割当てられるリソースには制限が有ります
        容量、ファイル数、1回当たりの扱い量等々に制約があります

    ・信頼性
      独自ドメインは所有者の情報を公開することによって信頼性を高めます
        氏名、住所、電話番号、メールアドレスを公開する必要があります
        多くの登録先(ドメイン管理者)業者には無料の代行サービスがあります
          所有者の情報は業者が管理し、代わりに業者の情報が公開されます

      サブドメインは親となる独自ドメインの子ども扱いになりますので
        親の独自ドメインの信頼性に引っ張られた扱いになります

    ・SEO対策
      独自ドメインはサイトのアクセス数をアップさせたい方にお勧めです
        所有者自身の努力でアクセスアップに繋げることができます

      サブドメインではHTMLヘッダーの修正は許可されていない(ことが多い)
        サイトの内容等でアクセス数をアップさせてください


        

  • Ubuntuの試用

     <22.04LTS向けに作成中>

  • タグの取得と出力

    WordPressでタグを取得・出力する方法
       (1)タグを全件取り出し、順次出力する

    $tags = get_the_tags();
     if ($tags)
       {
         foreach($tags as $tag)
           {
    	     echo '<li>' . $tag->name . '</li>';
           }
       }

       (2)タグを全件取り出し、リンク先を付加して順次出力する
           HTML本体の中にPHPで処理を組み込む

    <html>
    <?php
        $posttags = get_the_tags();
        if ($posttags)
          { foreach($posttags as $tag)
              {   ?>
         <a href="<?php echo get_tag_link($tag->term_id) ?>" target="_blank">
    <?php
          echo $tag->name  ?>
         </a>  
    <?php
                 }
              }   ?>
    </html>

     <補足>
       WordPressのタグは以下の順番で表示される
         数字
         アルファベット
         ひらがな
         カタカナ
         漢字

       <主>と<従>の関係であるタグ構成の場合
         出力順を保証するためにタグ名の先頭に①と②を付与する
         ①が主タグ、②が従タグとして順に表記される

         プラグインやプログラミングを取り入れれば並びは替えられるが
         手っ取り早い方法で並び順を保証する、方法です