布団が俺を呼んでいる

丘山大一のぶろぐ

PowerShell 二行を一行にまとめる

自分メモ。
うまく言えないんですが、
aaa
bbb
ccc
ddd
というテキストを
aaa bbb
ccc ddd
に変換してファイル出力する感じ。


こんなん

$originalFilePath="hogehoge.txt"
$filePath = "fugafuga.txt"
[int]$count=0
Get-Content $originalFilePath | ForEach-Object {
  $count+=1
  If($count % 2 -eq 0){
    Write-Output($_) | Out-File -FilePath $filePath -Append -Encoding utf8
  }else{
    Write-Output($_ + "`t") | Out-File -FilePath $filePath -Append -NoNewline -Encoding utf8
  }
}

管理者ユーザなのにexeファイルのファイル操作できなくなる現象

exeファイルのプロパティのセキュリティにアクセスできなくなる現象とも。
実害が出るレベルではまりました。


現象

ファイルを削除しようとすると、
「このファイルを削除するには管理者の権限が必要です」→「続行」→
「この操作を実行するアクセス許可が必要です」→「再試行」→
以降ループするので「キャンセル」せざるをえなくなる

リネームしようとすると、
「このファイルの名前を変更するには管理者の権限が必要です」→「続行」→
「この操作を実行するアクセス許可が必要です」→「再試行」→
以降ループするので「キャンセル」せざるをえなくなる

実行しようとすると、
「指定されたデバイス、パス、またはファイルにアクセスできません。これらの項目にアクセスするための適切なアクセス許可がない可能性があります」
で、メッセージ内容から「セキュリティが変なのか……」と考えファイルのプロパティからセキュリティを
開くと、たしかに権限がふられていない。ファイルの所有者の所有者も見えない。
しかし、権限をふろうとしても権限をふれない。

どういうこっちゃねん。


原因

他のユーザがexeファイルをロードしている状態で、さらに別ユーザがexeファイルを削除していたため。


原因詳細

エクセルファイルなんかで「別のプログラムがファイルを開いているので操作を完了できません」を見ることがあった人も
多いと思いますが、その複雑版です。共有フォルダに配置した、複数のユーザがたたくexeファイルで起きました。
登場人物は下記。

  • Aユーザ:exeファイルを実行していた人
  • Bユーザ:exeファイルを先に削除した人
  • Cユーザ:管理者であり、exeファイルを削除したい人

Aユーザは、Cユーザのマシン内の共有フォルダに入ったexeファイルを実行しています。起動後なので、exeはロードが終わった状態です。
続いて Bユーザは、そのexeファイルを削除します。Aがexe実行中でもファイル削除できます(Bのエクスプローラからは消える)
最後にCユーザが共有フォルダに入ったexeファイルを削除を実施しますが上記「現象」にはまり何もできなくなります。
Cマシン内の共有フォルダにあるexeは、Bによって削除された亡霊みたいな状態。


対応

exeにアクセスしている人を強制的に全部切断すれば解消されます。
というか先に切断しておきましょう。


泣き言

これWindowsのバグでは、という気がしなくもない。けど何かしら事情があってこうなっている気もする。

WSL でGitbucket環境構築

ちょっとした個人用リモートリポジトリが欲しい時は、Gitbucketを構築しています。
Gitbucketは動かすだけならjavaさえあればよいので、Windowsでもお手軽です。
が、逆にいえばjavaを入れなければなりません。
これが嫌だなー、という人は仮想環境を作るなりDockerで構築するのがよいと思うのですが、今回はWSLでやっていきます。

理由:現在使用中の環境のうち一つで、Dockerサービスが動かなくなったので(泣)

手順

使用環境はストアから入手したUbuntu。

まずはJavaをインストール。
sudo apt install default-jdk

インストール完了後、バージョン表示してインストール確認。
java -version

Gitbucketを入れるためのディレクトリを作成。
sudo mkdir /opt/gitbucket

Gitbucketをダウンロード。
sudo wget https://github.com/gitbucket/gitbucket/releases/download/4.32.0/gitbucket.war -P /opt/gitbucket

さて、後はgitbucketを動かせば完了なのですが、このままではWSL内にファイルを保持してしまいます。
そしてWSLの環境はリセットをすることがありますので、油断するとファイルが失われてしまいます。
これを防ぐため、Windows側でファイルの保存フォルダをあらかじめ作成しておきます。
今回は
D:\WSL\Ubuntu\GitBucket
というフォルダを作成しておきました。

さて、再びWSLに戻り、起動用ファイルを作成します。
叩きやすい場所に作るのがよいと思いますが、今回は/opt/gitbucket 内に作成しました。
sudo vi startgitbucket.sh

startgitbucket.shに、下記の内容を記述します。
java -jar /opt/gitbucket/gitbucket.war --port=8600 --gitbucket.home=/mnt/d/WSL/Ubuntu/GitBucket
ポートも指定していますが、ポートは空いている番号なら何番でもOKです。
今回はなんとなく8600番を指定しました。

最後に、実際に起動して完了。
sh startgitbucket.sh

http://localhost:8600/ にブラウザでアクセスすれば、動いているのが確認できます。



よりよい方法

この方法だと、いちいちファイルをたたいて起動しなくてはならないため、サービスとして登録した方がよいと思います。
が、そのあたりよく分からないしよけいに面倒くさいは今回触れません。あくまで「簡易のちょっとした」環境整備です。


さらによりより方法

素直にgithubなりなんなりでリモートリポジトリを用意した方が楽だよ!


独習Git

新品価格
¥3,542から
(2019/8/25 14:47時点)

Oracle データベースをOracle SQL Developerでアクセス

この本の中ではSQL Plus を使って操作しているのですが

面倒になってきた打ち間違いや再入力したいときに不便なので、やっぱりGUI環境が欲しい。


Oracle SQL Developer

Oracle公式でこういうのがあった。

zipが450MB弱、解凍すると630MB程度。このくらいなら気軽に落とせますね。
いわゆるインストーラーつきのものではなく、ポン置きで
sqldeveloper.exe
をたたけば実行できるタイプ。
というわけで早速使ってみる。

はい、エラー



とりあえず適当にやっても使えるやろ……からのいつもの失敗パターン。
んで、Oracle SQL Developerの使い方を軽く探しても、ユーザ名とパスワードを入れて……くらいしか出てこない。

というわけで、素直にエラーを見る+ちょろっと調べた。
エラーにもある通りリスナー周りが違うと。
詳しい動作はよく分からないが、コマンドをたたいてもうちょっと調べてみる。
使うコマンドは
LSTRCTL
からの
ERVICES


リスナーは起動しており、ポートも会っているが、SIDが違う模様。
ので、SIDを「orcl」に変更したら通った。


SQLを発行したいときは[ツール]-[SQLワークシート]から実行できた。
Sql Plus だと打ち間違えが面倒なので、慣れないうちはやはりこっちの方が楽そう。

※この手順は上記の本の通りに構築した場合の対応方法なので、タブン本番環境では役に立たない。
(というより本番環境ではこういうツールはあんまり入れない)。

Oracle データベース操作基礎の基礎

SQLPlus の使い方基本メモともいう。
データベースに接続して基本的なSQLを投げるまで。


SQLPlusの実行方法

  • スタートメニューに登録されているOracle-hogehoge - SQL Plusから。
  • パスがきちんと通っていれば、適当なコンソールからsqlplus
  • %ORACLE_HOME%\product\12.2.0\dbhome_1\bin\sqlplus.exe

マニュアルの場所(12c)

https://docs.oracle.com/cd/E82638_01/sqpug/index.html

基本的なSQLを実行して試す

・sqlplusの実行

コマンドプロンプトから
sqlplus /nolog

・systemユーザで接続(Windowsアカウントを利用してインストール)

connect system /<パスワード>

以後の作業は、「sqlplusの実行」と「SQL文の発行」が混ざる。
SQL文の発行では末尾に「;」が必要。

・ユーザの作成

create user <ユーザ名> identified by <パスワード>;
grant create session to <ユーザ名>;
grant resource to <ユーザ名>;
grant unlimited tablespace to <ユーザ名>;

・作成したユーザで接続しなおす

connect <ユーザ名> /<パスワード>

・テーブルを作成

create table hogehoge (id number(4), name varchar2(32), accessdate timestamp);

・作成したテーブルの定義確認

describe hogehoge;

・行挿入

insert into hogehoge (id, name, accessdate),values(1, 'fugafufa', to_date('2019-07-31'));
insert into hogehoge (id, name, accessdate),values(2, 'fugafufa2', to_date('2019-07-30'));
commit;

・参照

select * from hogehoge;



Oracle データベース挑戦と敗北のメモ

Microsoftの整備された道を歩んできた者にはOracle のハードルが高く感じる模様。
ただ「接続して、テーブルを作る」までに(他のこともやっていたとはいえ)数日を要しました。

そして失敗につぐ失敗のはて、結局素直に本を買う。

Oracleの基本 ~データベース入門から設計/運用の初歩まで

新品価格
¥2,851から
(2019/7/31 19:33時点)



まず成功した手順と注意点について

https://www.oracle.com/technetwork/jp/indexes/downloads/index.html#database
でファイルをダウンロードできるのですが、まずここでアカウント登録が必須。このアカウント登録、住所や電話番号まで登録しなければいけないので注意。捨てアドでとる、なんてことはしないほうがよさそう。少なくとも私は正確なものを入力しました。
んで次。
Database 12c Enterprise/Standard Editions のWindows用で容量約2.8GB。zipを解凍するので、だいたいこの2倍の容量が最初にいる。
これに加え、インストールには8GB強必要です。
Zipは解凍後に削除するにしても、余裕をもってだいたい15GBくらいは見ておきたい。

後は本に従ってインストールするだけなのですが、インストールには結構時間がかかる。しかもファイアウォールの許可ダイアログが途中で二回来るので、画面を見ておく必要があるという面倒くささ。
GUIでインストールするならこればかりは見ててね、という話ですけどちと面倒。


ハードルの高さについて


苦戦したことについて。

ググラビリティの中途半端な高さ

「Oracleを使う」という文脈だと、だいたいデータベースを指すことが多いと思うのですが、「Oracle」単体だと企業名になるため、Javaなんかの製品が混ざってくる。
検索にはOracle Database を使えばいいのですが、それだと記事に「Database」を含まないものが入ってこない恐れがあるので使い分けが必要……な気がする。

最新バージョンに関する情報が少ない

現時点の最新バージョンは19c。
さすがに最新バージョンの情報が少ないのは仕方ないとして、その前バージョンの18cも少なめ。
正確には、「新しい機能」の説明はチラホラはあるのですが、「基本的なSQLは分かるがoracleは初めて」というような「Oracle初学者」向けの情報が見つからず。
「特別な理由がない限り、まずは最新のものを使う」のが基本だと思っているので、最初は何も考えずに19cを入れてしまったのですが、入れ方や入れた後の手順が分からずこれで失敗。
最終的に、「いきなり新機能は使いこなせるわけないのだから、まずは情報が多い12から触ろう」という決断をくだすまでに時間がかかってしまった。

19cは容量がでかい

上でも書きましたけど、最初に
  • まずは最新ものもを入れてみよう!19cだ!
  • 不慣れなんだからGUI環境欲しいな!Oracle Enterprise Managerとやらを入れてみよう!
などとやっていたら25GB超えの容量が必要となってきて、古いマシンには容量不足で入らないという事態に。
「練習目的だから、データベースもそんな作らないし容量なんて大して食わないやろ」とか思っていたら大失敗。
そのあとで余裕があるマシンでやり直してやっぱり失敗するのを繰り返した。

Docker でやってみようぜ

Docker Hub にOracleLinuxというものが公開されているのですが、いかんせん「何が入っているどういうイメージなのか」の情報がサックリと手に入らず撤退。
ただし、これは私のLinux、Docker経験の少なさに起因している問題ので慣れている人ならいけるのではないかと予想。
慣れたらこっちにも挑戦したいね。


アンインストール失敗

19cをアンインストールしようとしたところ、専用のアンインストーラーexeがなく、バッチファイルをたたくという手順でした。
で、このバッチファイル、3つの落とし穴があります。
  • 管理者権限で実行する必要がある
  • 全部のファイルが消えるわけではない
  • 対話式アンインストーラーだが、意味が分からない
はじめの2つはそりゃそうだよね・仕方ないよね、という感じ。
インストールに管理者権限がいるんだからアンインストールにも管理者権限は必要だよね、くらい。
問題は3つ目で、対話式で聞かれる用語の意味がOracle初学者には意味が分からない。基本的にはデフォルト値でいけるのですが、ところどころデフォルト値が無いものがあり何かを入れる必要があるのですが何を入れればよいのやら。
調べながら入力しましたが、本当に正しい手順だったのか確信が持てず。
きちんと勉強していけば分かるのでしょうが、インストールのトライアンドエラーすら難しいというのはなかなか辛い。


今後の展望

12cで基本を学べたら、19cやOracleLinuxにも挑戦したいところ。
何か月かかるか分かりませんが頑張りたい。

nodejs勉強した頃の開発環境(備忘)

あまりにもWeb系世界が不得手だったので、コッソリとnodejsを勉強していた時がありました。
この本↓

Node.js超入門[第2版]

新品価格
¥3,240から
(2019/7/27 18:01時点)


言語仕様の説明は薄めで、実際にアプリを作りながら勉強していくタイプの本です。
動くものができあがるので結構楽しい良本。
が、色々勉強にはなったのですが、nodejsはあんまり肌にあってない感じある。
でもせっかくなので記録は残しておく。

というような自分メモ記事です。


開発環境について

VSCodeでガリガリ書くのはいいとして、nodejs自体はPC本体に入れたくない(バージョン管理から解放されたい)。
学習で使うmysqlもPC本体に入れたくない(DBは仕事で苦労した記憶が多いので本体に入れたくない)。
というわけで、これまた不得手であったdockerに手を出したのです。

そしてできた基本形がこちら。


docker-compose にnodeとmysqlを入れています。
ソースはnodeフォルダの中。
で、使う時になったらコンテナにdocker execしてnpm start OR  Sequal Proで接続。


docker-compose

当時、あちらこちらを参考にして書いた記憶。

version: '3'
services:
# DBサーバ
db:
container_name: nodeDb
build: .
image: mysql:5.7
ports:
- "3306:3306"
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: test
MYSQL_PASSWORD: test
# Appサーバ
node:
container_name: nodeApp
build: .
image: node
ports:
- "80:3000"
volumes:
- ./node:/usr/app
command: "/bin/bash"
tty: true

アプリケーションサーバの方はポートのバインドしつつ、ソースコードを共有するためにvolumesでフォルダをバインド。
先に書いたように、実際に使う時はこのサーバに潜り込んでディレクトリを移動してからnpm startする感じです。

DBサーバは(当然のことながら)データを保存しておきたいので、volumesでフォルダをバインドしています。
また、やっていたらmysqlの最新版ではうまく動かなかったので5.7を利用した記憶があります。
DBコンテナに直接入ることはあまりなく、実際にはSequal Proで接続していました。


初めのうちはなんかうまくいかず苦戦した記憶。


問題は

他にもなにか作業していた気がするのですが、いかんせん大分前のことなので忘れました(汗)。
この通りにやっても動かなかった!
となっても責めないでください。



Azure Blob Storage 静的Webサイトのホスティング

https://docs.microsoft.com/ja-jp/azure/storage/blobs/storage-blob-static-website
お手軽にできるらしかったので試してみた。

Azureポータルサイトでの作業

といっても特別な作業は一か所だけです。
V2 Storageを作成したのち、「静的なWebサイト」を「有効」にし、二つのドキュメント名を指定します。
指定したら保存。



Azure Storage Exploerでの作業

インストール作業こそありますけど、こっちもメッチャ簡単ですね。
Blob Containersの下に「$web」があるので、そこに先に指定したインデックスドキュメント・エラードキュメント、他を放り込むだけです。超お手軽。
アップロードが終わったらAzureの「静的なWebサイト」からエンドポイントを取得してアクセスするだけです。



そんなこんなで今回作った静的webサイト

練習がてら作ったunityゲーを放り込んでいます。
本当はレミングスちっくなものを作ろうとしていた……んですが、スーパーマリオメーカー2の動画を見ながら作っていたら、気が付いたらコインを配置していました。
でがらし会でプレイしてもらったら
「矢が理不尽すぎる」「矢がクソ」「矢が」
と評判でした。
アイテム全取得もできない(はず)のステージ構成だったりするし、しゃーないね。
たぶんバグもある。

今回作ったサイトは、倉庫として利用予定ですので、ブログ右のリンクに追加しておきます。
今後何か作ったらここに置く予定。(作る予定は立っていない)

PackageManagement に挑戦その3

前回から大分間があいた。


更新について

apt update && apt upgrade 的な、プロバイダ経由で入れたパッケージの更新ってどうやるんでしょう?
Update-Package のようなコマンドがあるかと思いきや、見つからなかったのでゴリ押しました。


Get-Package -ProviderName ChocolateyGet
で取得した名前をもとにインストールかけてみました。うーん、これはやり方間違っている感。
あと、これだとインストールの度に「Y」を入力しなければならないです。
諸々、正しいやり方をだれか教えてください。探してもよく分からなかったんです……


それでな?

今更気が付いたんですが……


なぜKBがChoco経由でインストールされている……??

入れた覚えサパリないんですが。
https://chocolatey.org/packages/KB2919442
https://chocolatey.org/packages/KB2919355
たしかに公開されてはいるんですけど、なぜ入っている??


う~ん。分かりませぬ。
PackageManagement は導入部分の記事は多いんですけど、運用している人の記事をあまり見ないんですよね……
運用しなくなってしまったか、秘蔵のタレがあるのか、簡単すぎて記事にしないの3ケース。
……最後のケースのような気がするな……しくしく。

やっぱPowerShell も本を買って調べなおさないとダメですね……むむ。
↓の本はまだ買えていない((+_+))




PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~

新品価格
¥3,974から
(2019/3/14 11:30時点)

WLinux 環境再整備

気が付かないうちにちょこちょこ変わっていたらしい。
最近は実機のubuntuとmac - docker 環境を構築したのでwslを触っていなかったのが気が付かなかった原因ですね間違いない
(必死の言い訳)


知らない間に増えていた機能

wlinux-setup ツール」というものが増えていたみたいです。使ってみたいので環境をリセット(Windows の設定→アプリ→アプリと機能 からリセット可能)。

あとX410にDPIスケーリング機能が増えてた。前は無かったよね……?あったっけ?


さっそく



わお。
めっちゃ色々出てきたやん。
DOCKER はWIndows 上でのdockerへのアクセス用ぽいので、WLinux上でdockerを動かせるわけではないようですね。
必要なものしか選択していないので、全部の挙動は分かりませんが非常に楽。
ただ、以前はあった(が、動作しなかった)Chromeのインストールスクリプトはなくなった?ようです。