忘備録メモ。解決策がわかっていません。
Recordsetに関するエラーが表示されなくなりました。 (理由、契機が不明)
OPENされていないRecordset.Closeしたとき、 関数単位で処理が消えてしまう?エラーとなる?ようです。
忘備録メモ。解決策がわかっていません。
Recordsetに関するエラーが表示されなくなりました。 (理由、契機が不明)
OPENされていないRecordset.Closeしたとき、 関数単位で処理が消えてしまう?エラーとなる?ようです。
数日前にはてなブックマークの人気エントリーでフミコフミオ氏の記事を拝見してから、ファンになって氏のブログを読んでいます。 旧き良き(良いかは諸説ある)時代のテキストサイトの趣があり、懐かしい気持ちになりました。
氏の本題たるところの記事ではないかと思いますが、下記の一文がなるほど!と思ったのでメモしておきます。
趣味は人生を豊かにする。ただしその趣味とはレジャやスポーツとは異なるものであって、著者はそれを研究(探究)と位置付けている。研究といっても大袈裟なものではなく、日々の疑問や不思議を自分なりのやり方で調べ、検証することであると
森博嗣著「ジャイロモノレール」は超高齢化社会を生き抜くためのサバイバル・マニュアルなので読んだほうがいい。 - Everything you've ever Dreamed
「著者のいう趣味とは研究(探求)である」
趣味という表現に悩ましい思いを抱いていました。
趣味とは享楽的で受動的なものの趣を強く感じ、「趣味としてやる」を頭に付けるとどうも違和感を覚える次第でした。
趣味でやるのにこんなに苦労して…という思いもありましたが、研究(あるいは探求)であると考えると納得感があります。
私事の関心について調べ、再現可能な方法で確かめ記録し、結論を述べる。
趣味で苦労していいんだ!という気持ちになりました。
2021~2023年の3ヵ年目標では将来にわたって精度の高い予測をするのが難しいと思いました。COVID-19の流行のような予期せぬこと(我が家の場合は第二子の誕生)などがあって、目標の実現度のみならず、目標設定の意味や意義が損なわれる可能性があると感じました。
また短期的目標を繰り返すだけでは意味がなく3年、5年を通して実現したいことを明確化する必要があると考えました。
2028年には39歳になります。そのころにはさらに10年後(49歳)に繋がる戦略を持っていたいと思いました。そのために5年後の時点では自分のキャリアの骨格となる部分が見えていないという思いに至りました。
MITシャイン博士のキャリアアンカーの考え方を基として、僕の場合は「純粋な挑戦」を中心に組み立てることにしました。
各年の目標はこれまでは4軸で考えていた軸を3軸に整理しました。仕事/家族/趣味などとぱっきり分けてしまうと、二律背反しなくても済むもの(例えば「家庭と仕事」や「給与収入と趣味の支出」など)が対立構造になってしまうため、要素を融合させたものを軸としました。
軸 | 内容 | 備考 |
---|---|---|
①仕事/お金 軸 | 就いている職業での貢献と、仕事に限らず収益を得られる活動 | 仕事も趣味も同じ軸とし経済性を高められることを軸とする |
②人/家族 軸 | 職場や趣味で出会う人、また家族とのコミュニケーション | 人との関係を大切にして、付き合いを意識的に行うことを軸とする |
③挑戦/趣味 軸 | 自由時間や仕事など①②を含んで総括的に挑戦する | 仕事、趣味、人付き合い、経済性すべてで挑戦することを是とする |
そのうえで各年のテーマを参考に毎年各軸の目標振返り・設定するという形にしようと思います。
年 | テーマ | 内容 |
---|---|---|
2024年 | これまでやってこなかった新たなチャレンジを3つ増やす | 新たな挑戦を各軸で行うことを目標とします |
軸 | 目標 | 備考 |
---|---|---|
①仕事/お金 | より多くの仕事をもらえるように交渉する | 業務内で知らない仕事を覚えてできることを増やしたい |
②人/家族 | 自ら誘い遊びや学びの場を定期的に開催する | コミュニケーションを目的とした自分のコミュニティを作りたい |
③挑戦/趣味 | 普段触れていない技術に触れ、新しいスキルや表現を習得する | 学びの場をみずから求めてそれをアウトプットにつなげたい |
年 | テーマ | 内容 |
---|---|---|
2025年 | 仕事の質をあげる。量を増やす | とにかくできることを増やして仕事におけるポジションを獲得したいです |
2026年 | 家族と子供たちの思い出を増やす | 翌年から小学校入学で生活が変わるのでその前に沢山出かけて遊んで思い出を増やしたいです。 |
2027年 | 猫たちとの時間を作る | 一番上の猫ちゃんが10歳を迎えます。ゆっくりと彼らと過ごせる時間ももうあまり多くないと思います。猫ちゃんたちのニャン生が何より充実できるように…。 |
2028年 | 49歳までのキャリアプランを作る | 5ヵ年の大目標のキャリア(挑戦できる土台)の屋台骨を作り上げ、49歳までの10年間をどう過ごすかを見通せるようになりたいです。 |
2020年に立てた目標が次の通りです。ちょうど第一子が生まれる直前で「スポーツ(運動)」「技術」「仕事」「家族」の4軸で目標を設定しました。評価方法は次の通りです
評価 | 達成度 |
---|---|
A | 想定通り達成 |
B | 8割程度達成 |
C | 6割程度達成 |
D | 4割程度達成 |
E | 未実行 |
但し評価はかなり主観です。
年 | 軸 | 目標 | 内容 | 自己評価 | 評価内容 |
---|---|---|---|---|---|
2021年 | スポーツ | 減量-5kg | 78kgから73kgにダイエット | A | 70kgに但し3年後にリバウンドで76kg |
2021年 | 技術 | Webサービス2本 | 何らかのサービスを2個作る | C | Vue.jsの勉強で「買ったつもりで貯金」サービスを作りました。 |
2021年 | 仕事 | 大きな内製システムを開発する | 自分が主担当になり新規でシステム開発する | A | 今も元気に動いている社内システムを作りました。苦労しただけにかなり堅牢に動いています |
2021年 | 家族 | 育児。子供の成長を記録する | 子供と深くかかわり3歳までに信頼関係を築くことが目的 | A | 第一子の時は育休は取らずまじで苦労しました。子供一人目でも寧ろ一人目だからこそパパは育休取った方がいいです。ここだけで400文字くらいかけます |
年 | 軸 | 目標 | 内容 | 自己評価 | 評価内容 |
---|---|---|---|---|---|
2022年 | スポーツ | 子供とできるスポーツを体験する | 球技なり何なりを子供と一緒にやる | D | 1歳児が何ができるか完全に理解不足。でも公園で一緒にめっちゃ遊びました |
2022年 | 技術 | OSSに参加する | OSSコミッターになる | D | 業務で使ったe-Learningシステムの不具合をGithubでココのコード間違ってますよ!とIssueあげましたがpull requestはできず…。指摘事項が取り込まれてほくほくでした。 |
2022年 | 仕事 | VBSライブラリ化 | システム間で共通のライブラリパッケージのようなものを作りそれを用いて開発する | B | 結論からいうと似たようなことはしたのですが、逆にメンテナンス性が落ちました。IDEとかでパッケージサポートがない以上、システム間にわたって変更が共有される仕組みは怖くて作れず…。結局1つのシステム内で共通関数を使うのみに落ち着きました。 |
2022年 | 家族 | 旅行に行く | 子供たちに色々なものを見せたい | A | 2022年1月に第二子が生まれて6ヵ月の子を連れて飛行機で妻の実家に里帰りしました。めちゃ大変でした。下の子が9ヵ月の時に車で1泊旅行にいきましたが飛行機と比べたら楽でした |
年 | 軸 | 目標 | 内容 | 自己評価 | 評価内容 |
---|---|---|---|---|---|
2023年 | スポーツ | 競技会に出る | 何らかのスポーツを始めて記録会や競技会に出る | E | スポーツは始められず…!!未実行でした。 |
2023年 | 技術 | 登壇する | 何らかの技術カテゴリで登壇して発表する | A | 2021年~2022年に企業の技術研究会に所属してリーダーとして発表しました。2023年はその内容で論文書きあげて情報処理学会に掲載してもらったのでこれはもうA Tierです(Tierじゃないけど)。大変でした。 |
2023年 | 仕事 | スマホ対応アプリケーションの開発 | PCとスマホ・iPad両対応のUI、システムを作る | B | 結論からいうと似たようなことはできました。本当はネイティブアプリが作りたかったのですがWebでUIはCSSライブラリ、仕組み面はVBSで疑似的なAPIみたいなものを作りJSで制御するという仕組みにしました。及第点位はあげたい。 |
2023年 | 家族 | 夫婦の時間を作る | 子育てに一区切りつけて夫婦のコミュニケーションの時間を意識して作る | B | 年末ぎりぎりで実母に子供たちを見てもらい1/4日くらい時間が作れそうです。四半期に1日くらいは定期的に時間を作るようにしたいです。 |
3ヵ年で目標設定したのははじめてで、それまでは毎年超ざっくりとした「こんな感じ~」みたいな目標でした。
やっぱり未来になるほど目標精度が落ちるなぁと思いました。
2024年からは5ヵ年目標として大テーマ「キャリアの屋台骨を作る」と各年の個別テーマを毎年末に作成する感じでいこうかと思います。|
会社PCを入れ替えたので以前対応したのがまた出てくるようになりましたのでメモです。 リモートデスクトップで接続先のコンピュータ/サーバのWUが最新でない場合(ほかにも条件あるかも)に下記のようなアラートがでて繋がらなくなります。
上記でアラートがでなくなり、リモートデスクトップがつながるようになります。
S19からPS4のAPEXで下記のエラーでゲームが止まることが増えました。(ただS18から始めたので過去も起きていた問題なのかは不明)
ps4 proで発生していました。詳しい端末番号が確認できませんでした…
設定→初期化→クイック
でps4を初期化したところ解消されたように見えます。
外部ストレージにps4自体のバックアップがある場合は、復元することで解消される場合もあるようです。
下記ブログを参考にしました。エラー自体はps4のストレージエラーに起因するようです。再起動しても解消せず、メモリリークではなさそうでした。
最近、PS4でCE-34878-0(エラー)をよく見かけるようになった→(追記)原因分かりました - Miya's Textbox
仕事でCOBOLで化石発掘をすることになりましたので忘備録。
COBOLは桁数で何を記述するかが決まっている。 下記のとおり
桁数 | 名称 | 内容 |
---|---|---|
1-6 | シーケンス番号領域 | プログラムの行番号を記述する。行番号はエラーメッセージに利用される |
7-72 | A領域 | ソースコードを記述する領域 |
73-80 | B領域 | コメントを記述する領域 |
プログラムを4つの論理的領域に分ける。 各領域は次の通り
DIVISION名 | 内容 |
---|---|
IDENTIFICATION DIVISION. | プログラムの基本情報箇所。プログラム名、作成者等々 |
ENVIRONMENT DIVISION: | 環境情報の箇所 |
DATA DIVISION: | データ記述箇所。変数、レコード等々。WORKING-STORAGE SECTION.で宣言 |
PROCEDURE DIVISION: | プログラム記述箇所 |
プログラム記述領域において処理ブロックを作成する。 (サブルーチンのようなもの)
PERFORM セクション名
で呼び出しができる。セクションの処理が終了すると呼び出し元に戻る。
下記の例ではMAIN-SECTION.からスタートし、PROCESS-SECTION-A.⇒PROCESS-SECTION-B.の順で呼び出しを行う。
IDENTIFICATION DIVISION. PROGRAM-ID. hogehoge. DATA DIVISION. WORKING-STORAGE SECTION. 01 Variable-A PIC 9(3) VALUE 100. 01 Variable-B PIC 9(3) VALUE 200. PROCEDURE DIVISION. MAIN-SECTION. DISPLAY 'Main section.' PERFORM PROCESS-SECTION-A PERFORM PROCESS-SECTION-B DISPLAY 'Program completed.' PROCESS-SECTION-A. DISPLAY 'Processing Section A.' COMPUTE Variable-A = Variable-A + 10. PROCESS-SECTION-B. DISPLAY 'Processing Section B.' COMPUTE Variable-B = Variable-B - 20.
この手のはいつもClassic ASPで書いてますが,ASP使わなくてもJSで書けたことがわかりました.
ただそのまま読み込んでURLをIframeに移すのはあまりよくないのでチェックが必要なことと,JSを無効にしているとページが表示されないこと(iframeの基本のクロスオリジンの理解も必要)なので没になりました.
$(function(){ var currentUrl = window.location.href; var parameterString = currentUrl.slice(currentUrl.indexOf('?') + 1); var parameters = {}; parameterString.split('&').forEach(function (pair) { var keyValue = pair.split('='); var key = keyValue[0]; var value = decodeURIComponent(keyValue[1] || ''); parameters[key] = value; }); var pdflink = parameters['pdf']; if(pdflink != undefined || pdflink != ''){ pdfstr = pdflink + "#toolbar=0&navpanes=0" $("#frame").attr("src",pdfstr); } });
... </head> <iframe id="frame" width="100%" height="740px" src=""></iframe> </html>
いい参考コードが見当たらず苦戦していましたが,ChatGPTに聞いたら一発でした.
チャットGPTに聞いたこと
JavaScriptでクリップボードから画像を張り付けてCanvasでアスペクト比は変えずに縦横どちらかの最大の大きさが800px以下になるように変形し,Canvasサイズも同じ縦横の大きさになるように描画するコードを教えて
動くコードでしたがちょっとニュアンスが違い,実装したい仕様とことなりました.返答のコードはCanvasサイズを800pxにするコードか,Canvaサイズを変えずに中の画像を長辺が800px以下にするコードの2通りの返答でした.
二つを組み合わせて下記のようにしました 下記で動きます.
動くコードも嬉しいけど何よりコメントが本当にうれしいです. 全部にはさすがに付けないけど,ここは他の人(半年後の自分含む)が見たら理解に数秒かかるだろうな~というポイントにコメント残すようにしているのでデフォルトでしっかりコメント付けてくれるのがうれしいです.
<!DOCTYPE html> <html> <body> <canvas id="canvas"></canvas> <script> // クリップボードから画像を貼り付けた時に実行される関数 function handlePaste(event) { var items = event.clipboardData.items; // 画像がクリップボードに存在する場合 if (items && items.length) { var file = null; // 画像データを探す for (var i = 0; i < items.length; i++) { if (items[i].type.indexOf('image') !== -1) { file = items[i].getAsFile(); break; } } if (file !== null) { var reader = new FileReader(); // ファイルの読み込み完了時に実行される関数 reader.onload = function(event) { var image = new Image(); image.onload = function() { var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); var aspectRatio = image.width / image.height; var maxWidth = 800; var maxHeight = 800; if (aspectRatio > 1) { // 横長の場合 var newWidth = Math.min(image.width, maxWidth); var newHeight = newWidth / aspectRatio; if (newHeight > maxHeight) { newHeight = maxHeight; newWidth = newHeight * aspectRatio; } } else { // 縦長または正方形の場合 var newHeight = Math.min(image.height, maxHeight); var newWidth = newHeight * aspectRatio; if (newWidth > maxWidth) { newWidth = maxWidth; newHeight = newWidth / aspectRatio; } } // キャンバスのサイズを設定する canvas.width = newWidth; canvas.height = newHeight; // 画像の縦横比を保持しながらキャンバスに描画する context.drawImage(image, 0, 0, newWidth, newHeight); }; image.src = event.target.result; // 読み込んだファイルのデータURL }; // ファイルを読み込む reader.readAsDataURL(file); } } } // クリップボードからの貼り付けイベントを検知し、handlePaste関数を実行する document.addEventListener('paste', handlePaste); </script> </body> </html>
localに立てたSQL SERVERにSAでログインできずにこまった
ODBC(32bit)で接続情報を立てようとしたところ,sqlstate 28000 (error 18456)
のエラーが発生.
下記サイトを参考にしました
How to Fix Login Failed Microsoft SQL Server Error: 18456 - Appuals.com
SSMSをインストールして,Windows認証でlocal環境にログイン.
saを右クリックでプロパティを開き,パスワードを設定. (初期設定パスワードは「RPSsql12345」らしいですが検証できず…)
状態でログインが許可されているかも確認します.
サーバを右クリックしプロパティの「セキュリティ」で「サーバ認証」を「SQL Server認証とWindows認証」に設定.
構成マネージャの「SQL Serverネットワーク構築」>プロコトルでTCP/IPを有効にする(初期設定は無効になっているようです)
上記手順でsaアカウントでのSQL Server認証ができるようになりました.
Verticaのデータ確認をvsqlやDBeaverから自作のDB閲覧ツール(localのclassic asp)に切り替えてから,主キー含む構造表を確認したいことがありました.
Vertica はv_catalog.columnsの「data_type 」で型名と大きさまでちゃんと出してくれて偉いです.
column_name | data_type | NULL許可 | PrimaryKey |
---|---|---|---|
列A | varchar(10) | NO | p |
列B | varchar(5) | ||
列C | numeric(18,0) | ||
… | … | … | … |
SystemTable | 列 | 内容・備考 |
---|---|---|
v_catalog.columns | column_name | 列の名前 |
〃 | data_type | 列の型(大きさ).小文字で出ますがDDL作成時は大文字にしないとエラーになる.varchar->VARCHAR |
〃 | is_nullable | NULL許可の場合[1]が入る |
PRIMARY_KEYS | constraint_type | 主キーの場合[p](主キーではない場合はnull) |
WHERE句のc.table_schema,c.table_nameを指定して絞込みます.
SELECT c.column_name ,data_type ,CASE WHEN c.is_nullable = 1 THEN '' ELSE 'NO' END AS 'NULL許可' ,IsNull(constraint_type,'') AS 'PK' FROM v_catalog.columns c LEFT JOIN PRIMARY_KEYS k ON c.column_name = k.column_name AND c.table_name = k.table_name AND c.table_schema = k.table_schema WHERE c.table_schema='schema' AND c.table_name='table' ORDER BY c.ordinal_position;
長くなったのでVBS基本構文から分離しました
BASP21を使用
<%@ CodePage=65001 %>
BASP21でバイナリを読み込む
Set bobj = Server.CreateObject("basp21") byteArray = Request.BinaryRead(Request.TotalBytes) ' 画像送信時にフォームのnameに「image」と名前を付けて送信しておく sarray = bobj.FormBinary(byteArray,"image")
読み込んだバイナリをStremでWindows-1252(utf-8のWin版かな?)文字列に変換し,変数「str」に保存.
「image,base64の画像本体」となっているのでカンマでSplitしてbaseに保存.
このとき,<%@ CodePage=65001 %>
でASPファイルを明示的に文字コードをUTF-8の宣言しておかないと文字化けしてうまくいかなかったです.
dim stream : set stream = server.CreateObject("ADODB.stream") stream.type = 1 'TypeBinary stream.mode = 3 ' read write stream.Open stream.write(sarray) stream.Position = 0 stream.Type = 2 ' TypeText stream.Charset = "Windows-1252" str = stream.ReadText ' binary to string stream.close set stream = nothing base = Split(str,",")
base(1)の本体部分をDOMDocumentのBase64Dataを使ってBase64デコードする.
' string Base64 decode Set objXML = Server.CreateObject("MSXml2.DOMDocument") Set objDocElem = objXML.createElement("Base64Data") objDocElem.DataType = "bin.base64" objDocElem.text = base(1) 'the base64-encoded string imgdata = objDocElem.NodeTypedValue
imgdataに画像バイナリが格納されているのでStreanでpng画像としてサーバに保存します.
' 画像ファイルを保存 FileName = "D:\folder\picture.png" set stream = server.CreateObject("ADODB.stream") stream.type = 1 'TypeBinary stream.mode = 3 ' read write stream.Open stream.write(imgdata) stream.SaveToFile FileNa
今回はJPG・PNG問わずPNGで保存するような仕様にしました.送信時にJavaScriptでCanvasに一度描画して画像縮小しているため,バイナリに拡張子の情報自体がないのだと思います.入力ファイルに拡張子が存在する場合,Streamでの画像保存時に元の拡張子を考慮する必要があるかもしれません.
このケースではinput type="hidden"の全てのDOMを選択した.
let nodes = document.querySelectorAll("input[type='hidden']");
全要素を処理したい場合ノードリストの関数で回すのが便利そう
nodes.forEach(n => { n.value = ''; })
// name=checkでかつcheckboxが選択されているものを抽出 document.querySelectorAll('input[name="check"]:checked') // type=checkboxでname=checkのものを抽出 document.querySelectorAll('input[type="checkbox"][name="check"]')
vsql passrod:******
create table schema.tablename (col1 VARCHAR(255) , col2 VARCHAR(255),col3 VARCHAR(255));
小文字のvarcharだとcatalog.varcharとなってしまうため,大文字でVARCHARと記述.
\dt