2017/12/09

木村家の人々

昔見て、ものすごい衝撃的だった映画。”守銭奴”という言葉を覚えた映画。
今なら、もっと別の小銭稼ぎ方法があるかも。あと、今じゃもう放送できないのかな。
妻とみたが、妻にもまあまあ好評。
昔見た時は、たしか親と見ていて気まずかった記憶あり。。。

木村家の人々

2017/12/02

Pyenv + virtualenv のセットアップ手順 on AWS-EC2

AWSのEC2 RHEL7.4(Ubuntuの場合は、パッケージの部分だけ違う) に Pyenv+virtualenv をセットアップする手順

1.インストール

#update と 必要なパッケージ入れる
sudo yum update -y
sudo yum install -y gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel bzip2 sqlite curl
#ubuntuの場合
#初期UPDATE
#sudo apt-get update
#sudo apt-get upgrade
#必要なライブラリインストール
#sudo apt-get install -y git gcc make openssl build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils libgtk2.0-dev pkg-config
#pyenvのインストール
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
#環境設定
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec $SHELL -l
#pyenv-virtualenvのインストール+環境設定
git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
exec $SHELL -l

2.チェックとちょこっと設定
#切り替え可能なバージョンチェック
[ec2-user@ip-10-0-0-174 ~]$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
#インストール可能なPythonバージョンを確認
[ec2-user@ip-10-0-0-174 ~]$ pyenv install -l
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1

  2.4.2
#新しいPythonのバージョンをインストール
[ec2-user@ip-10-0-0-174 ~]$ pyenv install 2.7.13
Downloading Python-2.7.13.tar.xz...
-> https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
Installing Python-2.7.13...
Installed Python-2.7.13 to /home/ec2-user/.pyenv/versions/2.7.13
#2.7.13が追加された。
[ec2-user@ip-10-0-0-174 ~]$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
  2.7.13
#2.7.13をベースに、"testpy"という環境を構築する
[ec2-user@ip-10-0-0-174 ~]$ pyenv virtualenv 2.7.13 testpy
Collecting virtualenv
  Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)
    100% |████████████████████████████████| 1.8MB 638kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-15.1.0
New python executable in /home/ec2-user/.pyenv/versions/2.7.13/envs/testpy/bin/python2.7
Also creating executable in /home/ec2-user/.pyenv/versions/2.7.13/envs/testpy/bin/python
Installing setuptools, pip, wheel...done.
Requirement already satisfied: setuptools in /home/ec2-user/.pyenv/versions/2.7.13/envs/testpy/lib/python2.7/site-packages
Requirement already satisfied: pip in /home/ec2-user/.pyenv/versions/2.7.13/envs/testpy/lib/python2.7/site-packages
#"testpy"が追加された
[ec2-user@ip-10-0-0-174 ~]$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
  2.7.13
  2.7.13/envs/testpy
  testpy
#開発用のディレクトリ"pyproject"のPython環境を"testpy"に変更する
[ec2-user@ip-10-0-0-174 ~]$ cd pyproject/
#今のバージョンは、2.7.5だが。。
[ec2-user@ip-10-0-0-174 pyproject]$ python -V
Python 2.7.5
#Pyenvで変更すると
[ec2-user@ip-10-0-0-174 pyproject]$ pyenv local testpy 
(testpy) [ec2-user@ip-10-0-0-174 pyproject]$ python -V
Python 2.7.13

バージョン2.7.13へと変更された。

Docker CE のセットアップ手順 on RHEL7.4 (AWS-EC2)

AWSのEC2 RHEL7.4 にDocker CEをセットアップする手順

1.インストール
sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum list docker-ce.x86_64 --showduplicates |sort -r
sudo yum -y --enablerepo=rhui-REGION-rhel-server-extras install container-selinux
sudo yum -y install docker-ce
# Start docker
sudo systemctl enable docker.service
sudo systemctl start docker.service

2.チェックとちょこっと設定

#パーミッションがなく、sudoなしで操作できない。
[ec2-user@ip-10-0-0-174 ~]$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.32/containers/json: dial unix /var/run/docker.sock: connect: permission denied

#sudoなしで起動できるようにする
#グループを作るー以下の場合はすでに存在していた。
[ec2-user@ip-10-0-0-174 ~]$ sudo groupadd docker
groupadd: group 'docker' already exists
#dockerグループに追加する
[ec2-user@ip-10-0-0-174 ~]$ sudo usermod -aG docker $USER

このあと、ログインし直すと。。。
[ec2-user@ip-10-0-0-174 ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[ec2-user@ip-10-0-0-174 ~]$ docker version
Client:
 Version:      17.09.0-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:41:23 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.09.0-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:42:49 2017
 OS/Arch:      linux/amd64
 Experimental: false

sudoなしで使える! インストール完了。

2017/10/28

CSVファイルを読み込んでlist型と辞書型に格納 - Python


  • Goal
    PythonでCSVファイルを読み込んで、List型と辞書型、集合型に格納する
  • How
    CSVモジュールのreaderメソッドを使う

    マスターファイルを作る。 テキストファイル menu.csv
     
    UDON001,500
    UDON0012,700
    SUSHI0123,1200
    TONKATSU001,2000
    RAMEN10,1000

    # -*- coding: utf-8 -*-
    import csv
    #list作成する場合
    with open('menu.csv', 'r') as f:
    csvdata = csv.reader(f)
    data = [ x for x in csvdata ]
    #集合にセットする場合
    with open('menu.csv', 'r') as f:
    csvdata = csv.reader(f)
    dataset = set(dict([ x for x in csvdata ]))
    #listを辞書型に変更
    datadic = dict(data)
    #checking
    print('List')
    print(data)
    print(len(data))
    print('Dic')
    print(datadic)
    print(len(datadic))
    print('Set')
    print(dataset)
    print(len(dataset))
    view raw CSVtoListDic.py hosted with ❤ by GitHub
  • Result
    (pytest2.7.13)~/pytest$ python CSVtoListDic.py 
    List
    [['UDON001', '500'], ['UDON0012', '700'], ['SUSHI0123', '1200'], ['TONKATSU001', '2000'], ['RAMEN10', '1000']]
    5
    Dic
    {'TONKATSU001': '2000', 'UDON001': '500', 'RAMEN10': '1000', 'UDON0012': '700', 'SUSHI0123': '1200'}
    5
    Set
    set(['TONKATSU001', 'UDON001', 'SUSHI0123', 'UDON0012', 'RAMEN10'])

    5

2017/10/22

GCP: Google App Engineにアプリーケーションをデプロイする方法 ー GAE/Py


  • 備忘メモ
    Google App Engine にデプロイするコマンド
    EC2上のUbuntu16.04からデプロイ
    APP.yamlファイルがあるディレクトリで実行すること


(pytest2.7.13) ubuntu@ip-10-0-0-253:~/pytest$ appcfg.py update --noauth_local_webserver -A "projectid" -V "version" .←Main.pyがあるディレクトリで流しているので。。。
  • 結果 --- これは何も更新されてないけど

    10:43 AM Application: (was: None); version:  (was: None)
    10:43 AM Host: appengine.google.com
    10:43 AM Starting update of app: , version: 
    10:43 AM Getting current resource limits.
    10:43 AM Scanning files on local disk.
    10:43 AM Scanned 500 files.
    10:43 AM Cloning 896 application files.
    10:43 AM Compilation starting.
    10:43 AM Compilation completed.
    10:43 AM Starting deployment.
    10:43 AM Checking if deployment succeeded.
    10:43 AM Deployment successful.
    10:43 AM Checking if updated app version is serving.
    10:43 AM Completed update of app: , version:

テキストファイルをRDBのテーブル(イメージは、品番マスターとか)風に使う - Python


  • Goal
    ChatBotが受信したテキストメッセージと、テキストファイル(CSV)をマッチングさせる。テキストファイルのままで、品番マスタの用に使って参照させる。
  • 準備
    マスターファイルを作る
    テキストファイル menu.csv
     
    UDON001,500
    UDON0012,700
    SUSHI0123,1200
    TONKATSU001,2000
    RAMEN10,1000
  • How
    1. unicodedata を使って、ひらがな・カタカナ・漢字判定と、全角・半角変換する
    2. lineでテキストファイルから1行取得して、比較を繰り返す
    3. 先頭からで一致したら抜き出す

    # -*- coding: utf-8 -*-
    import unicodedata
    inputtext = 'UDON001' # 半角全角混じりでもOK
    menu = 'menu.csv'
    # ひらがな・カタカナ・漢字があるかどうかチェック。 あったらTRUE
    def isJPN(string):
    for ch in string:
    name = unicodedata.name(ch)
    if "CJK UNIFIED" in name \
    or "HIRAGANA" in name \
    or "KATAKANA" in name:
    return True
    return False
    def main():
    if isJPN(inputtext.decode('utf-8')) is False: # 英数字のみなら
    text = unicodedata.normalize('NFKC', inputtext.decode('utf-8')) # 全角をすべて半角に変更
    with open(menu, 'r') as readf: # Menuファイルを開く
    for line in readf: # 1行づつ
    if line.find((text.upper() + ',').encode('utf-8')) == 0: # 先頭からテキストが一致して、その直後に','があったら
    itemname = line[:-1] # その行を取得
    print(itemname)
    if __name__ == '__main__':
    main()
    view raw textmatch.py hosted with ❤ by GitHub
  • 結果

    (pytest2.7.13) ubuntu@ip-10-0-0-253:~/pytest$ python testmatch.py
    UDON001,500
  • Thanks!!
    以下、参考にさせて頂きました。
    http://minus9d.hatenablog.com/entry/2015/07/16/231608


2017/02/17

文字列から日付へ変換 - SQL Server

  • Goal
    日付と時間の別々の文字列を、Datetime型に変換する。
    ”曜日, 月 日, 年” と ”時間:分:秒 AM/PM” をDatetime型に変換

    EX)
    As is
             Wednesday, February 15, 2017 と 1:25:22 PM
    To be
            2017-02-15 13:25:22.000

    文字列分解して無理矢理変換している。。。
    良い方法があったら教えて欲しい。
     
  • Source


    DECLARE @tmp TABLE (datechar VARCHAR(200),
    timechar VARCHAR(200))
    --sample dataset
    --Insert
    INSERT INTO @tmp (datechar,timechar)
    VALUES ('Wednesday, February 15, 2017','1:25:22 PM')
    , ('Monday, May 15, 2017','12:35:16 AM')
    --select
    select datechar
    , timechar
    --CONVERT from Char to Datetime....
    , CONVERT(DATETIME,
    -- 無理矢理書式を整える
    -- Year 4 digit
    Right(datechar,4)
    -- Month 2 digit
    + (CASE substring(datechar,
    CHARINDEX(' ',datechar)+1,--一つ目の空白の後ろから
    CHARINDEX(' ',datechar,CHARINDEX(' ',datechar)+1)-CHARINDEX(' ',datechar))--次の空白の前
    WHEN 'January' THEN '01'
    WHEN 'February' THEN '02'
    WHEN 'March' THEN '03'
    WHEN 'April' THEN '04'
    WHEN 'May' THEN '05'
    WHEN 'June' THEN '06'
    WHEN 'July' THEN '07'
    WHEN 'August' THEN '08'
    WHEN 'September' THEN '09'
    WHEN 'October' THEN '10'
    WHEN 'November' THEN '11'
    WHEN 'December' THEn '12'
    ELSE 'error' END)
    -- Day 2 digit
    + substring(datechar,CHARINDEX(' ',datechar,CHARINDEX(' ',datechar)+1)+1,2)
    + ' '
    -- time
    + timechar) as datetime_type
    from @tmp
    GO

2017/02/09

awk サンプル ファイル分割など

  • サンプル事例
    以下のファイルの文字列コントロールのサンプル
    1列目(名前)2列目(出身地)3列目(誕生日)4列目(男女 John Osaka 12/05/2000 M Mark Tokyo 12/10/2001 M Emily Akita 01/24/1998 W Sam Osaka 10/01/1988 M Toshi Osaka 11/01/2000 M 1.1列目 だけ抜き出し 2.if 条件付き分岐 大阪出身だったら名前だけ、それ以外は出身地を名前を表示 3.ファイルの分割 $4(男女)の項目をファイル名とし、出力ファイルを分割
  • Source
    -- Input 用 SAMPLEファイル
    $ cat birth.dat
    John Osaka 12/05/2000 M
    Mark Tokyo 12/10/2001 M
    Emily Akita 01/24/1998 W
    Sam Osaka 10/01/1988 M
    Toshi Osaka 11/01/2000 M
    --$1 = 1列目(名前)$2 = 2列目(出身地)$3 = 3列目(誕生日) $4 = 4列目(男女)
    -- 名前だけを表示する
    $ awk '{print $1}' birth.dat
    John
    Mark
    Emily
    Sam
    Toshi
    -- if 条件付き分岐 大阪出身だったら名前だけ、それ以外は出身地を名前を表示
    $ awk '{if($2=="Osaka")print $1; else print $1,$2;}' birth.dat
    John
    Mark Tokyo
    Emily Akita
    Sam
    Toshi
    -- ファイルの分割 $4(男女)の項目をファイル名とし、出力ファイルを分割
    -- if をつかってファイル名を指定しても当然可能
    $ awk '{print $1,$3,$2 > $4".dat"}' birth.dat
    $ cat W.dat
    Emily 01/24/1998 Akita
    $ cat M.dat
    John 12/05/2000 Osaka
    Mark 12/10/2001 Tokyo
    Sam 10/01/1988 Osaka
    Toshi 11/01/2000 Osaka
    view raw awk_sample.sh hosted with ❤ by GitHub

2017/02/08

XMLファイルからテーブルへのINSERT

  • Goal

    XMLファイルからテーブルの要素を抜き出して、INSERTしたい。
    SQLServer バージョン

  • How

    xqueryを使って実施。


    DECLARE @xml as XML
    --temp Manual set
    SET @xml = CAST('<Logs>
    <LogDateEntry date="01/01/2017">
    <Details time="05:16:26" Type="GET" subject="TEST1" details="This is test" value="50" target="SERVER1" />
    <Details time="05:16:35" Type="PUT" subject="TESTSE" details="aseasdfasdfa" value="125" target="SERVER3" />
    <Details time="05:25:24" Type="PUT" subject="ddddd" details="asdfasdfasdfsafdsafdasdfasfdsadfasdf" value="1524" target="SERVER1" />
    <Details time="05:45:23" Type="GET" subject="asdfasdfasdfasdfasfdsafd" details="asdfasfdsafdasfdasdfasdfasdfasdfasdfasdfsa" value="12" target="SERVER1" />
    </LogDateEntry>
    </Logs>' as XML)
    --Insert
    --insert into TEST_LOG(DATE,TIME,alertType,subject,details,value,target,creation_date)
    --select
    select CONVERT(VARCHAR(50),TLOG.c.query('data(..//@date)')) as DATE
    , CONVERT(VARCHAR(1000),TLOG.c.query('data(.//@time)')) as TIME
    , CONVERT(VARCHAR(1000),TLOG.c.query('data(.//@Type)')) as AT
    , CONVERT(VARCHAR(1000),TLOG.c.query('data(.//@subject)')) as SUB
    , CONVERT(VARCHAR(1000),TLOG.c.query('data(.//@details)')) as details
    , CONVERT(NUMERIC(18,3),CONVERT(VARCHAR(1000),TLOG.c.query('data(.//@value)'))) as value
    , CONVERT(VARCHAR(100),TLOG.c.query('data(.//@target)')) as target
    , getdate()
    from @xml.nodes('/Logs/LogDateEntry/Details') as TLOG(c)
    GO

2017/01/31

FTPで送られてくるXMLファイルをSQLServerに自動的にロードする

  • Goal

    FTPで送られてくるXMLファイルを自動的にSQLServerのテーブルにロードする。
    SQLServer上にテーブル名Logxmlを作成し、受信したXMLを1カラムにINSERTする。LogxmlテーブルのSQLは以下の通り。この後、必要に応じてXML形式のカラムからトリガーやTSQLなどで各要素・カラムの切り出しをする。

    CREATE TABLE [dbo].[Logxml](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [logxml] [xml] NULL,
    [filename] [varchar](500) NULL,
    [creation_date] [datetime] NULL,
    CONSTRAINT [PK_Logxml] PRIMARY KEY CLUSTERED
    (
    [ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO


  • How

    PowerShellで実施。
    ターゲットのフォルダから対象のファイル名を取得して、Bulkインサートを行う。
    スクリプトは常駐させておいて、60秒間隔で起動。
    (本当はWMIでやりたいので、後日トライ予定)

    #一定時間間隔で起動
    while(1){
    #終了時は、[Ctrl + C] を押す
    Write-Host "End to [Ctrl + C]"
    #Connect to the SQL database
    $SQLserver = "0.0.0.0" -- SQL server name
    $Icatalog = "TEST" -- Database name
    $UID = "UID"
    $PASSWORD = "PASSWORD"
    $conn = New-Object System.Data.SqlClient.SqlConnection
    $conn.ConnectionString = "Server = $SQLserver; Database = $Icatalog; User ID = $UID; Password= $PASSWORD;"
    $Conn.Open()
    $Command = New-Object System.Data.SQLClient.SQLCommand
    $Command.Connection = $Conn
    #FTPで受信するフォルダPathの設定
    $filepath = "C:\inetpub\ftproot\test"
    #フォルダ内の全てのXMLファイルをリスト化
    $filelist = Get-ChildItem -name $filepath\*.xml
    #リストの上から順番にLoad
    foreach ($filename in $filelist){
    $fileinput = Get-Content $filepath\$filename
    echo "Loading $filename"
    $output | foreach {
    $Command.CommandText = "INSERT INTO dbo.Logxml(logxml,filename,creation_date) SELECT CONVERT(XML, BulkColumn) AS BulkColumn,'$filename',getdate() FROM OPENROWSET(BULK '$filepath\$filename', SINGLE_BLOB) AS X"
    $Command.ExecuteNonQuery() | out-null
    }
    #アーカイブフォルダーへファイルの移動
    Move-Item $filepath\$filename $filepath\archive
    }
    $Conn.Close()
    #60秒待機
    Start-Sleep -Seconds 60
    }

2017/01/30

特定の文字の間の文字を切り出す - SQL


  • Goal
    文字列から特定の文字の間の文字を抜き出す
    (例)  1234567890123 Hello 0980 982134 1adfllkjasf から1つ目の空白と
       2つ目の空白の間の文字列を抜き出す。
       結果として、Helloだけを抜き出す。
  • Source

    INPUT 1st_BLANK 2nd_BLANK START_POSITION LENGTH GOAL
    1234567890123 Hello 0980 982134 1adfllkjasf 14 20 15 5 Hello
    1234567890123456 World!! 0980 982134 1adfllkjasf 17 25 18 7 World!!
    view raw Result.txt hosted with ❤ by GitHub
    SELECT INPUT
    --CHARINDEX(検索文字列,検索対象文字列,<OPTION>開始位置)
    , CHARINDEX(' ',INPUT) AS '1st_BLANK' --1st blank position
    , CHARINDEX(' ',INPUT,CHARINDEX(' ',INPUT)+1) AS '2nd_BLANK' --2nd blank position
    , CHARINDEX(' ',INPUT)+1 AS START_POSITION
    , CHARINDEX(' ',INPUT,CHARINDEX(' ',INPUT)+1) - (CHARINDEX(' ',INPUT)+1) as LENGTH -- 2nd blank - start position
    --SUBSTRING(文字列,開始位置,長さ)
    , SUBSTRING(INPUT,CHARINDEX(' ',INPUT)+1,CHARINDEX(' ',INPUT,CHARINDEX(' ',INPUT)+1) - (CHARINDEX(' ',INPUT)+1)) as GOAL
    FROM (VALUES('1234567890123 Hello 0980 982134 1adfllkjasf')
    ,('1234567890123456 World!! 0980 982134 1adfllkjasf')) as T(INPUT)

2017/01/28

BOM構成表情報を取得するAPI

  • Goal
    BOMPEXPL.EXPLODER_USEREXITを呼び出して、BOM_EXPLOSION_TEMPテーブルに出力させる。APEXのアプリから、EBSのBOM構成表を呼び出したりできる。
    INTENDED BILLの画面と同じ情報を引っ張ってこれる。

  • Sourceサンプル
    DECLARE
    l_err_msg VARCHAR2(4000);
    l_error_code VARCHAR2(4000);
    l_grp_id NUMBER;
    l_session_id NUMBER;
    l_count NUMBER;
    l_item_id NUMBER;
    --
    BEGIN
    SELECT USERENV ( 'sessionid') INTO l_session_id FROM DUAL;
    dbms_output.put_line ('l_session_id is - '||l_session_id );
    bompexpl.exploder_userexit (
    verify_flag => 0,
    org_id => XXX, -- Organization_ID
    order_by => 1,
    grp_id => 999999, -- 999999をセットして動かしている
    session_id => '', -- blank でも動く
    levels_to_explode => 10,
    bom_or_eng => 1, --1=BOM 2=ENG
    impl_flag => 1, --1=Implemented Only 2=Implemented and Unimplemented
    plan_factor_flag => 2, --1=yes 2=No
    explode_option => 2, --1=ALL 2=Current 3=Current and Future
    module => 1, --1=Costing 2=BOM 3=Order Entry 4=ATP 5=WSM
    cst_type_id => 1,
    std_comp_flag => 2,
    expl_qty => 5,
    item_id => l_item_id,
    alt_desg =>'',
    comp_code => '',
    rev_date => TO_CHAR ( SYSDATE, 'YYYY/MM/DD HH24:MI:SS'),
    err_msg => l_err_msg ,
    error_code => l_error_code);
    dbms_output.put_line ('l_err_msg is '||l_err_msg );
    dbms_output.put_line ('l_error_code is '||l_error_code );
    EXCEPTION
    WHEN OTHERS
    THEN
    RAISE_APPLICATION_ERROR(-20001, SQLERRM);
    --
    commit;
    END;
    /

2017/01/27

オラクル スケジューラー テンプレ

  • Goal
    DBMS_SCHEDULERパッケージを使って、PL/SQLブロックや、プロシージャのスケジュールを作る。Oracle Schedulerを使う。

  • Sourceサンプル
    Sample1 - PLSQLブロックを5時57分から23時57分まで、毎時間流す
    Sample2 - プロシージャを2時間おきに
    流す

    ---- Sample1
    BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
    job_name => '"XXX"."YYYYYYY"', -- JOB の名前
    job_type => 'PLSQL_BLOCK',
    job_action => 'BEGIN
    --dbms_mview.refresh(''------'',''c'', NULL, TRUE, FALSE, 1, 0, 0, FALSE, FALSE);
    END;',
    number_of_arguments => 0,
    start_date => TO_TIMESTAMP_TZ('2017-01-25 00:00:00.000000000 AMERICA/CHICAGO','YYYY-MM-DD HH24:MI:SS.FF TZR'),
    -- 5時57分から23時57分まで、毎時間流す
    repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI,SAT;BYHOUR=5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23;BYMINUTE=;BYSECOND=0',
    end_date => NULL,
    enabled => FALSE,
    auto_drop => FALSE,
    comments => 'Refresh ----- every 1 hour');
    DBMS_SCHEDULER.SET_ATTRIBUTE(
    name => '"XXX"."YYYYYYY"', -- JOB の名前
    attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);
    DBMS_SCHEDULER.enable(
    name => '"XXX"."YYYYYYY"'); -- JOB の名前
    END;
    ---- Sample2
    BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
    job_name => '"XXX"."YYYYYYY"', -- JOB の名前
    job_type => 'STORED_PROCEDURE',
    job_action => 'XXXX.ZZZ_MAIN_PKG.XXX',--- Procudere名
    number_of_arguments => 0,
    start_date => NULL,
    -- 6時から20時まで2時間おきに流す
    repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI,SAT;BYHOUR=6,8,10,12,14,16,18,20;',
    end_date => NULL,
    enabled => FALSE,
    auto_drop => FALSE,
    comments => 'test');
    DBMS_SCHEDULER.SET_ATTRIBUTE(
    name => '"XXX"."YYYYYYY"', -- JOB の名前
    attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);
    DBMS_SCHEDULER.enable(
    name => '"XXX"."YYYYYYY"');
    END;
  • 参考 Thanks!!
    Oracle Scheduler マニュアル

2017/01/17

日付から年と週番号を求める - ISO方式 / VB6の場合

  • Goal
    日付からISO8601方式での年+週番号(YY-WWのフォーマット)で出力する。
    ISO8601では、月曜日が週の始まりで、最初の木曜日を含む週が、その年の第1週として計算する。 

  • Sourceサンプル
    手順: 1. ターゲットの日付を含む週の月曜日を求めて、年を算出する
        2. ISO方式を考慮した週番号を算出する。
    想定結果(YY-WW): 2017/01/01(SUN) = 16-52
                                     2018/01/01(MON) = 18-01
                                     2019/01/01(TUE) = 19-01
                                     2020/01/01(WED) = 20-01
                                     2021/01/01(FRI) = 20-53
                                     2022/01/01(SAT) = 21-52
                                     2023/01/01(SUN) = 22-52

    Private Sub Command1_Click()
    Dim A As String
    Dim TEST_D As Date
    TEST_D = #1/1/2018#
    A = Format(TEST_D - (Weekday(TEST_D, vbMonday) - 1), "yy")
    & "-"
    & Format((DatePart("ww", TEST_D, vbMonday, vbFirstFourDays)), "00")
    Print A
    End Sub


  • 参考 Thanks!!
    DatePart function - Microsoft Developer Network
    年月日から週番号 : 計算結果の確認用




     

2017/01/15

Monopoly DEAL モノポリー DEAL ー カードゲーム

最近、よくやるやつ。モノポリーほど時間がかからなくて、お金のやり取りとかがめんどくさくないカードゲーム版のモノポリー。全くルールは違っていて、交渉も必要ない。
ギリギリまで大逆転も可能で結構よくできていると思う。Deal Breaker とJust say no が、大富豪のジョーカーとスペード3返しみたいな感じで使えるのが私は好き。(よくわからん説明。。。。)

子供10才は可能。6才はまだ無理。我が家では、モノポリーよりは険悪にならずにプレイできる。

モノポリー ディール - Monopoly Deal

2017/01/12

.bash コマンドインデックス

.bash のコマンド集

1. which bash - bash の種類を確認
   #/bin/bash
   #この結果をスクリプトの一行目に表示す
   #!/bin/bash
2. cd - フォルダの変更
3. ls - フォルダの中身を表示
4. rm - ファイル、フォルダの削除
5. cp - ファイルのコピー
6. mv - ファイルの移動
7. mkdir - ディレクトリを作成
8. pwd - 現在のフォルダパスを表示
9. chmod - ファイル・ディレクトリのアクセス権限変更
10. tee - 標準出力+ファイル出力の同時出力
11. awk - 文字列コントロール/編集
12. xargs - 
標準入力から生成したコマンドラインを実行する

タスクマネージャをリモートデスクトップ上で起動

- Issue
  リモートデスクトップ接続中Ctrl+Alt+Deleteでタスクマネージャを起動できない。

 (知らずにしょーもない時間を潰す…)

- 対策
  1. Ctrl+Shift+Esc
  2. Run taskmgr
     Windows key + R -> taskmgr
  3. タクスバー上で右クリックする



- Thanks!
  
  How-to Geek - Six ways to open the windows task manager  

2017/01/05

SQL server ログファイルが大きくなる

- Issue
  SQL Serverのログファイルが大きくなる。特に、洗い替えの処理等を頻繁に行うような場合。




- 原因と対策
 Recovery modelの設定が原因。 Fullになっている。
 それをSimpleに変更する。
 (注)洗い替え処理なので、ロールバックが重要ではないので。。。


--参考
--https://technet.microsoft.com/en-us/library/ms189493(v=sql.105).aspx
--
USE <database-name>;
GO
-- DBの設定を、SIMPLEモードにする
ALTER DATABASE <database-name> SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (<log-file-name>, 1);
GO
-- 設定をもどす。洗い替えならSIMPLEのままでよい
ALTER DATABASE <database-name> SET RECOVERY FULL;
GO
view raw Shrink_LOG.sql hosted with ❤ by GitHub