SQLの窓

2023年02月08日


#Zoom の必殺技 : 相手に自分の Zoom 関連のウインドウを見せる

通常相手には見えないですが、Win + プラスキーで 拡大鏡起動すると画面が画像扱いになるので、常に相手にデスクトップならみんな表示されます。



posted by lightbox at 2023-02-08 10:23 | リモート | このブログの読者になる | 更新情報をチェックする

2023年02月06日


GAS でユーザ作成 : 組織は "orgUnitPath": "/組織名A/組織名B"

Google の Admin console でテスト後、GAS での再現を確認
https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/insert
上記リンクは管理コンソールで、右サイドで実際に自分のアカウントで API をリアルタイムに実行します。単なる登録系で量が少ない時は、これでひたすら実行したりします。

テスト後、 GAS で AdminDirectory 追加してコードの実行。最初、組織の設定解らなかったのでしなかったら、ルートに作成されたので調べて【"orgUnitPath": "/組織名A/組織名B"】である事を確認
function myFunction() {

  AdminDirectory.Users.insert({
    "name": {
      "familyName": "familyName",
      "givenName": "givenName"
    },
    "password": "パスワード",
    "primaryEmail": "user.insert@ドメイン",
    "changePasswordAtNextLogin": false,
    "recoveryEmail": "recovery@ドメイン",
    "orgUnitPath": "/組織名A/組織名B"
  });  
  
}

サンプルは Admin SDK Directory サービスですが、したい事が無かったりするので引数の渡し方はここから想像してテストするしか無いですね




posted by lightbox at 2023-02-06 16:12 | GAS | このブログの読者になる | 更新情報をチェックする

2023年02月02日


Google 共有ドライブの容量の上限について

ええと、上限が超えたと報告があって、対応する事となったのですが...
相変わらず Google のドキュメントは要点を取り出しにくい

結論から言うと、該当する共有ドライブを新しい組織に所属させて、組織単位で上限設定可能です。

1) マイドライブの上限は無いように思われる。
2) 共有ドライブの上限は、デフォルトでは 100G と書いてある。
3) しかし、対象の共有ドライブは 1テラ超えてからエラーが発生していた。
4) 全ての共有ドライブの上限を上げるわけにいかないので、個別の方法を調査。
5) どうも最近できた機能らしく、所属組織毎に共用ドライブを割り振れる。
6) そして、 所属組織毎に容量上限が設定できるので、新しい組織で上限を 10テラ に変更。

※ 所属組織は、デフォルトではルートですが、どの階層でもそこで上書きができます。 
Google Workspace for Education です
※ 一番上の一部を別の共有フォルダにある程度移動していて、これではあかんなぁ...となって調査


posted by lightbox at 2023-02-02 19:42 | Google | このブログの読者になる | 更新情報をチェックする

2023年01月07日


#ZOOM #アバター #ベータ版

正月の更新で英語のリリース内容にアバターの文字があったので試したら、ほぼキャラクタ着せ替えだった。

どうみてもあちらの TOON 系なので、AI 絡んで、日本系やリアル系に進化して欲しい 
画像アップロードが面倒な時代になって来たので、Twitter を使う。
イーロン・マスク、頑張ってね。


posted by lightbox at 2023-01-07 15:02 | WEBサービス | このブログの読者になる | 更新情報をチェックする

2022年12月31日


VScode でダークテーマでキャプチャした画像を印刷しないようにしましょう。トナーがもったいないです。

現場では当たり前の事ですが、この発想に及ばないのは実際の開発現場でのプリンタの管理が想像以上にこのようなお金の問題以外にもたくさんあるからです。



posted by lightbox at 2022-12-31 17:22 | システム開発 | このブログの読者になる | 更新情報をチェックする

2022年12月29日


Visual Studio Code で行末のスペースを消去する

保存時に実行したければ、"files.trimTrailingWhitespace": true です。自動保存にすると、ソース変更すれば実行されます。



posted by lightbox at 2022-12-29 10:09 | Microsoft | このブログの読者になる | 更新情報をチェックする

Microsoft Edge を終了してもメモリに残るのを避ける

何かの都合( IEモードとか ) でたまに開くだけなのに、メモリを無駄に消費しますね...



posted by lightbox at 2022-12-29 09:39 | Microsoft | このブログの読者になる | 更新情報をチェックする

2022年11月17日


VBScript / JScript: Windows標準のオブジェクト( CDO.Message ) と ロリポップメールを使ってメール送信

▼ VBScript
▼ JScript
コマンドプロンプトから、以下のようにしてテストしています cscript mail.vbs cscript mail.js ssl を使用( ポート 465 )するので、smtpusessl が true になっています。 mail.vbs
' ***********************************************************
' 使用するパラメータ
' ***********************************************************
strFrom = "わたしです <ロリポップメールアドレス>"

strTo = "あなたです <送り先メールアドレス>"

strServer = "smtp.lolipop.jp"

nPort = 465
strUser = "ロリポップメールアドレス"
strPass = "パスワード"

' ***********************************************************
' オブジェクト
' ***********************************************************
Set Cdo = WScript.CreateObject("CDO.Message")

' ***********************************************************
' 自分のアドレスと宛先
' ***********************************************************
Cdo.From = strFrom
Cdo.To = strTo

' ***********************************************************
' 件名と本文
' ***********************************************************
Cdo.Subject	= "件名の文字列 / " & Now()
Cdo.Textbody = "テキスト本文" & vbCrLf & "改行は vbCrLf"

' ***********************************************************
' CC BCC HTMLメール( CC BCC はどちらか片方  )
' ※ 両方指定すると CC
' ***********************************************************
Cdo.Cc = "メールアドレス1,メールアドレス2"
'Cdo.Bcc = "メールアドレス3,メールアドレス4"
Cdo.Htmlbody = "<img src=""https://winofsql.jp/image/winofsql.png"">"

' ***********************************************************
' ファイル添付あり
' ***********************************************************
Cdo.AddAttachment( "C:\Users\sworc\Pictures\0152-ac.jpg" )
Cdo.AddAttachment( "C:\Users\sworc\Pictures\ai\2022-08-24-1.png" )

' ***********************************************************
' 設定
' ***********************************************************
Cdo.Configuration.Fields.Item _
 ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Cdo.Configuration.Fields.Item _
 ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strServer
Cdo.Configuration.Fields.Item _
 ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = nPort
Cdo.Configuration.Fields.Item _
 ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true

Cdo.Configuration.Fields.Item _
 ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
Cdo.Configuration.Fields.Item _
 ("http://schemas.microsoft.com/cdo/configuration/sendusername") = strUser
Cdo.Configuration.Fields.Item _ 
 ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPass

' ***********************************************************
' 設定の反映
' ***********************************************************
Cdo.Configuration.Fields.Update

' ***********************************************************
' 送信
' ***********************************************************
on error resume next
Cdo.Send
if Err.Number <> 0 then
	strMessage = Err.Description
else
	strMessage = "送信が完了しました"
end if
on error goto 0

Wscript.Echo strMessage





mail.js
// ***********************************************************
// 使用するパラメータ
// ***********************************************************
var strFrom = "わたしです <ロリポップメールアドレス>";

var strTo = "あなたです <送り先メールアドレス>";

var strServer = "smtp.lolipop.jp";

var nPort = 465;
var strUser = "ロリポップメールアドレス";
var strPass = "パスワード";

// ***********************************************************
// オブジェクト
// ***********************************************************
var Cdo = WScript.CreateObject("CDO.Message")

// ***********************************************************
// 自分のアドレスと宛先
// ***********************************************************
Cdo.From = strFrom
Cdo.To = strTo

// ***********************************************************
// 件名と本文
// ***********************************************************
Cdo.Subject	= "件名の文字列 / " + new Date();
Cdo.Textbody = "テキスト本文\r\n改行は \\r\\n";

// ***********************************************************
// CC BCC HTMLメール( CC BCC はどちらか片方  )
// ※ 両方指定すると CC
// ***********************************************************
Cdo.Cc = "メールアドレス1,メールアドレス2"
//Cdo.Bcc = "メールアドレス3,メールアドレス4"
Cdo.Htmlbody = "<img src=\"http://winofsql.jp/image/winofsql.png\">"

// ***********************************************************
// ファイル添付あり
// ***********************************************************
Cdo.AddAttachment( "C:\\Users\\sworc\\Pictures\\0152-ac.jpg" )
Cdo.AddAttachment( "C:\\Users\\sworc\\Pictures\\ai\\2022-08-24-1.png" )

// ***********************************************************
// 設定
// ***********************************************************
Cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strServer
Cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = nPort
Cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true

Cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
Cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = strUser
Cdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPass

// ***********************************************************
// 設定の反映
// ***********************************************************
Cdo.Configuration.Fields.Update()

// ***********************************************************
// 送信
// ***********************************************************
var strMessage
try {
	Cdo.Send()
	strMessage = "送信が完了しました"
}
catch ( error ) {
	strMessage = error.message;
}

WScript.Echo( strMessage );





posted by lightbox at 2022-11-17 16:19 | VBS + インターネット | このブログの読者になる | 更新情報をチェックする

2022年08月14日


C# : HttpClient で Post と Get する汎用 static クラス

UrlEncode をキャラクタセットを指定して送れるようになっています。受信データは、Content-Type でキャラクタセットが指定されておれば、自動的に変換されています。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace winofsql {

	class Tool {

		// 戻される文字列は、サーバー側で Content-Type に Charset が
		// 指定されておれば自動変換されます

		// *********************************************
		// UTF-8 POST
		// *********************************************
		public static async Task<string> Post(string url, Dictionary<string, string> param) {
			string result = "";

			try {
				HttpClient httpClient = new HttpClient();
				httpClient.MaxResponseContentBufferSize = int.MaxValue;
				HttpContent content = new FormUrlEncodedContent(param);
				var response = await httpClient.PostAsync(url, content);
				String text = await response.Content.ReadAsStringAsync();

				result = text;
			}
			catch (Exception Err) {
				result = "ERROR: " + Err.Message;
			}

			return result;

		}

		// *********************************************
		// エンコード指定 POST
		// *********************************************
		public static async Task<string> Post(string url, string encoding, Dictionary<string, string> param) {
			string result = "";
			string query_string = "";
			byte[] data1 = null;
			byte[] data2 = null;
			string data3 = null;

			foreach (KeyValuePair<string, string> kvp in param) {
				if (query_string == "") {
					query_string += "";
				}
				else {
					query_string += "&";
				}

				data1 = Encoding.GetEncoding(encoding).GetBytes(kvp.Value);
				data2 = WebUtility.UrlEncodeToBytes(data1, 0, data1.Length);
				data3 = Encoding.GetEncoding(encoding).GetString(data2, 0, data2.Length);
				query_string += kvp.Key + "=" + data3;
			}

			try {

				HttpClient httpClient = new HttpClient();
				HttpContent content = new StringContent(query_string);
				content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
				var response = await httpClient.PostAsync(url, content);
				String text = await response.Content.ReadAsStringAsync();

				result = text;
			}
			catch (Exception Err) {
				result = "ERROR: " + Err.Message;
			}

			return result;

		}

		// *********************************************
		// URL のみ呼び出し GET
		// *********************************************
		public static async Task<string> Get(string url) {
			string result = "";

			HttpClient httpClient = new HttpClient();

			HttpResponseMessage response = null;
			try {
				response = await httpClient.GetAsync(url);
			}
			catch (Exception Err) {
				result = "ERROR: " + Err.Message;
			}
			// 接続に失敗
			if (response == null) {
				return result;
			}

			try {
				response.EnsureSuccessStatusCode();
			}
			catch (Exception Err) {
				result = "ERROR: " + Err.Message;
			}
			// HTTP 応答の失敗
			if (!response.IsSuccessStatusCode) {
				return result;
			}

			// 内容を文字列として取得
			try {
				String text = await response.Content.ReadAsStringAsync();

				result = text;
			}
			catch (Exception Err) {
				result = "ERROR: " + Err.Message;
			}

			return result;

		}

		// *********************************************
		// データ呼び出し( UTF-8 ) GET
		// *********************************************
		public static async Task<string> Get(string url, Dictionary<string, string> param) {

			string query_string = "";

			foreach (KeyValuePair<string, string> kvp in param) {
				if (query_string == "") {
					query_string += "?";
				}
				else {
					query_string += "&";
				}
				query_string += kvp.Key + "=" + WebUtility.UrlEncode(kvp.Value);
			}

			return await Get(url + query_string);

		}

		// *********************************************
		// データ呼び出し( エンコード指定 ) GET
		// *********************************************
		public static async Task<string> Get(string url, string encoding, Dictionary<string, string> param) {

			string query_string = "";
			byte[] data1 = null;
			byte[] data2 = null;
			string data3 = null;

			foreach (KeyValuePair<string, string> kvp in param) {
				if (query_string == "") {
					query_string += "?";
				}
				else {
					query_string += "&";
				}
				data1 = Encoding.GetEncoding(encoding).GetBytes(kvp.Value);
				data2 = WebUtility.UrlEncodeToBytes(data1, 0, data1.Length);
				data3 = Encoding.GetEncoding(encoding).GetString(data2, 0, data2.Length);

				query_string += kvp.Key + "=" + data3;
			}

			return await Get(url + query_string);

		}

	}
}


呼び出し
string result = await winofsql.Tool.Post(
	"http://localhost/lightbox/sample/test.php",
	"shift_jis",
	new Dictionary<string, string>() { { "field1", "日本語" }, { "field2", "表示" } });

if (result.PadRight(5).Substring(0, 5) == "ERROR") {
	Debug.WriteLine(result);
}

関連する記事

Framework4(C#) : WebClient で Post と Get する汎用 static クラス
Framework4(C#) : Windows Phone OS 7.1 : WebClient で Post と Get する汎用 static クラス
Android で Post と Get


posted by lightbox at 2022-08-14 12:02 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする

2022年04月29日


キーボード入力をファイル化

置き換え

type con > a.txt




追加( Append )

type con >> a.txt
終了時は 改行入力後、CTRL+Z を入力してEnter です

type nul > ファイル名で、ファイルを空で初期化できます。

posted by lightbox at 2022-04-29 14:35 | コマンドプロンプト | このブログの読者になる | 更新情報をチェックする

コマンド リダイレクト演算子を使用する( Using command redirection operators )

✅ Microsoft ドキュメント
コマンド リダイレクト演算子を使用する

⭐ 単純な リダイレクト は > です。
 コマンドプロンプトに表示されるはずの文字列をファイルに書き込みます。

⭐ >> を使うと追加書き込みです。

このような記号は、リダイレクト演算子と呼ばれます。

STDIN

0

キーボード入力

STDOUT

1

標準出力

STDERR

2

Error output to the Command Prompt window

0、1、2 は ハンドル番号で、既存のハンドルへのリダイレクトを指定するには、アンパサンド(&)文字の後にリダイレクトしたいハンドル番号を使用します。

なので、2>&1 は 標準エラー出力を標準出力にリダイレクトする事を意味します。

▼ 解りやすいテストはエラーだけに着目して、以下のように実行します。

C:\temp>dir x
 ドライブ C のボリューム ラベルは Windows10 です
 ボリューム シリアル番号は 40B9-7D17 です

 C:\temp のディレクトリ

ファイルが見つかりません
( x が存在しないので『ファイルが見つかりません』と言うエラーメッセージが出ます ) この『ファイルが見つかりません』は、dir x > message.txt としても message.txt には書き込まれまれずに、コマンドプロンプトに表示されます。

しかし、以下のようにすれば全て書き込む事ができます。

dir x > message.txt 2>&1
この方法は解りにくいですが、標準出力と標準エラー出力を同時にリダイレクトしたいときに意味があります。
dir x 2> message.txt
だと、ファイルが見つかりません だけが書き込まれてしまいます。

キーボード入力をファイル化

リダイレクト演算子を使用して、キーボードから入力した文字列をテキストファイルに書き込む事ができます。
type con > message.txt
type コマンドは、ファイルの内容をコマンドプロンプトに表示するコマンドですが、con と言う特殊な予約文字列を使用すると、キーボードをファイルとみなした動作を行います。 ※ 終了時は 改行入力後、CTRL+Z を入力してEnter です

空のファイルを作成する

nul と言う予約文字列を使用して以下のように実行します
type nul > message.txt

実行結果を表示しない

nul は存在しないファイルのようなものなので、標準結果への出力を無かった事にできます
dir *.* > nul
posted by lightbox at 2022-04-29 14:26 | コマンドプロンプト | このブログの読者になる | 更新情報をチェックする

アンパサンド(&) を使用して複数のコマンドを一行で続けて実行

以下は、ファイル名を指定して実行からの起動ですが、コマンドプロンプトを表示したままで保持し、必要がなくなればすぐ閉じる事ができます
(もちろんコマンドプロンプトからの実行でもかまいませんが、その場合は pause は必要無いです)

/c は、/c の後の文字列を新しい cmd.exe で実行した後、cmd.exe を終了するという意味なので、dir を実行した後、pause で一時停止して入力待ちとなり、何かキーを押せば cmd.exe が終了します。

最後に pause を使う方法は、コンソールに出力された結果を画面で確認できるようにする為に用いられます。

cmd /c dir & pause


& による一行の複数実行は、複数のアプリケーション(バッチファイル内の行単位の処理)をプログラムから呼び出したい(call コマンドを使用)場合で、外部にバッチファイルを作りたくない場合に使用します。


次のサンプルは、ユーザフォルダの dir の結果をテキストファイルにリダイレクトして dir の結果をメモ帳で開きます。

notepad の起動に start を使用しているので、元の cmd.exe は終了して結果の dir.log を表示したメモ帳のみが Windows 上に残ります( start が無いと、cmd.exe が notepad.exe の終了を待ちます )
cmd /c cd %HOMEPATH% & dir > c:\temp\dir.log & start notepad c:\temp\dir.log



ダウンロードしたファイルをエクスプローラから実行する場合は、『許可する』にチェックして『適用』して下さい。






posted by lightbox at 2022-04-29 14:09 | コマンドプロンプト | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成
CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり