布団が俺を呼んでいる | 丘山大一のぶろぐ

布団が俺を呼んでいる

丘山大一のぶろぐ

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で接続していました。


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


問題は

他にもなにか作業していた気がするのですが、いかんせん大分前の� 布団が俺を呼んでいる | 丘山大一のぶろぐ

布団が俺を呼んでいる

丘山大一のぶろぐ

Windows Server 2019 インストールしてみた (追記あり)

ダウンロードできるようになっていたので、インストールしただけという話。
手持ちのDVD-Rだと容量が足りなくてUSBメモリ経由でインストールしました。容量不足辛い。


ひとまずのインストール構成

実機:Intel NUC5i5RYH
デスクトップエクスペリエンス有

さて、この構成の問題はNUC5i5RYHのドライバはクライアントOS向けにしか提供されていないことです。
構成的にはサーバテスト用として素晴らしいのですが、これが非常にネック。
というわけで、WIn10用のドライバをゴニョゴニョしてねじ込みます。
ねじ込みかたは下記を参考にさせていただきました。

ありがたや~。


インストールとネットワーク接続直後

リモートデスクトップしてのキャプチャ。


Winverしたら「Microsoft Hyper-V Server 2019」って出るんですけどなんでですかね?
Hyper-V ServerはCUI構成のみを指していたと思っていたけど変わったのかな?
2019は情報を全然追いかけていなかったので色々分かりませんね……調べないと。


10/6 追記:
RS5に大問題発生中の模様で、MSDNからWindows Server 2019 が無くなっています。
Win10 でのアップデートだけかと思いきや、こちらにも影響が……。
ま、また入れなすのか……。

いや待て、逆に考えれば、このisoイメージは貴重品なのでは? とっとかなきゃ! ←イマココ


Intel NUC Core i7搭載 小型PCベアボーン 2.5インチ/M.2 SSD対応 BOXNUC7I7BNH

新品価格
¥60,950から
(2018/10/3 22:48時点)

WLinux 色々環境整備(主にPython)

実は、Pythonの勉強をしていた時にWindowsでは動作しないライブラリに出会ってしまいました。
そのことはGithubのIssueに載っていたのですが、そこに気が付くまでに2時間程度かかってしまいました。
(初学者にありがちな「自分の操作の何が間違っているのか」を探すのに夢中で前提条件を調べていないパターン)
また諸事情からPythonの実行環境は仮想マシンに置いていたのですが、これは実行するには重い。
ちょっと試したい時には不便すぎる。
解説記事もMac向け、すなわちunix系なものが多く、う~ん、初学者がWIndowsを使って学習するには落とし穴が多いなと感じていました。
そんなこんなで、勉強が止まっていたわけです。

以上言い訳


いざ再開の準備

WLinuxには最初からPythonが入っています。しかもGUIが使える。軽い。
というわけで、Python勉強環境の整備開始です。


Python実行環境整備

  1. pythonはすでに入っているので、仮想環境を作ります。
  2. venvを入れるため、apt-get install python3-venv
  3. 続いて、仮想環境hogehoge作成。 python3 -m venv hogehoge
  4. アクティベイトのコマンドは source [仮想環境パス]/bin/activate
  5. 現在の環境確認に which python


VSCodeのインストール

WLinuxにはVSCodeインストール用のスクリプトが準備されているため、これをたたきます。
  1. sudo /opt/installcode.sh
  2. vscodeはWindowsと同じく「code」で実行可能
  3. vscodeが起動したら、まずは日本語拡張機能を入れて日本語化。
  4. 次にpython拡張機能を入れる。


実行してみる

  1. ワークスペースに仮想環境内のpythonを指定。"python.pythonPath":"[仮想環境を入れたパス]/hogehoge/bin/python3"
  2. hoge.pyを作成し、import numpy as np をF5で実行。
  3. エラーが出ることを確認。
  4. numpyのインストール。 pip install numpy
  5. 再度F5実行。エラーが出ないことを確認。

グラフ表示

  1. pip install matplotlib
  2. import matplotlib.pylab as plt を実行。
  3. 「python3-tk」を要求するエラーが表示。
  4. sudo apt-get install python3-tk
  5. 再度F5実行。エラーが出ないことを確認。

こんなもんでしょうか。


日本語キーボードになっていない場合

ターミナル操作(Windows側)では問題なくても、Linuxの方ではしっかりと英字配列になっていることがあります。
で、そういう時どないすんねん、と思って調べていたら
sudo dpkg-reconfigure keyboard-configuration
をしろとのことでした。が、そもそもkeyboard-configurationが入っていないと怒られたので、
apt-get install keyboard-configuration
を実行したら入りました。
dpkg-reconfigure keyboard-configuration は、再起動しないと設定が反映さないぽいです。でもサービスを再起動すればいい��となので忘れました(汗)。
この通りにやっても動かなかった!
となっても責めないでください。



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のインストールスクリプトはなくなった?ようです。


ダウンロードしたファイルのアレについて


昔調べたんですけど、記事にしていなかったので記事にしました。


アレ

コレ。

大体何も考えずに「許可する」を選択して閉じるヤツです(セキュリティ意識の欠如という大問題)。


正体について

ファイルシステムであるNTFSにおける代替ストリームです。
といってもなんのこっちゃですね。
ざっくり言ってしまえば、実態となるファイルに追加で情報を入れられます。上の画像は「セキュリティ情報を付加されたファイル」ということになります。
ファイルのプロパティからでは機能の具体的な名称が分からないので調べづらいですが、「NTFS」「代替ストリーム」あたりをキーワードにweb検索すれば色々ヒットします。


詳細を見る

コマンド
dir /r
で簡単に見られます。


二行目のコロン「:」の後にくっついているのがソレです。
ここでは「Zone.Identifier」がくっついている、ということが分かります。が、DATAの中身が分かりませんので、今度はpowershell を使って中身を見ます。


こうすると色々見えてきます。
[ZoneTransfer]の
ZoneIdに3がセット
HostUrl にはダウンロード元のアドレスがセット
されていることが分かります。
ZoneId は列挙体であり、コチラhttps://docs.microsoft.com/ja-jp/dotnet/api/system.security.securityzone?view=netframework-4.7.2に詳細が書かれています。


Windowsファイルシステムなので

代替ストリームはxcopyによるコピーや、エクスプローラ上でのコピーによっても引き継がれます。
WSLでコピー(cp)した場合は引き継がれません。
どのファイルシステムが管理しているか、どのようにファイルが作成されたかによって代替ストリームが残るかどうかが決まってしまうので、重要な情報は基本的におけません。ちょっとした追加情報を残すことにとどめることになると思います。


追加できるデータについて

実は好き勝手に追加できます。


遊んでみようと思えば遊べるかと。
日本語も入れられます。一文字ごとに3バイト増えるようなので、内部的にはunicode? なのかな。


オマケ:AD環境について

最新のADは分かりませんが、以前確認したところ「ゾーン情報を削除する方法を非表示にする」というグループポリシーがありました。
AD配下のマシンでゾーン情報が出てこない場合はこれが有効になっているのかもしれません。




最難関だと想像されること

おそらくなんですが、Windowsユーザでbashを叩く人にとっては、上記の手順は余裕なんですよね。
ぼくにもできるくらい。
で、bashを叩く人って、ストアを滅多に使わないと思うんですよね。bashでやりたいことって基本unix系の操作だから、Windows なストアはあまり関係ないので、接点が少ない。
Windows好きなぼくですらあまりつかわない。
そんなわけで、辛いと予想するのが、
「コレ有料やんけ!滅多に使わないであろうストアにクレカ情報とか関連づけんの?」
という点だと思います。
そこで! クレカ情報登録するとかいやだ! という方はこちらをどうぞ。ギフトカードです。
結局amazon利用のためにクレカ使うという


Windows ストアギフトカード 2,000 円 (Windows/Xbox 360で利用可) |オンラインコード版

新品価格
¥2,000から
(2018/9/25 16:14時点)


デスクトップブリッジでストアに提出

これまた「ぷるまど」開発で経験したことまとめ。
2018年7月時点での、WPFアプリをUWP化し、ストアに提出する時のやり方となります。

条件と目的

元のアプリはWPF(WinFormsでも同じはず)
ストアに提出することを目的にする

やらなければならないこと

アプリをUWP化する
UWPにしたら、設定を変更する
runFullTrustが付与されることに注意する
ストアに提出する際、Centennial Program Addendum を承諾する
リジェクトされる場合、一週間程度かかる

アプリをUWP化する

既存アプリのUWP化といえば、Desktop App Converterが有名です。UWPやWindowsストアに提出するアプリを開発しようと検討すると、まずその名前が目につきます。
ストアから入手できるのと、コマンドラインから実行できるので繰り返し実施したい場合に便利です。
ですが。
ぶっちゃけ、UWP化といっても、ストアに提出する直前に一度実行し、あとはちょちょっと設定を加えるだけです。そう何度も繰り返す作業ではありません。
というわけで、GUIで操作しましょう。
Windows アプリケーション パッケージ プロジェクトを追加してUWP化します。
なんと、このプロジェクトを追加すれば、後はマウスでポチポチしていればUWPになります。
UWP化だけなら、実際の作業は
・既存のプロジェクトに「Windows アプリケーション パッケージ プロジェクト」を追加
・ターゲットバージョン指定
・UWP化するプロジェクトを指定
でほぼ完了です。

UWPにしたら、設定を変更する

といっても、これは通常のUWPの作業とほぼ同一です。
異なるのは「.appxupload」ファイルを明示的に作成すること、「runFullTrust」を与える必要がある、ことくらいでしょうが。
他にも、スタートメニュー表示用の画像ファイルを用意する必要があります。
※.appxuploadはWindows アプリケーション パッケージ プロジェクトフォルダ直下の「AppPackages」フォルダ内に作成されます。

Centennial Program Addendum

UWP化したアプリをストアに提出するときは、この契約を結ぶ必要があります。
で、この契約は必須なのですが、なんとアプリ提出の流れの中では結べません。正確には、契約内容を表示することはできるのですが、承諾できないので「あれ? どうやって承諾するの?」となります。
そして正解はパートナーダッシュボードの画面右上の歯車アイコンの「契約」から。「Centennial プログラム補遺」として別個契約する必要があります。
この契約が承諾されていない場合、MSからメールが飛んできます。

リジェクトされる場合

成功すると、普通3営業日以内にパートナーダッシュボードにその旨が表示されます。
逆に、リジェクトされる場合は3営業日を大きく超えて保留中となる場合があります。
(このリジェクトする方が時間がかかるというのがすごくキツイ)
もし3営業日を超えても、保留中の場合は、アプリや契約を見直して、すぐに再提出できるようにしておきましょう。


こんなものですかね。
基本、情報が少ない+手順が変わるので、正攻法である公式ページを都度参照するのがよいと思います。

他のアプリケーションウィンドウを操作する

この前出した「ぷるまど」の内部実装の話。

やっぱWinAPIだよね

他のアプリケーションを操作する場合、基本的にはウィンドウハンドルをどうやって取得するか、という問題に絞られます。
プロセスが分かっている場合はもちろんプロセスから攻めるわけですが、今回は「ウィンドウ」があるものをを取得したい。
というわけで、それを取得するAPIがEnumWindowsです。

    public class WinAPI
    {
        [DllImport("user32")]
        public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, IntPtr lParam);
        [DllImport("user32")]
        public static extern bool IsWindowVisible(IntPtr hWnd);
        [DllImport("USER32.DLL", SetLastError = true)]
        public static extern int GetWindowThreadProcessId(IntPtr hWnd, out int ProcessId);
    }

みたいな感じでテキトーに定義して、EnumWindowsを呼び出してくるくる回せば色々できます。

        WinAPI.EnumWindows((h, i) =>
        {
            if (WinAPI.IsWindowVisible(h))
            {
                WinAPI.GetWindowThreadProcessId(h,out int id);
                result.Add((h, Process.GetProcessById(id).ProcessName)); //このresultに結果を蓄えているので、後はご随意に
            }
            return true;//Trueを返すと処理が継続する
        },
        IntPtr.Zero);

「WinAPI.IsWindowVisible」を呼び出して、ウィンドウが表示されているかどうかを判定していますが、「ウィンドウは持っているけど表示されない」みたいな例外動作をするアプリケーションもあります。
代表例がexplorerのProgram Manager。
こういった特殊なアプリケーションをどう扱うかは仕様次第だと思います。
「ぷるまど」は汎用的、かつ雑なアプリということもあり、そのあたりはあまり考えないことにしました。「ぷるまど」には、他のアプリケーションの都合が分からないから、とりあえず表示しておけ、てな動作をしています。


ウィンドウ操作系API等

他にはこの辺りを、こんな感じで定義して使っています。

        [DllImport("user32", CharSet = CharSet.Auto)]
        public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
        [DllImport("user32.dll")]
        public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
        public const int SW_RESTORE = 9;  // 画面を元の大きさに戻す
        public const int SW_SHOWNORMAL = 1;
        [DllImport("User32.dll")]
        public static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);
        public struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }
        [DllImport("user32.dll")]
        public static extern int MoveWindow(IntPtr hwnd, int x, int y, int nWidth, int nHeight, int bRepaint);
        [DllImport("USER32.DLL", CharSet = CharSet.Auto)]
        public static extern bool SetForegroundWindow(IntPtr hWnd);

何をするAPIかは、名前を見てもらえば大体わかるかと……

窓断熱シート マジックミラー フィルム ガラス透明断熱フィルム 建築建物ガラスフィルム 目隠しフィルム 窓のサングラス省エネフィルム めかくしシート 窓フィルム マジックミラー 紫外線カット 飛散防止 ミラー(90cm×200cm, シルバー)

新品価格
¥2,378から
(2018/7/20 17:14時点)

アプリ「ぷるまど」 ストアに公開されました

詳細はサイトの方を見ていただくとして。

公開じゃああ

Windows Store 公開にされました。
ああ、審査に2回も落ちたよ……ふんぎゃー。

ストアからダウンロードにはこちらからどうぞ。

※詳細はブログ上部の「公開アプリ」から。


アプリ「ぷるまど」公開

またもやクソアプリ。

アプリ概要

Windows Store 公開。
する予定ですが、審査がなかなか通らないのであぷろだに仮配置。
ふんぎゃー。

※詳細はブログ上部の「公開アプリ」から。

アプリ自体について

WPFで作成しています。
ですので、.NET Frameworkが動作するWIndows デスクトップ環境なら動くかと。
WPFであるため、Windows10以外でも動きます。
裏を返せば、Windows10以外でも動かせるように、ストア以外でもなるべく配布しておきたいと思っています。

De:code2018に参加してきました

今年のお土産類、ショボくないですか?



総括

・開発言語関係のレベルアップ
・Azure機能追加
・.Net技術の展開
・Hololens アプリ開発が各社で進行中
・新デバイスの発表は(たぶん)無し
Galaxyのテスト失敗率は異常


言いたいこと

今年の参加者パーティも、何も当たりませんでした……
と書こうと思ってたら、ブラックサンダー当たりました。(200名様当選のヤツ)



いやあ、微妙……

Python と Teonsorflowの勉強環境構築

全然やる予定の無かったPythonを勉強する環境を慌てて用意している図。
ちなみに私のPythonレベルは、まだ基本構文すら暗記していないレベルです。
だから難しいこと聞かないでね(予防線)

Python環境前準備

絶対に用意するもの:ログインユーザ名が日本語でないユーザ
これは(実質)必須です。
開発者の多くは、面倒を避けるためにWindows のログインユーザは日本語を使用していないと思います。
よって、Pythonを使おうとする大部分の人は問題ないと思いますが、Micorosoftアカウントと紐づけした環境だったりすると、ログインユーザが、つまりはユーザプロファイルのフォルダパスに日本語が混じっていることがあります。
この状態だと、インストールに失敗します。
うまくいっているように見えても途中でコケます。
ええ、私はコケました(泣)
(ユーザプロファイルに日本語が混じっている環境をわざと用意しておいたんだよぅ、本当だよぅ)
そんなわけで、適当なユーザアカウントが無い人はまずそれを作成しましょう。

考えるもの:CPU版かGPU版か
機械学習なので、できればGPU……といきたいところですが、そこはご利用なさっている環境次第。
当記事では、CPU版を使用します。


環境構築手順

1:Anaconda
https://www.anaconda.com/download/#_windowsからAnacondaを拾ってきてインストールします。
特に注意することはありませんが、インストール途中でVSCodeを入れておきます。

2:tensorflow環境
Anacondaのインストールが終わったら、Anaconda Navigatorを起動。
画面左側のペインから「Environments」を選択。
続いて、画面下部にあるCreateボタンから仮想環境を作成します。

ここで「Location」にある場所に仮想環境が作成されます。後で使うので確認しておきます。
仮想環境が作成できたら、仮想環境一覧にある▶から、「Open Terminal」を選択。
pip install --ignore-installed --upgrade tensorflow
をぶちこみます。インストールにちょっと時間がかかりますので待ちます。
これでtensorflow環境自体は完了です。

3:VSCodeの準備
tensorflowの実行自体は、jupyterlabから見るのが手っ取り早いのですが、どうにも慣れないのでVSCode環境も作ります。
拡張として、
・Python
・Anaconda Extension Pack
を入れます。
また、jupyterで作成したファイルを見たい場合は、「VS Code Jupyter Notebook Previewer」を入れておくとよさげです。
さて、PythonをVSCodeで実行するのはF5キーで実行するだけなので簡単です。
ですが、tensorflowの実行環境は「仮想環境」にあるため、そのままではVSCodeはパスを参照できません。
なので、ワークスペースの設定を追加してやります。
[ファイル]-[基本設定]-[設定]から開けるので、
{
    "python.pythonPath": "C:/Users/ユーザ名/Anaconda3/envs/TensorFlow/python.exe"
}
を追加しましょう。ここのパスは仮想環境作成時に作ったパスとなります。
(ここのパスは「スラッシュ区切り」です。「バックスラッシュ」「¥」ではありません。エクスプローラからコピる人は注意)

4:実行確認
ここまできたら、あとはチュートリアルを試して動作確認。
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

そのほかの環境
これは自分メモですね。
グラフが欲しい場合はmatplotlibを入れますが、これも普通に
pip install matplotlib
で可能です。仮想環境に入れるため、Anaconda Navigatorからターミナルを開いた方がよいでしょう。
下記はテストがてら、シグモイド関数をプロットしたものです。




Pythonチュートリアル 第3版

新品価格
¥1,944から
(2018/5/13 14:50時点)