コンテンツにスキップ

Home

PeerCast民と麻雀

新宿で麻雀オフ会してきました。

メンツは以下。

@Blood_chin@tottokotototo は既にオフしたことありますが、きーばしさんが初めてでした。

結果は10半荘打って、2-2-2-4-47

もっと大負けしそうなところで親国士の16000オールを上がれたのでよかったー😮‍💨

あと、スリーファイブに行ったんですが、セット代が1卓555円/時間と超格安だったのでマジで助かりました。永遠にこの料金でお願いします。

息抜きをするいい機会となりました。

ありがとうございました。

CentOSにMeCabをインストールする

白ヤギコーポレーションが公開しているモデルを使用する際に、pipで色々インストールするほかにサーバの方にMeCabをインストールしておく必要があります。インストールしないとエラーになったので多分そうだと思います。

前提

  • CentOS7
  • python 3.6.13
  • pip 21.2.4

MeCab のインストール

sudo yum install -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm
sudo yum makecache
sudo yum install -y mecab mecab-ipadic mecab-devel

gensimのインストール

gensimが4.0以降のやつを使うと、よくエラーになるので、3.8.3をインストールにします。 ※エラーになる理由はわかってません。やる気が出たときにデバッグします。

pip install gensim=3.8.3

モデルの取得

wget http://public.shiroyagi.s3.amazonaws.com/latest-ja-word2vec-gensim-model.zip
unzip latest-ja-word2vec-gensim-model.zip

確認

word2vec.gensim.model と同じ階層に以下コードを書いたpythonファイルを置く。

from gensim.models.word2vec import Word2Vec

model_path = '/path/to/word2vec.gensim.model'
model = Word2Vec.load(model_path)

参考

Amazon IVS でライブストリーミング配信

Amazon Interactive Video Service (Amazon IVS) を利用するとあっという間にOBSからライブストリーミング配信ができます。

IVS チャネルの作成

  1. https://us-west-2.console.aws.amazon.com/ivs/home に移動してチャネルの作成をします。
  2. チャネル名を入力して、チャネルの作成ボタンを押して作成します。 基本はデフォルトのままで良いと思いますが、配信動画を保存したい場合は、ストリームの記録と保存S3 への自動記録を選択しましょう。
  3. ストリーム設定再生設定を確認しておきましょう。

ライブストリーミングの開始

今回はOBSを使ってライブストリーミングをします。

OBSの設定画面から設定します。

  1. 配信設定

  2. サービス: カスタム

  3. サーバ: ストリーム設定の取り込みサーバー
  4. ストリームキー: ストリーム設定のストリームキー

  5. 映像設定

  6. 基本解像度: 1280x720

  7. 出力解像度: 852x480
  8. 縮小フィルタ: バイキュービック (先鋭化スケーリング、16のサンプル)
  9. FPS共通知: 30

  10. 出力設定

  11. エンコーダ: x264

  12. レート制御: CBR
  13. ビットレート: 2000(または、それ以下)
  14. キーフレーム間隔: 2
  15. CPU使用のプリセット: veryfast
  16. チューン: ゼロレイテンシー

設定値は適宜好きなように変更してもOKです。本設定はライブストリーミングの開始の内容をそのまま流用しています。

入力できたら、OKボタン押します。

OBSのメイン・ウィンドウの左下にある「ソース」セクションで配信したいやつを選択しましょう。 配信開始をクリックすると、ライブ配信が開始されます。

配信内容は再生設定再生URLから視聴できます。 VLCなどを使って見てみましょう。

参考

Dark Mode Switch でダークモード対応

Dark Mode Switch というJavaScriptのライブラリを使って本サイトのダークモード対応をしました。 README.md に書いてある通りに実装するだけで簡単にできます。

README.md の内容丸パクリですが、実装の仕方を残しておきます。

必須条件

  • Bootstrap 4.x or 5.x

使い方

  1. ダークモードトグル用のカスタムスイッチを追加し、続いて dark-mode-switch.min.js スクリプトを追加します。 Bootstrap 4.x
    <div class="custom-control custom-switch">
      <input type="checkbox" class="custom-control-input" id="darkSwitch" />
      <label class="custom-control-label" for="darkSwitch">Dark Mode</label>
    </div>
    <script src="dark-mode-switch.min.js"></script>
    
    Bootstrap 5.x
    <div class="form-check form-switch">
      <input type="checkbox" class="form-check-input" id="darkSwitch" />
      <label class="custom-control-label" for="darkSwitch">Dark Mode</label>
    </div>
    <script src="dark-mode-switch.min.js"></script>
    
  2. dark-mode.css をサイトに合わせて編集します。

dark-mode.css の編集

ダークモードをオンにすると、bodyタグに data-theme="dark" が追加されます。CSSを使ってページ内の要素を対象にすると、次のようになります。

[data-theme="dark"] {
  background-color: #111 !important;
  color: #eee;
}

Amazon Linux 2 + Apache + Codeigniter4 でのWebサーバ構築

Amazon Linux 2 インスタンスに Apache HTTP Server と PHP8 をインストールしてWebサーバを構築します。 Codeigniter4のソースコードを利用したかったので、それ用に少しアレンジしています。

環境

  • Amazon Linux 2 (EC2)
  • PHP 8.0.8
  • Apache HTTP Server 2.4
  • Codeigniter 4

手順

  1. PHP 8 とApache HTTP Server をインストール
    $ sudo amazon-linux-extras enable php8.0
    $ sudo yum install -y httpd php php-devel php-mysqlnd php-mbstring php-gd php-xml php-opcache php-pecl-zip php-pear php-intl mod_ssl
    
  2. Apache HTTP Server を有効化 + 起動
    $ sudo systemctl enable httpd
    $ sudo systemctl start httpd
    
  3. ファイルの許可設定 ec2-user を apache グループに追加し、apache ディレクトリの所有権を /var/www グループに付与し、グループへの書き込み権限を割り当てます。
$ sudo usermod -a -G apache ec2-user
$ exit

再ログインして、グループが適用されているか確認する。

$ groups

/var/www 配下のグループと所有権を変更する。

$ sudo chown -R ec2-user:apache /var/www
$ sudo chmod 2775 /var/www && find /var/www -type d -exec $ sudo chmod 2775 {} \;
$ find /var/www -type f -exec sudo chmod 0664 {} \;
  1. (オプション) Composer のインストール 個人的に Composer を使いたかったのでインストールしています。
$ sudo su -

# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
# php composer-setup.php
# php -r "unlink('composer-setup.php');"
# mv composer.phar /usr/local/bin/composer
# chmod 777 /usr/local/bin/composer
  1. SSL/TLS の設定 自己署名のデジタル証明書を使用して、Amazon Linux 2 で TLS をセットアップしてきます。

サーバーホスト用の自己署名 X.509 証明書とプライベートキーを生成するためのスクリプトを利用してセットアップします。 作成された localhost.crt には証明書とキーの両方が含まれています。

# cd /etc/pki/tls/certs
# ./make-dummy-cert localhost.crt

/etc/httpd/conf.d/ssl.conf を編集します。

  • DocumentRoot "/var/www/html/public" を追加
  • SSLCertificateKeyFile /etc/pki/tls/private/localhost.key をコメントアウト

/etc/httpd/conf.d/vhost.conf を新規追加します(vhost.conf というファイル名でなくてもOK)。

<Directory "/var/www/html">
    AllowOverride All
</Directory>

<VirtualHost *:80>
    DocumentRoot "/var/www/html/public"
</VirtualHost>

完了したら Apache HTTP Server を再起動します。

# systemctl restart httpd
# exit
  1. Codeigniter プロジェクトを作成
    $ cd /var/www/
    $ composer create-project codeigniter4/appstarter html
    

参考

anyenvからnodenvをインストールする

anyenv を使ってバージョン管理ツールを導入する。 brew コマンドを使って様々なバージョン管理ツールをインストールできるが、anyenv で入れておいたほうが後々楽だと思うので。 React を入門するために nodenv をインストールしてみる。

環境

  • macOS Big Sur 11.23
  • Mac mini (M1, 2020)

手順

# anyenv をインストール
% brew install anyenv
% echo 'eval "$(anyenv init -)"' >> ~/.zshrc

# 先に {exec $SHELL -l} を実行したらエラーになったので事前に初期化する
% anyenv install --init
% exec $SHELL -l

# nodenv をインストール
% anyenv install nodenv

# yarn が必要な場合は plugins ディレクトリにこのリポジトリを clone する
% mkdir -p "$(nodenv root)/plugins"
% git clone https://github.com/pine/nodenv-yarn-install.git "$(nodenv root)/ plugins/nodenv-yarn-install"

# インストール (今回は v16.0.0 をインストール)
# インストールできるバージョンを確認
% nodenv install -l
% nodenv install 16.0.0
% nodenv global 16.0.0

Codeigniter 4 メモ

CLI

マイグレーションファイル作成

# php spark migrate:create {table name}

シードファイル作成

# php spark make:seeder {table name}

シード投入

# php spark db:seed {seed file name}

書き方

マイグレーションファイル

<?php
namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class Cars extends Migration
{
    public function up()
    {
        $this->forge->addField([
            'id'     => [
                    'type'           => 'CHAR',
                    'constraint'     => 32,
            ],
            'type'   => [
                    'type'           => 'TEXT',
            ],
            'price'  => [
                    'type'           => 'INT',
                    'constraint'     => 32,
            ],
            'color'  => [
                    'type'           => 'TEXT',
            ],
            'remark' => [
                    'type'           => 'TEXT',
                    'null'           => true,
            ],
            'status' => [
                    'type'           => 'ENUM',
                    'constraint'     => ['onsale', 'sold'],
                    'default'        => 'onsale',
            ],

            // 配列だとdatetime型でdefault設定ができないので以下書き方となる
            'created_at datetime default current_timestamp',
            'updated_at datetime default current_timestamp on update current_timestamp',
        ]);
        $this->forge->addKey('id', true); // PL
        $this->forge->createTable('cars');  // created
    }

    //--------------------------------------------------------------------

    public function down()
    {
        $this->forge->dropTable('cars');
    }
}

【PHP】前月・翌月の末日を求めるときは慎重に

前月・翌月を求めるとき起算日や計算方法によっては、正確に求められないことがあります。

確認環境

  • PHP 7.3
<?php
// 10月31日の前月の末日を取得したい
echo date('Y-m-d', strtotime('2019-10-31 -1 month'));
// 想定:2019-09-30
// 実際:2019-10-01

// 10月31日の翌月の末日を取得したい
echo date('Y-m-d', strtotime('2019-10-31 +1 month'));
// 想定:2019-11-30
// 実際:2019-12-01

// 🤔🤔🤔

多分こんなからくり。

  • 2019-10-31の一月前 => 2019-09-31 => 9月に31日はないので繰り上げて2019-10-01。
  • 2019-10-31の一月後 => 2019-11-31 => 11月に31日はないので繰り上げて2019-12-01。

正確に求めたい場合は以下の指定をしましょう。

<?php
//=====================
// 前月
//=====================
// 一番スマート
echo date('Y-m-d', strtotime('2019-10-31 last day of previous month'));
// 2019-09-30

// 当月の初日を取得したあとに、1日マイナスする
$firstDayOfThisMonth = date('Y-m-d', strtotime('2019-10-31 first day of this month'));
echo date('Y-m-d', strtotime($firstDayOfThisMonth . '-1 day'));
// 2019-09-30

//=====================
// 翌月
//=====================
// スマート
echo date('Y-m-d', strtotime('2019-10-31 last day of next month'));
// 2019-11-30

【PHP】composerの使い方

composerはPHPのライブラリ管理ツールです。以前から存在は知っていたけど、ちゃんと使ったことがありませんでした。

最近、素のPHPを書く機会があり、ライブラリを使わないとかなりキツイことがあったので、調べたことをメモしておきます。

環境

  • vagrant
  • VirtualBox
  • CentOS7
  • PHP 5.6

composerのインストール

### セットアップ用PHPスクリプトをダウンロード
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

### セットアップ実行
$ php composer-setup.php

### スクリプトを削除
$ php -r "unlink('composer-setup.php');"

### どこでも使えるように/usr/local/binに移動
$ sudo mv composer.phar /usr/local/bin/composer

### 動作確認
$ composer -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/

ライブラリのインストール

試しに、Guzzleをインストールします。

Guzzleとは、PHPのHTTPクライアントで、HTTPリクエストを簡単に実現することができるライブラリです。

その1

requireコマンドでインストールする。

$ composer require guzzlehttp/guzzle
Using version ^6.4 for guzzlehttp/guzzle
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 5 installs, 0 updates, 0 removals
  - Installing ralouphie/getallheaders (3.0.3): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.6.1): Loading from cache
  - Installing guzzlehttp/promises (v1.3.1): Loading from cache
  - Installing guzzlehttp/guzzle (6.4.1): Loading from cache
guzzlehttp/psr7 suggests installing zendframework/zend-httphandlerrunner (Emit PSR-7 responses)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
Writing lock file
Generating autoload files

その2

composer initを利用してインストールする。

### initで対話形式で、composer.jsonを作成します
### この辺の細かいことは分からないので割愛
$ composer init


  Welcome to the Composer config generator



This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [masashi/hoge]:
Description []:
Author [masashi <masashi6269>, n to skip]: n
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? yes
Search for a package: guzzlehttp/guzzle
Enter the version constraint to require (or leave blank to use the latest version):
Using version ^6.4 for guzzlehttp/guzzle
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package:

{
    "name": "masashi/hoge",
    "require": {
        "guzzlehttp/guzzle": "^6.4"
    }
}

Do you confirm generation [yes]?

Search for a package: のとこでguzzlehttp/guzzleを入力すると、composer.jsonrequireに追加してくれます。

これで準備完了。最後にcomposer installを実行してインストールします。

$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 5 installs, 0 updates, 0 removals
  - Installing ralouphie/getallheaders (3.0.3): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.6.1): Loading from cache
  - Installing guzzlehttp/promises (v1.3.1): Loading from cache
  - Installing guzzlehttp/guzzle (6.4.1): Loading from cache
guzzlehttp/psr7 suggests installing zendframework/zend-httphandlerrunner (Emit PSR-7 responses)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
Writing lock file
Generating autoload files

ライブラリの利用

オートローダーを読み込んだあとに、普通に使うだけ。

<?php // autoloadを読み込むと、ライブラリを個別にrequire,includeしなくても使えます
require dirname(__FILE__). '/vendor/autoload.php';

$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
echo $response->getStatusCode() . PHP_EOL; # 200
echo $response->getHeaderLine('content-type') . PHP_EOL; # 'application/json; charset=utf8'
echo print_r(json_decode($response->getBody()), true); # '{"id": 1420053, "name": "guzzle", ...}'

これだけでだいぶ楽になりました!

Bronze Oracle Database 12cSQL基礎に合格しました

結論

問題を解きまくってなれるしかない。暗記だけで合格するのは難しい。

利用した参考書・サイト

学習法

  1. 参考書を2回解く

仕事でSQLを書く機会をある程度経験しているので、あまり時間を書けず学習しました。けっこう考える問題が多いので、1問あたりにかける時間は多め。

full outer joinは意味分からん。

結果

正解率:78% 合格ライン:65%

感想

12c SQL基礎(1Z0-061)は難しいとの噂だったので、けっこうビクビクしながら受験しましたが、実務などで慣れている人であれば、この難しさは気にならないと思いました。絶対受かりたい人はBronze SQL基礎I(1Z0-017)を受験しましょう。

絶対おさえたいポイントは

  • SQL関数
  • 結合
  • 暗黙の型変換
  • fm修飾子
  • 制約
  • SQL行制限

です。この辺はよくでる印象があります。

また、1,2問初見の問題が出てびっくりしましたが、75問もあるので影響はありませんでした。もしかしたら、ping-tや別の参考書には載っていたかもですが、無視して良いレベルです。