IT単語覚書2

  • DXとは
    デジタル化をしてビジネスに手を加えて儲ける仕組みをつくること。
    IT化したことで発生したデータをさらに活用しビジネスを生み出すこと。
    ・アナログ業務をデジタル化:デジタイゼーション(これは昔のIT化)
    ・データをクラウドにあげる。:デジタライゼーション
    ・データを活用し新しいビジネス:デジタルフォーメーション(DX)
    と定義しているが、ひっくるめてDXと定義してもよい。

    従来のシステム
    ・機能ファースト:機能を活用して効率化
    DX志向のシステム
    ・データファースト:データを活用して効率化

    データとビジネスのやりとりのことをUXという。
    そしてそれを続けるとDXになる。
    DX=データ x UX x ビジネス
    DXはデジタル化、IT化で終わらないようにする点が異なる。
    DXはシステム開発ではなく、ビジネス開発のことと言える。

    ・・・ぶっちゃけ今のデジタル化、IT化の範囲でも同じようにやっている。
    IT化、デジタル化との違いはほぼない。
    IT業界は異なる言葉で定義したがる傾向がある。

  • DXのXとは
    デジタルトランスフォーメーション
    海外では、トランスフォーメーションのことを「X」とよぶ。

【WordPress】WordPressテーマ変更

WordPressを入れ直したので、外観-テーマをTwenty Seventeenに変更しました。
それに伴い、デザインをカスタマイズしています。

  • アーカイブを変更
    トップページが全文表示から抜粋表示に変更となります。
    archive.php

    get_template_part( 'template-parts/post/content', get_post_format() );
    ↓
    get_template_part( 'template-parts/post/content', 'excerpt' );
    
  • 「投稿」文字を削除
    記事の上にある「投稿」の文字を削除します。
    index.php

    以下を削除
    <header class="page-header">
      <h2 class="page-title"><?php _e( 'Posts', 'twentyseventeen' ); ?></h2>
    </header>
    
  • 「カテゴリ」文字を削除
    記事の上にある「カテゴリ」の文字を削除します。
    archive.php

    以下を削除
    <?php if ( have_posts() ) : ?>
      <header class="page-header">
        <?php
          the_archive_title( '<h1 class="page-title">', '</h1>' );
          the_archive_description( '<div class="taxonomy-description">', '</div>' );
         ?>
      </header><!-- .page-header -->
    <?php endif; ?>
    
  • パンくずリストの追加(未実施)
    fanction.php

    以下を一番下に追加
    function breadcrumb(){
      global $post;$str ='';
      if(!is_home()&&!is_admin()){
        $str.= '<div id="breadcrumb" class="cf"><div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" style="display:table-cell;">';
        $str.= '<a href="'. home_url() .'" itemprop="url"><span itemprop="title">ホーム</span></a> &gt;&#160;</div>';
        if(is_category()) {
          $cat = get_queried_object();
          if($cat -> parent != 0){
            $ancestors = array_reverse(get_ancestors( $cat -> cat_ID, 'category' ));
            foreach($ancestors as $ancestor){
              $str.='<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" style="display:table-cell;"><a href="'. get_category_link($ancestor) .'" itemprop="url"><span itemprop="title">'. get_cat_name($ancestor) .'</span></a> &gt;&#160;</div>';
              }
            }
           $str.='<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" style="display:table-cell;"><a href="'. get_category_link($cat -> term_id). '" itemprop="url"><span itemprop="title">'. $cat-> cat_name . '</span></a> &gt;&#160;</div>';
        }elseif(is_page()){
          if($post -> post_parent != 0 ){
            $ancestors = array_reverse(get_post_ancestors( $post->ID ));
            foreach($ancestors as $ancestor){
              $str.='<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" style="display:table-cell;"><a href="'. get_permalink($ancestor).'" itemprop="url"><span itemprop="title">'. get_the_title($ancestor) .'</span></a> &gt;&#160;</div>';
            }
          }
        }elseif(is_single()){
          $categories = get_the_category($post->ID);
          $cat = $categories[0];
          if($cat -> parent != 0){
            $ancestors = array_reverse(get_ancestors( $cat -> cat_ID, 'category' ));
            foreach($ancestors as $ancestor){
              $str.='<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" style="display:table-cell;"><a href="'. get_category_link($ancestor).'" itemprop="url"><span itemprop="title">'. get_cat_name($ancestor). '</span></a>→</div>';
            }
          }
          $str.='<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" style="display:table-cell;"><a href="'. get_category_link($cat -> term_id). '" itemprop="url"><span itemprop="title">'. $cat-> cat_name . '</span></a> &gt;&#160;</div>';
        }else{
          $str.='<div>'. wp_title('', false) .'</div>';
        }
        $str.='</div>';
      }
      echo $str;
    }
    
    以下をパンくずリストを表示したいphp(page.phpやsingle.phpなど)に追加
    <?php breadcrumb(); ?>
    

【サクラエディタ】正規表現でキャメルケースとスネークケースの変換

文字形式の説明。

  • キャメルケース
    単語の先頭を大文字にする命名規則。
    全ての単語の先頭を大文字にするのがアッパーキャメルケース、または、パスカルケースと呼ばれる。
    JavaのBeanでset/getを除外した名称で使用されることが多い。
    例)CamelCase

    先頭の単語だけ小文字にするのがローワーキャメルケースと呼ばれる。
    JavaやJavaScriptのメソッド名で使用されることが多い。
    例)camelCase

  • スネークケース
    単語の間をアンダーバーでつなぐ命名規則。
    DBの値に使用されることが多い。
    例)snake_case、SNAKE_CASE
  • アッパーキャメルケースからスネークケースに変換
    ・検索条件:”([A-Z])”
    ・置換:”_\L$1″
    サクラエディタで大文字、小文字を区別して検索チェックする。
    変換後に先頭の「_」は後から削除する。
    例)CamelCase → _camel_case
  • スネークケースをアッパーキャメルケースに変換
    ・検索条件:”(_|^)(.)”
    ・置換:”\u$2″
    サクラエディタで大文字、小文字を区別して検索チェックする。
    先頭またはアンダースコアに続く1文字を置換対象にする。
    対象となる文字は$2で参照できるので、これを\uで大文字に変換する。
    例)camel_case → CamelCase

【bat】Oracleサービスとリスナー起動停止

Oracleサービスとリスナーをbatファイルで起動する。
起動順序としてはリスナー起動、サービス起動となる。
停止順序は逆順となる。

Oracleリスナー起動
@echo off
setlocal
REM Oracleリスナー起動
set ROOT_DIR=D:/batch
set BIN_DIR=%ROOT_DIR%/bin
set LOG_FILE=%ROOT_DIR%log/%~n0.log
 
echo [ INFO ] %DATE% %TIME% Oracleリスナー起動開始>>%LOG_FILE%
cd D:/Product/Ofs41_1\FailSafe\Client
FSCMD ONLINERESORCE FslDBServer /CLUSTER=DBServer>>%LOG_FILE%

if NOT %ERRORLEVEL%==0 goto ERR_END

timeout /t 120 /nobreak

echo [ INFO ] %DATE% %TIME% Oracleリスナー起動終了>>%LOG_FILE%
exit /b

:ERROR_END
echo [ ERROR ] %DATE% %TIME% Oracleリスナー起動失敗>>%LOG_FILE%
exit

endlocal
Oracleサービス起動
@echo off
setlocal
REM Oracleサービスー起動
set ROOT_DIR=D:/batch
set BIN_DIR=%ROOT_DIR%/bin
set LOG_FILE=%ROOT_DIR%log/%~n0.log
 
echo [ INFO ] %DATE% %TIME% Oracleサービス起動開始>>%LOG_FILE%
cd D:/Product/Ofs41_1\FailSafe\Client
FSCMD ONLINERESORCE IFSDB /CLUSTER=DBServer>>%LOG_FILE%

if NOT %ERRORLEVEL%==0 goto ERR_END

timeout /t 120 /nobreak

echo [ INFO ] %DATE% %TIME% Oracleサービス起動終了>>%LOG_FILE%
exit /b

:ERROR_END
echo [ ERROR ] %DATE% %TIME% Oracleサービス起動失敗>>%LOG_FILE%
exit

endlocal

【bat】サーバ再起動

batファイルでサーバを再起動させます。

@echo off
setlocal

set ROOT_DIR=D:/batch
set BIN_DIR=%ROOT_DIR%/bin
set LOG_FILE=%ROOT_DIR%log/%~n0.log

echo [ INFO ] %DATE% %TIME% サーバ再起動開始>>%LOG_FILE%
SHUTDOWN /r /f /c "batファイルによるリブート"
if NOT %ERRORLEVEL%==0 goto ERR_END
echo [ INFO ] %DATE% %TIME% サーバ再起動終了>>%LOG_FILE%
exit /b

:ERR_END
echo [ ERROR ] %DATE% %TIME% サーバ再起動失敗>>%LOG_FILE%
exit /b

endlocal

【bat】共有フォルダへの接続

共有フォルダへの接続をbatファイルで自動化する。
[bat]
@echo off
rem 接続解除
net use /delete \\server\dir$ /yes

rem 接続
net use /presistent:yes “\\server\dir” /user:testuser@testdom.local password
[/bat]

上記のbatファイルをタスクスケジューラでSYSTEMユーザ実行などで登録する。
起動するとSYSTEMユーザが「\\server\dir」に接続できるようになる。
net useの「/user」はあくまでも共有フォルダへ接続するための
ユーザIDとパスワードになる。

上記の例でいうと「testuser」が共有フォルダに接続できるようになるわけではない点に注意。
(元々、ログインするためのユーザなので勘違いしやすい)

【bat】サービス起動バッチ

サービスの状態を確認し、「STATE」になっている場合、
サービスを起動します。

前提
サービス名は「TES_SER」とします。

FOR /f "usebackq tokens=1,2,3,4,5 delims=: " %%A IN (`sc query "TES_SER" ^| findstr -i "STATE"`) DO if "%%A"=="STATE" if "%%C"=="STOPPED" sc start TES_SER TES_SERの起動引数(任意)

【PowerShell】ファイルサイズが大きいファイルの分割

ファイルサイズが2GBを超えるファイルは開けないため、ファイルを分割します。
Linuxではsplitがありますが、windowsでは存在しないコマンドのため、
他の方法でファイルを分割します。

前提
ファイルが「C:/log/test.log」にあるとし、
このファイルを10万行ごとのファイルに分割する。

cd C:/log
$i=0; cat ./test.log -ReadCount 100000 | % {$_ > test$i.log; $i++;

【Oracle】PLSQLでBLOBデータを出力

PLSQLでBLOBデータを出力します。

CREATE OR REPLACE PROCEDURE testBlobOut (kanriNo IN VARHCAR) AS
CURSOR C_CONTROL IS
  SELECT
    TB1.IMAGE_NAME, 
    TB1.IMAGE
  FROM
    SAMPLE TB1
  WHERE
    TB1.KANRI_NO = kanriNo;

v_blob_locater BLOB;
v_offset INTEGER := 1;
v_buffer LONG RAW;
v_file_buffer_size INTEGER := 32000;
v_amount INTEGER := 32000;
v_totalsize INTEGER;
v_filetype UTL_FILE.FILE_TYPE;
v_filename VARCHAR2(1000) := '';
v_openmode VARHCAR2(2) := 'wb';
v_dir VARCHAR2(1000) := 'C/temp';

BEGIN
  OPEN C_CONTROL;
  LOOP
    FETCH C_CONTROL INTO v_blob_locater, v_filename;
    EXIT WHEN C_CONTROL%NOTFOUND;
    DBMS_OUTPUT.PUTLINE('fileName:' || v_filename);
    v_totalsize := DBMS_LOB.GETLENGTH(v_blob_locater);
    v_filetype := UTL_FILE.FOPEN(
      v_dir,
      v_filename,
      v_openmode,
      v_file_buffer_size
    );
    while v_offset < v_totalsize loop
      if v_offset + v_amount > v_totalsize then
        v_amount := v_totalsize - v_offset + 1;
      end if;
      DBMS_LOB.READ(
        v_blob_locater,
        v_amount,
        v_offset,
        v_buffer
      );
      UTL_FILE.PUT_RAW(
        v_filetype,
        v_buffer,
        true
      );
      v_offset := v_offset + v_amount;
      DBMS_OUTPUT.PUT_LINE('Offset :' || v_offset);
    end loop;
    UTL_FILE.FFLUSH(v_filetype);
    UTL_FILE.FCLOSE(v_filetype);

    DBMS_OUTPUT.PUT_LINE('fileSize :' || v_totalsize);
  END LOOP;
  CLOSE C_CONTROL;
EXCEPTION WHEN OTHERS THEN
  UTL_FILE.FCLOSE_ALL;
  RAISE;
END;
/

PLSQLの実行方法

set serveroutput ON
execute testBlobOut('000010');

【Java】PDFからJPG変換

PDFファイルに利用されている画像をJPG変換します。
以下のライブラリが必要です。
pdfbox-2.0.7.jar
commons-logging-1.2.jar

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;

import javax.imageio.ImageIO;

import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

public class TestPDFBoxPdfToJpg {

    public static void main(String[] args) {
        //PDFドキュメントをロード
        try (PDDocument document = PDDocument.load(new File("D:\\test\\pdf\\e-ticket.pdf"));) {

            //ページのリストから最初の1ページを取得する
            PDPageTree pageTree = document.getDocumentCatalog().getPages();
            PDPage page = pageTree.get(0);

            //ページからリソースを取得し、最初のイメージを取得する。
            PDResources resources = page.getResources();
            Iterator<COSName> ite = resources.getXObjectNames().iterator();

            int i = 0;

            while (ite.hasNext()) {

                COSName name = ite.next();

                //取得したイメージをファイルに出力
                PDXObject xobject = resources.getXObject(name);

                if (xobject instanceof PDImageXObject) {
                    PDImageXObject image2 = (PDImageXObject) resources.getXObject(name);
                    ImageIO.write(image2.getImage(), "jpg", new FileOutputStream("D:\\test\\pdf\\e-ticket" + i + ".jpg"));
                }

                i++;
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}