命名って難しい

変数、関数、クラスなどなど実装より命名に毎回悩むタイプの人間による技術についてのメモ。

Google App ScriptでGmailの受信ボックスを自動でアーカイブしちゃう

Outlookメールでは一括処理というものがあり、n日後に○○するというようなルールが設定できます。 しかしGmailではできないのでGoogle App Scriptで組む事にしました。

Gmail自体はラベル機能が便利すぎるのでOutlookをメインにはしたくないんですよね。

もくじ

続きを読む

Windows10ProにAnaconda入れてコマンドラインでpythonと入れたらなぜかストアのPythonインストールページが開かれるのを直した。

自宅PCでpythonでも勉強しようかなと思っては

  1. 思い立ってpythonをAnacondaでインストールしてみる
  2. コマンドラインから python って入れたらストアが立ち上がる
  3. 再インストールしてみる
  4. 飽きて他の作業をしてしまう(そのためこの現象を忘れる)

ポンコツループを繰り返していました。

素直にググれという話なんですが、対処した方法をメモしておきます。

  • 環境
  • 対処方法
  • 参考
続きを読む

Apple Musicのプレイリストを Spotifyにエクスポートした。

ネットでみかけたApple MusicのプレイリストをSpotifyに取り込むため、一部ブックマークレットと外部サービスを使って解決した流れをメモ。

  • 前提
  • 手順
    • 1. プレイリストをテキスト形式に落とし込む
    • 2. Playlist Converter にテキスト形式でデータを読み込ませる
続きを読む

PowerShell&Seleniumでネットショップの価格調査、初売りセールからの追加値下げを見たい。

新年あけました。 今年は福袋など買わず、ゆっくりと体を休めていました。

欲しい靴が某ECで初売りセールだったのですが、ネットでは「1/10前後で初売りセールよりまた安くする」というのを聞いたので PowerShellSeleniumを使って巡回してデータを集めて、かつ通知するようにしました。

結果として、自分の欲しい靴を安く手に入れることができてよかったのですが、普段業務で多用しているSeleniumだけでなく、Google Appsとの連携をしてみたので備忘のためにメモ。

要件

  • 1~2時間間隔くらいでデータ取得
  • データが時系列のグラフで見れる
  • 外出先から見れる(スマホ通知・メール)

こんな感じ。

概要

勢いで作ったので頭の中の整理も兼ねて Draw.io で作りました。

f:id:NotShown:20200115002258p:plain
ざっくりとした概要

今日はここまで、図を描くのにめっちゃ時間かかったので疲れた。。。 後日、実装系を書こう。 そんなボリュームないけれど。

sp_helpindexを全DB全テーブルに実行してインデックス情報を一覧にするクエリ

前提

検証用に本番機のデータベースをテスト環境に作りたくて、

スクリプトの生成」を使ってデータベース全体の作成クエリを作ったあと、データを本番機から流し込む、

という方法でやっていたら、インデックス作成クエリが出力されていなくてテストで失敗した。

本番機と比較して追加漏れを確認するために、このクエリを書いた。

クエリ

ざっくりと動作を説明すると sp_MSforeachdb と sp_MSforeachtable をネストし、sp_helpindex でインデックス情報を一時テーブルに格納し、選択する。

-- 一時テーブル 
CREATE TABLE #temp_index_info (a text, b text, c text)
CREATE TABLE #index_info (server_name text, db_name text, table_name text, index_name text, index_description text, index_keys text)

-- データベースは ! を使い、テーブルは ? を使うことで全DB全テーブルに対して処理をする。
EXEC sp_MSforeachdb @replacechar ='!', @command1='
    USE [!];
    EXEC sp_MSforeachtable ''
        INSERT #temp_index_info EXEC sp_helpindex ''''?'''';
        INSERT #index_info SELECT @@SERVERNAME, ''''!'''', ''''?'''', * FROM #temp_index_info;
        TRUNCATE TABLE #temp_index_info;
    ''
';
DROP TABLE #temp_index_info;

SELECT * FROM #index_info;
DROP TABLE #index_info;

学び

今回は sp_MSforeachdb , sp_MSforeachtableを初めて活用した。

めっちゃ便利。これからも使っていく。

あと、弊社内でもこういうインデックスの情報とかをまとめて簡単に参照できるウェブページが作れるといいね。

設定情報に加えて意図や目的をメモする欄とか入れたりして、DB自体の情報に対して説明を入れ込むことがしたい。

属人化も減るし、社内メンバーの理解度の底上げにもなると思う。

以上!

仮想マシンのWindows Server 2012 R2にSQL Server 2014 Expressをインストールするために必要な.NET Framework 3.5のインストールで苦しんだ結果「これで大丈夫?」って方法になった話。

タイトル長すぎる。

結論

仮想マシンでインストールメディアのないWindows Server 2012 R2 に SQL Server 2014 Expressをインストールする時に必要な .Net Framework をインストールするには、Windows Server 2012 R2 の評価版のISOからSxSフォルダを抽出してそこを指定してインストールする。

実際この方法で解決したんですけれど、大丈夫なんすかこの方法。 問題あれば誰かご指摘ください・・・。

経緯

自社テスト環境のために以下の環境を構築することになりました。

マシンの調達

そのため、まず仮想マシンを調達。

弊社はKDDIの閉域網WVSを使っており、その中で仮想マシンを調達できるKCPSを利用しています。

KCPSから仮想マシンを調達。

SQL Server 2014 Express の調達

以下からダウンロード

www.microsoft.com

SQL Server 2014 Expressのインストール

インストールを試したところ失敗。 .Net Framework 3.5 が必要なようです。

スクショ忘れた。

.Net Framework 3.5のインストール

.Net Framework 3.5 のインストール方法を調べたところ、以下の方法が見つかりました。

blogs.osdn.jp

が、それが失敗。原因がわからずググることに。

.NET Framework 3.5 インストール時のエラー: 0x800F0906、0x800F081F、0x800F0907 https://support.microsoft.com/ja-jp/help/2734782/net-framework-3-5-installation-error-0x800f0906-0x800f081f-0x800f0907

で、これも失敗。

Windows Updateなんども当てて最新にしようと、パッチを当てようとインストールはできませんでした。

評価版からのインストール

他の方法は「インストールメディアを指定してそれをソースとしてインストール」しかなく、インストール済の仮想マシンを調達したこの場合はインストールメディアもないので試せない。

インストールメディアが必要な理由はその中のSxSフォルダを参照するからなので、極端な話SxSフォルダさえあればいい。

Windows Server の評価版のISOから抜き出してSxSフォルダを使えばいい。

という発想のもと評価版をインストールしマウント。 SxSフォルダのみ抽出し、役割と機能の追加からやっと.Net Framework 3.5 をインストールすることができました。

SQL Serverのインストールも無事でき、環境構築が完了しました。

懸念

評価版のISOから抜き出してSxSフォルダを参照することに関して、ライセンス面での問題はあるのだろうか・・・

こういう懸念が出たとき、どうやって調べていくのがよいのか。

以上!

SQL Serverのセキュリティ保護可能なリソース、全部出す。

2019/09/18 追記

取得ということに焦点を当てて検索してコピペで作ったけれど、今後は sys.database_permissions をきっちり見ていく必要があるなと思った。今回は許可のみ(現在のシステムがそうなっている)で考えていたけれど、拒否もあれば permission stateも表示すると正確に把握できる。

docs.microsoft.com


引き継いだシステムの検証用データベースの構築をしたのですが、セキュリティ保護可能なリソースの設定漏れが発生したので再発防止のため、表題のクエリを作成した。

SSMSで一つづつポチポチプロパティを変更して設定していったため作業漏れが発生したので、まず一覧がほしいと思ったのでそこまで。 将来的には権限を設定するクエリも作成しておいて、検証用DBの作成が楽になるといいな。

日英表現違いに注意

URLとか英語で読むにしたら分かるんですが、セキュリティ保護可能なリソースは英語で securables です。

docs.microsoft.com

securables でググるだけでもかなり情報へのアクセスしやすさが変わりました。

クエリ

一時テーブルはめっちゃ適当です。

CREATE TABLE #secuarables_alldb (
    server_name text,
    database_name text,
    object_name text,
    user_name text,
    permission_name text
);

EXEC sp_MSforeachdb '
USE ?;

INSERT INTO #secuarables_alldb
SELECT
   @@servername as server_name, ''?'' AS database_name, OBJECT_NAME(major_id) as object_name, USER_NAME(grantee_principal_id) as user_name, permission_name
FROM
    sys.database_permissions p
WHERE
    p.class = 1 AND
    OBJECTPROPERTY(major_id, ''IsMSSHipped'') = 0
ORDER BY
    OBJECT_NAME(major_id), USER_NAME(grantee_principal_id), permission_name
';


select * FROM #secuarables_alldb;
DROP table #secuarables_alldb;

参考

sp_MSforeachdb

めっちゃ便利だった。こんなものがあるとは。。。
勉強の過程でこういうのってどうやってたどり着くんでしょうね。

blog.engineer-memo.com

Securables の取得

stackoverflow.com