2020年9月3日木曜日

postgres 配列に入っている値を条件に検索


PostgreSQLの2つのテーブル (users, groups)
select id, name from users;  <-usersテーブル
select id, name, user_ids from groups; <- groupsテーブル
(groupsのuser_ids はusersテーブルのid が入っているarray)

あるgroups のuser_ids に入っているデータをusers から抜き出す。

方法 1
select * from users where (select user_ids from groups where id='89') @> array[id];
users.id を配列にして、サブクエリの配列と比較。@>

方法 2
select * from users where id = any(select unnest(user_ids) from groups where id='89');
サブクエリの結果をunnest で集合にして、users.id と比較。 any の代わりに in でもOK


検索したら、この2つ方法がでてきたけど、以前どうやって扱っていたのか全く思い出せない...
こんなSQL書いてたかな? (;´∀`)
気がつけばPostgres のバージョンも12,13と上がってる。


参考
- postgresql: any on subquery returning array
- Use an array returned from a subquery as argument in WHERE clause with ANY function in outer query
- 9.18. Array Functions and Operators

2020年6月28日日曜日

デスクトップを Windows からFedora に移行

Windows のPCが壊れたので、余っているLinux に移行してみた。

CentOS 7 が入っているけどFedora32 インストール。
Windows のソフトはwine を利用。

デスクトップ環境
デフォルトのgnomeを利用

追加アプリ
VLCメ, GIMP,   IntelliJ, Eclips, Chrome, VeraCrypt, LibreOffice, authy

追加フォント
noto-sans


インストール後のメモ

gnome の利用はムリ。
カスタマイズや設定項目を調べるよりも、cinnamon への移行を選択。

フォント
とりあえずnoto-sans を入れたのでOK。フォントに関してはもっと勉強が必要。

Wine
 文字化けが酷いが、予想以上に快適にWindows のアプリが動いてくれる
wine が用意してくれる起動リンクは動作しないので、wine xxx.exe のように起動。
多分SELinux が原因だと思う。
文字化け、フォントはwinetricks を利用?

ターミナル
 タブがあれば何でも良いのでしばらくはgnome-terminal のまま。
 良さそうなターミナル
 LXterminal, Tilda, st, Sakura,  Yakuake
マウスのクリックで選択したらコピーできる方法を考える。

authy のインストール
Linux はsnap 経由しかないようなので保留。
バックアップ用に2つの端末に入れたいので古いmacbook air にインストールした。

Nvidia のドライバインストール
 rpmfusion を利用。そのうちソースからインストールしてみる。

firewalld の設定

2020年6月15日月曜日

macでCD,DVD を焼く

Fedora32 の起動ディスクを作成
昔のCD-R, DVD-R が残っているのでUSB ではなくCD で起動ディスクを作成。

Catalina ではiso ファイルをクリックして「ディスクに書き込む」を選択しても
「ディスクイメージが無効です」
というエラーメッセージ出てきて書き込めない。
う〜ん、困ったぞ.....

結局、ターミナルからhdiutil で書き込んだ。

hdiutil burn Fedora-Server-netinst-x86_64-32-1.6.iso

参考
https://qiita.com/hishigataBOZE/items/efca4bc5bd6317c12c09

2020年1月24日金曜日

php 再入門 その2 comporser でlaravel をインストール

■ composer のインストール
composer のサイトによると、global, local の2パターンのインストールが説明されています。
最終的なデプロイについてまだ決まっていないので、とりあえずglobal (system wide) でインストールしておきます。
(root で作業)
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php composer-setup.php
# mv composer.phar /usr/local/bin/composer
# composer --version
> Composer version 1.9.2 2020-01-14 16:30:31
Getting Started (getcomposer.org)

■ laravel のインストール
ここからは一般ユーザーで作業します。
laravel のインストール、プロジェクト作成します。
composer create-project laravel/laravel プロジェクト名
これで、プロジェクトディレクトリを作成し、必要なパッケージをインストールしてくれます。
(プロジェクト名lrvl01 で作成)
$ composer create-project laravel/laravel lrvl01
Installing laravel/laravel (v6.12.0)
  - Installing laravel/laravel (v6.12.0): Loading from cache
Created project in lrvl01
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 86 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-ctype (v1.13.1): Downloading (100%)         
  - Installing phpoption/phpoption (1.7.2): Downloading (100%)         
  - Installing vlucas/phpdotenv (v3.6.0): Downloading (100%)         
  - Installing symfony/css-selector (v5.0.3): Downloading (100%)         
  - Installing tijsverkoyen/css-to-inline-styles (2.2.2): Downloading (100%)         
  - Installing symfony/polyfill-php72 (v1.13.1): Downloading (100%)         
  - Installing symfony/polyfill-mbstring (v1.13.1): Downloading (100%)         
  - Installing symfony/var-dumper (v4.4.3): Downloading (100%)         
  - Installing symfony/routing (v4.4.3): Downloading (100%)         
  - Installing symfony/process (v4.4.3): Downloading (100%)         
  - Installing symfony/polyfill-php73 (v1.13.1): Downloading (100%)         
  - Installing symfony/polyfill-intl-idn (v1.13.1): Downloading (100%)         
  - Installing symfony/mime (v5.0.3): Downloading (100%)         
  - Installing symfony/http-foundation (v4.4.3): Downloading (100%)         
  - Installing symfony/event-dispatcher-contracts (v1.1.7): Downloading (100%)         
  - Installing psr/container (1.0.0): Downloading (100%)         
  - Installing symfony/event-dispatcher (v4.4.3): Downloading (100%)         
  - Installing psr/log (1.1.2): Downloading (100%)         
  - Installing symfony/debug (v4.4.3): Downloading (100%)         
  - Installing symfony/error-handler (v4.4.3): Downloading (100%)         
  - Installing symfony/http-kernel (v4.4.3): Downloading (100%)         
  - Installing symfony/finder (v4.4.3): Downloading (100%)         
  - Installing symfony/service-contracts (v2.0.1): Downloading (100%)         
  - Installing symfony/console (v4.4.3): Downloading (100%)         
  - Installing symfony/polyfill-iconv (v1.13.1): Downloading (100%)         
  - Installing doctrine/lexer (1.2.0): Downloading (100%)         
  - Installing egulias/email-validator (2.1.15): Downloading (100%)         
  - Installing swiftmailer/swiftmailer (v6.2.3): Downloading (100%)         
  - Installing paragonie/random_compat (v9.99.99): Downloading (100%)         
  - Installing ramsey/uuid (3.9.2): Downloading (100%)         
  - Installing psr/simple-cache (1.0.1): Downloading (100%)         
  - Installing opis/closure (3.5.1): Downloading (100%)         
  - Installing symfony/translation-contracts (v2.0.1): Downloading (100%)         
  - Installing symfony/translation (v4.4.3): Downloading (100%)         
  - Installing nesbot/carbon (2.29.1): Downloading (100%)         
  - Installing monolog/monolog (2.0.2): Downloading (100%)         
  - Installing league/flysystem (1.0.63): Downloading (100%)         
  - Installing dragonmantank/cron-expression (v2.3.0): Downloading (100%)         
  - Installing doctrine/inflector (1.3.1): Downloading (100%)         
  - Installing league/commonmark (1.2.2): Downloading (100%)         
  - Installing league/commonmark-ext-table (v2.1.0): Downloading (100%)         
  - Installing laravel/framework (v6.12.0): Downloading (100%)         
  - Installing fideloper/proxy (4.2.2): Downloading (100%)         
  - Installing jakub-onderka/php-console-color (v0.2): Downloading (100%)         
  - Installing jakub-onderka/php-console-highlighter (v0.4): Downloading (100%)         
  - Installing nikic/php-parser (v4.3.0): Downloading (100%)         
  - Installing dnoegel/php-xdg-base-dir (v0.1.1): Downloading (100%)         
  - Installing psy/psysh (v0.9.12): Downloading (100%)         
  - Installing laravel/tinker (v2.1.0): Downloading (100%)         
  - Installing scrivo/highlight.php (v9.17.1.0): Downloading (100%)         
  - Installing filp/whoops (2.7.1): Downloading (100%)         
  - Installing facade/ignition-contracts (1.0.0): Downloading (100%)         
  - Installing facade/flare-client-php (1.3.1): Downloading (100%)         
  - Installing facade/ignition (1.16.0): Downloading (100%)         
  - Installing fzaninotto/faker (v1.9.1): Downloading (100%)         
  - Installing hamcrest/hamcrest-php (v2.0.0): Downloading (100%)         
  - Installing mockery/mockery (1.3.1): Downloading (100%)         
  - Installing nunomaduro/collision (v3.0.1): Downloading (100%)         
  - Installing sebastian/version (2.0.1): Downloading (100%)         
  - Installing sebastian/type (1.1.3): Downloading (100%)         
  - Installing sebastian/resource-operations (2.0.1): Downloading (100%)         
  - Installing sebastian/recursion-context (3.0.0): Downloading (100%)         
  - Installing sebastian/object-reflector (1.1.1): Downloading (100%)         
  - Installing sebastian/object-enumerator (3.0.3): Downloading (100%)         
  - Installing sebastian/global-state (3.0.0): Downloading (100%)         
  - Installing sebastian/exporter (3.1.2): Downloading (100%)         
  - Installing sebastian/environment (4.2.3): Downloading (100%)         
  - Installing sebastian/diff (3.0.2): Downloading (100%)         
  - Installing sebastian/comparator (3.0.2): Downloading (100%)         
  - Installing phpunit/php-timer (2.1.2): Downloading (100%)         
  - Installing phpunit/php-text-template (1.2.1): Downloading (100%)         
  - Installing phpunit/php-file-iterator (2.0.2): Downloading (100%)         
  - Installing theseer/tokenizer (1.1.3): Downloading (100%)         
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (100%)         
  - Installing phpunit/php-token-stream (3.1.1): Downloading (100%)         
  - Installing phpunit/php-code-coverage (7.0.10): Downloading (100%)         
  - Installing doctrine/instantiator (1.3.0): Downloading (100%)         
  - Installing phpdocumentor/reflection-common (2.0.0): Downloading (100%)         
  - Installing phpdocumentor/type-resolver (1.0.1): Downloading (100%)         
  - Installing webmozart/assert (1.6.0): Downloading (100%)         
  - Installing phpdocumentor/reflection-docblock (4.3.4): Downloading (100%)         
  - Installing phpspec/prophecy (v1.10.2): Downloading (100%)         
  - Installing phar-io/version (2.0.1): Downloading (100%)         
  - Installing phar-io/manifest (1.0.3): Downloading (100%)         
  - Installing myclabs/deep-copy (1.9.5): Downloading (100%)         
  - Installing phpunit/phpunit (8.5.2): Downloading (100%)         
symfony/var-dumper suggests installing ext-intl (To show region name in time zone dump)
symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader)
symfony/routing suggests installing symfony/yaml (For using the YAML loader)
symfony/routing suggests installing symfony/expression-language (For using expression matching)
symfony/routing suggests installing doctrine/annotations (For using the annotation loader)
symfony/polyfill-intl-idn suggests installing ext-intl (For best performance)
symfony/event-dispatcher-contracts suggests installing psr/event-dispatcher
symfony/event-dispatcher suggests installing symfony/dependency-injection
symfony/http-kernel suggests installing symfony/browser-kit
symfony/http-kernel suggests installing symfony/config
symfony/http-kernel suggests installing symfony/dependency-injection
symfony/service-contracts suggests installing symfony/service-implementation
symfony/console suggests installing symfony/lock
egulias/email-validator suggests installing ext-intl (PHP Internationalization Libraries are required to use the SpoofChecking validation)
swiftmailer/swiftmailer suggests installing ext-intl (Needed to support internationalized email addresses)
swiftmailer/swiftmailer suggests installing true/punycode (Needed to support internationalized email addresses, if ext-intl is not installed)
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator)
ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator)
ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).)
ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid)
ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.)
ramsey/uuid suggests installing paragonie/random-lib (Provides RandomLib for use with the RandomLibAdapter)
symfony/translation suggests installing symfony/config
symfony/translation suggests installing symfony/yaml
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing elasticsearch/elasticsearch (Allow sending log messages to an Elasticsearch server via official client)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongodb (Allow sending log messages to a MongoDB server (via driver))
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server (via library))
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem)
league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files)
league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage)
league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage)
league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2)
league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3)
league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage)
league/flysystem suggests installing srmklive/flysystem-dropbox-v2 (Allows you to use Dropbox storage for PHP 5 applications)
league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching)
league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib)
league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter)
league/commonmark suggests installing league/commonmark-extras (Library of useful extensions including smart punctuation)
laravel/framework suggests installing ext-gd (Required to use Illuminate\Http\Testing\FileFactory::image().)
laravel/framework suggests installing ext-memcached (Required to use the memcache cache driver.)
laravel/framework suggests installing ext-posix (Required to use all features of the queue worker.)
laravel/framework suggests installing ext-redis (Required to use the Redis cache and queue drivers.)
laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).)
laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (^2.6).)
laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun mail driver and the ping methods on schedules (^6.0).)
laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (^1.0).)
laravel/framework suggests installing league/flysystem-cached-adapter (Required to use the Flysystem cache (^1.0).)
laravel/framework suggests installing league/flysystem-sftp (Required to use the Flysystem SFTP driver (^1.0).)
laravel/framework suggests installing moontoast/math (Required to use ordered UUIDs (^1.1).)
laravel/framework suggests installing nyholm/psr7 (Required to use PSR-7 bridging features (^1.2).)
laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (^4.0).)
laravel/framework suggests installing psr/http-message (Required to allow Storage::put to accept a StreamInterface (^1.0).)
laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (^4.0).)
laravel/framework suggests installing symfony/cache (Required to PSR-6 cache bridge (^4.3.4).)
laravel/framework suggests installing symfony/psr-http-message-bridge (Required to use PSR-7 bridging features (^1.2).)
laravel/framework suggests installing wildbit/swiftmailer-postmark (Required to use Postmark mail driver (^3.0).)
psy/psysh suggests installing ext-posix (If you have PCNTL, you'll want the POSIX extension as well.)
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses)
facade/ignition suggests installing laravel/telescope (^2.0)
sebastian/global-state suggests installing ext-uopz (*)
sebastian/environment suggests installing ext-posix (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.7.2)
phpunit/phpunit suggests installing phpunit/php-invoker (^2.0.0)
phpunit/phpunit suggests installing ext-soap (*)
phpunit/phpunit suggests installing ext-xdebug (*)
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
> @php artisan key:generate --ansi
Application key set successfully.

大量のパッケージがインストールされました。どのパッケージが何をするのか全く不明ですが、エラー表示はないのでOK でしょう。
あと、Laravel はversion 6.12.0 がインストールされています。
(とにかくメモっておきます)

■ 動作確認
 laravel プロジェクトが作成出来たようなので、とりあえず動作確認です。
プロジェクトディレクトリ(lrvl01) に移動。
$ cd lrvl01
$ ls
> app      bootstrap      composer.lock  database      phpunit.xml  README.md  routes      storage  vendor
artisan  composer.json  config         package.json  public       resources  server.php  tests    webpack.mix.js
artisan が開発用サーバーの機能を提供してくれるようです。
./artisan serve
./artisan serve --host 192.168.0.2 (開発サーバーが別の場合は--host オプションで指定)
(デフォルトでポートは8000)
ブラウザからアクセスしてみます。
http://192.168.0.2:8000/

 少し控えめな感じの画面が表示されました。

■ git で管理
このプロジェクトをgit でバージョン管理します。
$ git init .
$ git add .
$ git commit -m 'レポジトリ作成'
.gitignore はすでに作成されていたので、これを利用します。
(.env.example をgitignore に追加)
参考 github のgitignore-collection
.gitignore (for Laravel)


■ 参照
getcomposer.org
Laravel - Getting Started - installation (ver 6.x)

php再入門 その1 まずはインストール

数年ぶりのPHP。何にも覚えていないのでゼロからやり直し。

laravel というフレームワークを利用して、商品管理のwebシステムを作ることになったのでphp, laravel について勉強していきます。フロント側はvuejs を利用する予定なので、両方合わせてメモっていきます。

■ まずは、インストール(centos7)
 # yum install epel-release
 # yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm 
 # yum-config-manager --enable remi-php74
 # yum install php
remiレポジトリを利用して、最新のversion7.4 をインストールしました。

依存関係で一緒にインストールされるパッケージ。
apr.x86_64
apr-util.x86_64
httpd.x86_64
httpd-tools.x86_64
php-cli.x86_64
php-common.x86_64
php-json.x86_64

あと、laravel のインストール時に必要になるので、以下もインストール
# yum install php-mbstring php-xml
依存関係で、正規表現のoniguruma5 も一緒にインストールされます。

■ php.ini を修正 (/etc/php.ini)
expose_php = Off
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
よくわからないので、とりあえずこれだけ修正しておきます。

■ 動作確認
とりあえず、httpd で動作確認。
(nginx が起動している場合は止めておきます)
# systemctl stop nginx (nginx 停止)
# systemctl start httpd (apache 起動)
/var/www/html/index.php を作成
<?php phpinfo(); ?>

ブラウザから http://192.168.0.2/index.php にアクセス。
192.168.0.2 はWEBサーバー(httpd) のIPアドレス。

おぉ~ 懐かしい画面が表示されました。
以上!

2019年12月6日金曜日

venv のpython バージョンを変える

python3.7.3 で作ったプロジェクトをバージョン3.8.0 に変更
python -m venv venv --upgrade (upgradeオプションを付ける)
バージョンを戻すときも同じ。

現状確認。
$ python -V
> Python 3.7.3
$ . venv/bin/activate
(venv)$ python -V
> Python 3.7.3
(venv)$ ls venv/lib
> python3.7
python 3.8 をインストールしたので
venvもversion3.8に合わせる
もう一度、確認
$ python -V
> Python 3.8.0
$ . venv/bin/activate
(venv)$ python -V
> Python 3.7.3         # venvのpythonは3.7.3 のまま

upgradeオプションをつけて!
(venv)$ deactivate
$ python -m venv venv --upgrade
$ . venv/bin/activate
(venv)$ python -V
> Python 3.8.0         # venv の環境でもバージョン3.8.0
(venv)$ ls venv/lib
> python3.7 python3.8  # venv/libにも 3.8用ディレクトリができている
- 念のため pip --version も確認しておく
- pip install -r requirements.txt を実行 (マイナーバージョンの変更時は必要ないと思う)

参考
venv --- 仮想環境の作成

2019年12月5日木曜日

簡単! appimage でneovim。

レンタルの共用サーバーにvim8を入れようかと思って、なぜかneovim 入れました。
しかもappimage
appimage の利用は初めてだったんですが、ダウンロードしてすぐに利用できるの簡単でした。

https://github.com/neovim/neovim/wiki/Installing-Neovim
curl -LO https://github.com/neovim/neovim/releases/download/stable/nvim.appimage
chmod u+x nvim.appimage

ダウンロードしてすぐに利用できるので、Windows のアプリケーションみたいな感覚。
make はもう遠い世界へ.....

とりあえず自分のホームディレクトリにappimage ディレクトリを作って、その中に入れておきました。
あと、自分のbin ディレクトリ内にnvim.appimage へのシンボリックリンクを作成。

/home/hoge/appimage/nvim.appimage # appimage 用のディレクトリ
/home/hoge/usr/bin/nvim           # nvim.appimage へのシンボリックリンク

今後、appimage を利用する場合は、このルールで利用するつもり。
- appimage ディレクトリに入れる
- ローカルのbin ディレクトリにシンボリックリンクを作成


AppImage はWindowsのポータブルアプリみたいな感じですね。
ダウンロード、バージョンの切り替え、起動ランチャーなどの便利ツールも既にあるのかな?

■ pynvim
pip install pynvim

nvim で:CheckHealth を確認。
## Python 3 provider (optional)
  - INFO: pyenv: Path: /home/hoge/.pyenv/libexec/pyenv
  - INFO: pyenv: Root: /home/hoge/.pyenv
  - INFO: `g:python3_host_prog` is not set.  Searching for python3 in the environment.  - INFO: Executable: /home/hoge/.pyenv/versions/3.7.5/bin/python3  - INFO: Python version: 3.7.5  - INFO: pynvim version: 0.4.0  - OK: Latest pynvim is installed.