2017/08/30

pg_constraint の内部キー、外部キーは、pg_class、pg_attribute にアクセスしないと取得できない。

・contype = 'f' ・conrelid(内部テーブル):smallint ・confrelid(外部テーブル):smallint ・conkey(内部キー): smallint[] ・confkey(外部キー): smallint[]

まず、内部キーテーブルを作成して、副問い合わせで外部キーも連結させる。 内部キー、内部キーは数値配列なので抽出に「ANY」を利用する。

[sql] SELECT origin.*, pg_class.oid as foreign_class_id, pg_class.relname as foreign_relname, pg_attribute.attnum as foreign_attnum, pg_attribute.attname as foreign_attname FROM ( SELECT pg_constraint.conrelid , pg_class.oid as pg_class_id , pg_class.relname , pg_attribute.attnum , pg_attribute.attname , pg_constraint.confrelid , pg_constraint.confkey , pg_constraint.contype FROM pg_constraint LEFT JOIN pg_attribute ON pg_constraint.conrelid = pg_attribute.attrelid AND pg_attribute.attnum = ANY(pg_constraint.conkey) LEFT JOIN pg_class ON pg_constraint.conrelid = pg_class.oid WHERE pg_constraint.contype = 'f' AND pg_constraint.conrelid = 'pg_classのID' ) AS origin LEFT JOIN pg_attribute ON origin.confrelid = pg_attribute.attrelid AND pg_attribute.attnum = ANY(origin.confkey) LEFT JOIN pg_class ON origin.confrelid = pg_class.oid ; [/sql]

  2017/07/12

テーブル一覧は「pg_tables」で 取得できるが、relfilenode などの細かい情報まではわからない。

「pg_class」「pg_tables」「pg_namespace」を利用するとある程度細かい情報まで取得できる。

publicのテーブル一覧情報取得

SELECT * FROM pg_class LEFT JOIN pg_tables ON pg_tables.tablename = pg_class.relname LEFT JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace WHERE relkind = 'r' AND relfilenode > 0 AND nspname = 'public';

*「relkind = 'r'」テーブル指定

  2017/07/08

Chainerインストール

$ pip install --upgrade pip
$ pip install chainer

chainer/chainerからサンプルをダウンロード


$ brew tap caskroom/cask

サンプルを動かす

機械学習のHello-World「train_mnist.py 」を動かしてみる。 *初回時は画像素材をダウンロード *デフォルト設定だと20回学習

$ python3 train_mnist.py 
GPU: -1
# unit: 1000
# Minibatch-size: 100
# epoch: 20

Downloading from http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz...
Downloading from http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz...
Downloading from http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz...
Downloading from http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz...
epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.191203    0.107441              0.942          0.9668                    20.6231       
2           0.0746089   0.0724309             0.9769         0.9779                    43.3326       
3           0.0483745   0.0715516             0.9848         0.9798                    66.719        
4           0.0341754   0.0789327             0.988833       0.9795                    89.0281       
5           0.0292061   0.0925641             0.9908         0.9752                    109.421       
6           0.0256707   0.0715148             0.991683       0.9806                    132.37        
7           0.0188833   0.0750383             0.993767       0.9808                    153.467       
8           0.0178651   0.0916148             0.993967       0.9798                    173.683       
9           0.0190301   0.0876899             0.9941         0.9805                    194.203       
10          0.0147034   0.0869119             0.995183       0.9813                    217.873       
11          0.0140121   0.088435              0.995817       0.9802                    242.648       
12          0.0151053   0.0939939             0.99495        0.9823                    268.818       
13          0.0103742   0.0957632             0.996717       0.9829                    292.792       
14          0.00854318  0.0905123             0.997467       0.9821                    317.834       
15          0.00866289  0.118263              0.99745        0.9766                    343.89        
16          0.0151463   0.0986677             0.99545        0.9817                    368.499       
17          0.00866498  0.0853589             0.99735        0.9842                    395.06        
18          0.00716674  0.131718              0.997883       0.9776                    421.821       
19          0.00858464  0.111747              0.997567       0.9834                    448.749 
20          0.0127154   0.103087              0.996683       0.9814                    474.769     

OpenCV3インストール

運よくNVIDIA製のグラボを積んだマシンを持っていたらGPUモードで計算させられます。 (自分は持ってない・・・) NVIDIAからCUDAダウンロード

$ brew tap homebrew/science
$ brew install opencv3 --with-contrib --with-python3 --without-python
$ vi .bashrc
export PATH=/Developer/NVIDIA/CUDA-8.0/bin:$PATH
export DYLD_LIBRARY_PATH=/Developer/NVIDIA/CUDA-7.5/lib:$DYLD_LIBRARY_PATH
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

OpenCV3ライブラリリンク

$ ln -s /usr/local/Cellar/opencv3/3.2.0/lib/python3.6/site-packages/cv2.cpython-36m-darwin.so ~/.pyenv/versions/3.6.1/lib/python3.6/site-packages/
$ ln -s /usr/local/Cellar/opencv3/3.2.0/lib/python3.6/site-packages/cv2.cpython-36m-darwin.so ~/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/

OpenCV読み込みテスト

$ python
>>import cv2
>>

  2017/07/07

インストーラでインストール

最近では pkg でインストールできるので、そちらを利用しても良いかもしれない。 Download the latest version for Mac OS X

HomeBrew でインストール

*brew、pipインストール済み *.bash_profileでpyenvのパスを通しておく

Xcodeインストール対策

Xcodeをインストールしていると zlib がないとかで怒られる時がある。

$ xcode-select --install

pyenvインストール


$ brew update
$ brew install pyenv
$ pyenv --version
pyenv 1.1.0

*既に pyenv がインストールされている場合はアップグレード


$ brew update && brew upgrade pyenv

*2019/08/25 Mojave の場合

Mojave の場合さらに zlib がうまくインストールされていない(?)ので、手動でインストール


sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

pyenvのパスを通す

$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

Python3.x系インストールの場合

後述のAnacondaをインストールした方が楽なような気がするが、とりあえず3.x系をインストール *2019/08/25 Anaconda は別系統のため、利用目的以外インストールしない方が良い


$ pyenv install --list
$ pyenv install 3.6.1
$ pyenv versions
* system
  3.6.1 (set by /Users/yoo/.python-version)

バージョン切替

~/.python-version にファイルが作成されていると強制的に読まれるので削除しておく


$ rm ~/.python-version

$ pyenv global python3.6.1
$ pyenv local python3.6.1
$ pyenv rehash
$ pyenv versions
  system
* 3.6.1 (set by /Users/yoo/.python-version)

各種ライブラリインストール

バージョンを確認して、

pip -V
pip 9.0.1 from /Users/yoo/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages (python 3.6)

お好みで

$ pip install numpy scipy six pandas matplotlib scikit-image

Anaconda3.x系インストールの場合

*2019/8/25 pythonが衝突する事があるので Anaconda インストールには注意


$ pyenv install anaconda3-4.4.0
$ pyenv global anaconda3-4.4.0
$ pyenv local anaconda3-4.4.0
$ pyenv rehash
$ pyenv versions
  system
  3.6.1
* anaconda3-4.4.0 (set by /Users/yoo/.python-version)
$ python -V
   Python 3.6.1 :: Anaconda 4.4.0 (x86_64)

Anaconda確認


$ conda -V
   conda 4.3.21
$ conda list

  2017/06/08

get_defined_constants() そのままだと全ての define値を取得される。 引数に「true」指定すると、連想配列の「user」にユーザ指定した define値を取得できる。

        $defined_constants = get_defined_constants(true);
        $this->defined_constants = $defined_constants['user'];

  2017/05/31

ハイライト選択

Cmd+D

全て選択

Cmd+Ctrl+G

  2017/05/31

Macのbashはデフォルトで rename がないため、for ; do を利用して一括変換する

「.m4a.mp3」を「.m4a」に一括変換

for f in *.m4a.mp3; do mv "$f" "${f/.mp3/}"; done

f は任意の変数で、結果は「"$f"」とダブルクォートでくくって扱う

for 変数 in ファイル検索文字; do mv "$変数" "${変数/置換対象文字/置換文字}"; done

  2017/05/11

JavaScriptでAPIからデータ取得・処理する際、ネスト地獄で複雑なコードになりがち。 かと言って、AngularやReactなどのフレームワークを使うと勉強コスト、スパゲティー設計など本末転倒な結果になりやすい。

フレームワークの最大のデメリットは、

中で何が行われているか?ソースを解読しないとわからない

と言うことで、こみいった実装をせずシンプルに実装してみる。

(1) APIリクエストの配列設定 (2) Ajax処理の抽象化 (3) 並列処理の抽象化 (4) コールバック処理の考慮


    $(document).on('click', '.action-api', function() {
        //API設定(抽象化する必要あり)
        var requests = [
            {
                url: 'https://xxxx/api/user',
                params: {'user_id': 394},
                callback: callbackUser
            },
            {
                url: 'https://xxxx/api/order',
                params: {'user_id': 394, 'item_id': 31},
                callback: callbackApplication
            },
        ];

        //並列処理実行
        parallelAjax(requests, doneCallback);

        //各APIリクエストのコールバック
        function callbackUser(results) {
            console.log(results);
        }
        function callbackApplication(results) {
            console.log(results);
        }
        //並列処理完了後のコールバック
        function doneCallback(results) {
            console.log(results);
        }
    });

var requestAjax = function(values){
    var $ajax = $.ajax(values);
    var defer = new $.Deferred();
    $ajax.done(function(data, status, $ajax){
        defer.resolveWith(this, arguments);
    });
    $ajax.fail(function(data, status, $ajax){
        defer.resolveWith(this, arguments);
    });
    return $.extend({}, $ajax, defer.promise());
};

function parallelAjax(requests, callback) {
    var results = [];
    $.each (requests, function(index, value) {
        var $ajax = requestAjax({url: value.url, data: value.params}).done(function(res, status) {
            if (value.callback) {
                value.callback(res);
            }
        });
        results.push($ajax);
    });
    $.when.apply(null, results).done(function(){
        if (callback) callback(results);
    });
    $.when.apply(null, results).fail(function(){
    });
}

APIリクエストの配列設定

並列処理は後々ループで実行ため、オブジェクト配列で設定しておく。 差し当たり以下の項目で設定 ・URL ・URLパラメータ ・API処理後のコールバック (その他、POST/GETやデータ型なども設定できると良い?)


        var requests = [
            {
                url: 'https://xxxx/api/user',
                params: {'user_id': 394},
                callback: callbackUser
            },
            {
                url: 'https://xxxx/api/application',
                params: {'user_id': 394},
                callback: callbackApplication
            },
        ];

こうすることで、callbackを別モデル、ファイルなどに分離して記述できるかと。 実用レベルだと、APIリクエスト設定も動的に抽象化が必要ですが。。。

Ajax処理の一般化

並列処理をする際「jQuery.Deferred」を利用 ざっとした流れは、 (1) Deferredオブジェクトを作成 (2) Ajaxリクエスト (3) Ajax処理後返り値を Deferred.resolveWith() でコールバック

詳しくは、 ・「爆速でわかるjQuery.Deferred超入門」「結局jQuery.Deferredの何が嬉しいのか分からない、という人向けの小話」を参照


var requestAjax = function(values) {
    var $ajax = $.ajax(values);
    var defer = new $.Deferred();
    $ajax.done(function(data, status, $ajax) {
        defer.resolveWith(this, arguments);
    });
    $ajax.fail(function(data, status, $ajax) {
        defer.resolveWith(this, arguments);
    });
    return $.extend({}, $ajax, defer.promise());
};

並列処理の一般化

(1) 配列化したリクエストをループで処理 (2) Ajax実行 (3) APIリクエストで設定したコールバックを実行 (3) $.whenで並列処理完了後の処理


function parallelAjax(requests, callback) {
    var results = [];
    $.each (requests, function(index, value) {
        var $ajax = requestAjax({url: value.url, data: value.params}).done(function(res, status) {
            if (value.callback) {
                value.callback(res);
            }
        });
        results.push($ajax);
    });
    $.when.apply(null, results).done(function(){
        if (callback) callback(results);
    });
    $.when.apply(null, results).fail(function(){
    });
}

  2015/04/23

FTPサーバは「vsftpd」をインストールする。

aptitude install vsftpd

vi /etc/vsftpd.conf

  2015/04/09

SublimeTextの文字コードはUTF8のため、基本的にその他エンコードファイルは文字化けしてしまうが、以下をインストールすることでShift-JISファイルを開くことができる。

・「ConvertToUTF8」 ・「Codecs33」

ConvertToUTF8インストール

SublimeTextのパッケージインストールコマンドでインストール

Codecs33インストール

Codecs33-osx.zipをダウンロードし、

~/Library/Application Support/Sublime Text 3/Packages

に「Codecs33」として展開

SublimeTextを再起動すると、SJISファイルを開くことができる。

UTF-8で保存

SJISで開いているだけなので、実際にUTF-8で保存するには、「File > Save with Encoding > UTF-8」を選択する。

pngファイルの軽量化
Google DriveのIconを再起的に削除
php-markdownでバニラPHPなコードブロック処理
laravel-ffmpeg を使う
2021年版 Ubuntu + certbot + Let's Encrypt でサーバ証明書設定
GihHub のデフォルトでない master ブランチを checkout する
マルチログインで未認証のリダイレクト
Homebrew で Redis をインストール
CSS だけでスムーズスクロール
EC-CUBE4 で Gmail の smtp を利用する
Amazon Linux 2 の amazon-linux-extras とは
UNIQUE カラムのバリデーションで自分自身を除外して更新
フォーム有効期限切れで Page Expired をリダイレクト
ログを日付でローテーションやクリアや削除
Homebrew で PHP8.0 から PHP7.4 にダウングレード
Big sur で zsh 移行と Homebrew アップグレード
Mac に minikube をインストール
途中から .gitignore に追加する
Larevel 6.x から Laravel 8.x にバージョンアップ
Composer で Allowed memory size (メモリ不足)エラー
Blade でカスタムクラスを利用する
git push git pull にブランチ指定せずに実行する
git pull や git push できなくなったとき
Docker のコンテナからホストOS に接続
Mac で ローカル IP アドレス(ipv4)のみを表示する
ホストOS から Docker の MySQLコンテナに接続
caching_sha2_password のエラー
node-config で環境設定ファイルを利用する
rootパスワードを初期化(再設定)する
Git から clone したときのエラー対処
Mac に MySQL をインストール
Mac に PostgreSQL をインストール
Laravel 環境構築 - Mac ネイティブ編
Firebase 入門 - Firebase とは
Firebase 入門 - CLI インストールとデータベースの設定
AWS 無料枠(t2.micro)で容量とメモリエラー
Cloud9 を起動する -初心者編-
gcloud で GCEインスタンスを起動してみる
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証