「拡張子」を含む日記 RSS

はてなキーワード: 拡張子とは

2023-01-16

Excelのシート保護の解除方法

  1. 拡張子.zipに変更して展開する。
  2. xl\wooksheets\sheet1.xml などのシートに対応したXMLファイルを開く。
  3. sheetProtectionタグを削除する。
  4. ファイル一式をZip圧縮する。
  5. 元の拡張子に戻す。

備考: Microsoftによれば「ワークシート レベル保護は、セキュリティ機能意図したものではありません。 」とのこと。

https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE%E4%BF%9D%E8%AD%B7%E3%81%A8%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-be0b34db-8cb6-44dd-a673-0b3e3475ac2d

2022-11-30

HTML拡張子は `.html` が良い。

`.htm` は未練がましく小気味悪い。

2022-11-07

腹減ってるなと思ったとき

拡張子」を「餃子」と空目したとき

2022-10-16

NovelAIが重すぎるからローカル環境にNAI環境を構築する(2022年10月16日版)(追記あり)

せっかく課金したのにユーザが増えまくっているのか滅茶苦茶重くなっていて最悪。

から流出したモデルを使ってローカルでNAI環境を構築する。

ネットには情報もだいぶ転がってるけど陳腐化した情報があまりに多いため増田にまとめることにした。

しかたらこ記事もすでに陳腐化しているかもしれないが…単純に間違ってたらトラバで教えてほしい。

もちろん自己責任。この記事を見て導入した結果何かあっても増田は何も保証しない。

英語がわかる人はこっちを見た方が早いと思う。今は導入RTAができるくらい導入は楽になっている。

https://rentry.org/nai-speedrun

推奨環境

VRAMが2GB以上あるNVIDIA製のグラフィックボードがあればローカル環境を構築できる。

GPU世代はGTX700シリーズ以降。なので一昔前のミドル級ボードでも動作するらしい。

IntelオンボードGPUでも実行する方法があるらしい(stable_diffusion.openvino)が今回は割愛する。自分で探してね。

その他の推奨環境は以下の通り。

対応OSWindows7以上(と言うがM1Macでも動作する方法があるとかなんとか)

必要な空きストレージ容量:20GB以上

インメモリ:16GB以上(VRAMもたくさん必要だが起動時にメインメモリも大量に食う。WebUI起動時にタスクマネージャを見ているとよくわかる)

スマホしか持ってないような人やこういうのがよくわからない人はNovelAIを使った方が良いと思う。

今は重いけど、きっとそのうちみんな飽きてサーバも軽くなるかもしれないし。

(追記)NovelAIリソースを確保してサーバが軽くなったかリスクを背負ってまで導入しなくても良いか

手順1:PythonGitを導入する

(追記)Pythonは当然3系。最新の奴を入れれば問題無い。

導入方法はいちいち書かないけど、「python --version」や「git -v」で

正常にバージョン情報が出る(パスがきちんと通っている)ことはちゃん確認しよう。

手順2:Stable Diffusion web UI(AUTOMATIC1111)を導入する

Stable Diffusion web UIはStable Diffusionやそれをベースとした画像生成AIを利用するためのフロントエンド

その中でも特に開発が活発でデファクトスタンダードとなっているのがAUTOMATIC1111版だ。

導入したい適当ディレクトリに対してPowerShellなどで

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

とやってやれば必要ファイルの導入が行われる。

なお、AUTOMATIC1111版は数時間単位コミットが行われるから

定期的に「git pull origin master」で更新しよう。

手順3:BitTorrent流出モデルダウンロードする

クライアントはqBitTorrentが一番楽だと思う。

ここにはさすがにmagnetリンクは書かないか各自ググって欲しい。

結構誤解されがちなことだが流出データ50GBを全部ダウンロードする必要は無い。

必要ファイルはanimefull-final-prunedディレクトリの中身とanimevae.ptから5GBちょっとくらいなんじゃないかな。

もし余裕があるならmoduleディレクトリの中身もダウンロードすればいいけど、ぶっちゃけ必要無いんじゃないか

手順4:ダウンロードした各ファイルリネーム・移動

まずはanimefull-final-prunedの中身のファイルリネーム

model.ckpt」を「animefinal-full-pruned.ckpt」のようなわかりやす名前にして、

「animevae.pt」を例えば「animefinal-full-pruned.vae.pt」のような拡張子以外は同じファイル名にする。

WebUI起動フォルダ配下の\models\Stable-diffusionリネームしたファイルを移動させれば配置はOK

ちなみにmoduleディレクトリの中身は\models\hypernetworksに移動させて使う。

それらのファイルを設定で適用させると画風が結構変わるがNovelAI再現とは関係無いみたいだ。

(追記)moduleディレクトリの中身の.ptファイルはhypernetworksという技術によって画風などを学習したものらしい。

すでに複数イラストレーターの画風を学習したptファイル作成されており議論を呼んでいる。

手順5:webui-user.batの中身に設定を追加する

自分グラボのVRAMが4GB未満の場合は「set COMMANDLINE_ARGS=」の後に

4GB未満の場合は「--medvram」、2GB未満の場合は「--lowvram」とパラメータを追加しておこう。

自分の持ってるグラボのVRAMがわからないときGPU-Zなどで調べよう。

またGTX1600系固有のバグ(単色の画像が出力される)があるらしいので

その場合は「--no-half-vae」もしくは「--no-half」や「--precision full」とパラメータを追加。

ちなみにパラメータに「--xformers」を追加してxformersを導入・使用すると

消費VRAMが減って画像生成処理時間も短縮されるので是非導入しよう。

画像からdanbooruタグAI調査するdeepdanbooruを利用する場合は「--deepdanbooru」を追加。

これらの設定は同時に複数適用させることもできる。例えば

set COMMANDLINE_ARGS=--medvram --xformers --deepdanbooru

のようになる。

手順6:webui-user.bat起動、設定変更

ターミナルPowerShellなどでwebui-user.batを起動しwebUIの初期導入と起動を行う。

過去には手動でCUDA等を導入する必要があったが、現在はこの初期導入でだいたいの導入が行われる。

ずいぶん楽にはなったがその分初期導入の時間結構長い。10分~20分くらいかかるかもしれない。

途中で導入処理がエラーで止まってしまった場合管理者権限で実行するなどして対応して欲しい。

起動ができたらSettingで以下の設定を変更してNovelAIに近づける。

Stop At last layers of CLIP modelを2に、

Eta noise seed deltaを31337にする。

これで設定は完了

おまけ:アスカテスト

設定を合わせて完全にNovelAIと同じ内容になったのかを確認するテストがある。

出力結果から海外じゃHallo Asuka Testなんて呼ばれている。

これは初期SEEDをはじめとする設定内容が完全に一致していれば同じ出力結果を得られる仕組みを利用している。

プロンプトの内容:masterpiece, best quality, masterpiece, asuka langley sitting cross legged on a chair

ネガティブプロンプトの内容:lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name

サンプリングステップ数:28

サンプリング形式:Euler

CFG Scale(プロンプトの強度):12

初期Seed2870305590

この内容で見事下の画像と全く同じ画像が出力されれば合格だ。

https://i.imgur.com/Bfl5qJB.jpg

なお、このテストはAUTOMATIC1111のバージョンやxformersの適用状態によっては微妙に違う画像が出力されることがあるらしい。

xformersを適用させている増田環境だと確かに二つ並べると間違い探しレベルの違いがあった。

正直このテストクリアしなくても十分だと個人的には思う。

おまけ2:その他便利になる設定や拡張機能

「Booru tag autocompletion for A1111」を導入すればNovelAIのように自動danbooruタグを保管してくれる。

注意

画像生成AIモデルはStable DiffusionOSSのため派生結構多い。

自前で追加学習もできるため自前で学習した追加AIモデル4chanのような掲示板などで共有する人もいるらしい。

しかしそのようなモデルの中にウィルスのような悪意のある動作を行うものもあるらしい。

FBIペドフィリア一網打尽にするためにIPアドレスなどの個人情報を抜き出す動作を行うロリ特化AIモデル掲示板で配布していて

しかもそれには本物の児童ポルノ教師データとして使われている…などという都市伝説的な話が今界隈を賑わせている。

それが本当の話かどうかはわからないが、とにかく変なところからモデルダウンロードするのは危険なのでやめよう。

自己矛盾溢れる注意喚起かもしれないが…

2022-10-08

結局、NovelAIの独自技術ってなんだったんだ?

NovelAIのgithubからリークした。

掲示板などを読んでみると、単純にStable Diffusionアニメ絵学習させただけではなさそうだった。

アニメ画像学習させた.ckpt(GB単位)と、付属データらしい.vae.pt(数百MB)と、更にhypernetworkという新しい単語が出てきて、.ptファイルというのもあるらしい。

.pt既存のTextual inversionでも使われている拡張子なのだが同じだろうか。


hypernetworkを読み込ませないと、崩れたアニメ絵が出てくるようだ。

NovelAI側のヘルプを見ると、プロンプトの最初に『masterpiece, best quality,』をつけるとクオリティが上がるらしく、拡張する時に追加しているキーワードなのかもしれない。


で、結局NovelAIはどうやって実現しているのか。

拡散モデル研究している人も知りたいというツイートをみたので論文にない独自方法なのか?

vae.ptというファイルからの推測だとVAE学習させてるのかな?


追記

どうやらhypernetworksという技術を追加で使っているらしい。

AUTOMATIC 1111にhypernetworksに関する実装が追加されている。現在gitブランチでhypernetworksトレーニングコード実装開始されている。

掲示板などを見ていくと、prompt最初に{masterpiece}を最初につけないと、いわゆるNovelAIっぽいアニメ絵にならないらしい。

{masterpiece}をつけない場合キャラ名は認識しているっぽいが、WaifuDiffusionっぽい崩れた画像が出てくるようだ。(アニメ画像学習した.ckptだけで動作し、.vae.ptは動いてない?hypernetworksが効いてない?)

キャラ名については、同一名で作品が違うという場合があるので、おそらく学習時に別の単語に置き換えていると想像する。(NovelAIでキャラ名を入れた際に候補が出るが、変換しているはず)


他にpromptトークン数をNovelAIは拡張している。

StableDiffusionの75トークンは、512x512の画像との対応付けから来ているというのが、付け焼き刃の知識での理解なのだが、どう対応付けしているのか。

最初に{masterpiece}があった場合フラグONにして、CLIPに渡すときは{masterpiece}を除外ってのは想像できるが、それでもトークンが余る。


Waifu Diffusion V1.3がリリースされ、学習する枚数を増やしたが、掲示板などに貼り付けてあるものを見る限り、まだ手は改善されてない。

最終リリース前(epoch5,6?)のものとの比較した画像も流れているが、見ても違いはわからない。

Stable DiffusionがDiffusion modelで精度が高い先端モデルとされているが、単純に学習枚数だけ増やしても手は描けない、ということではないだろうか。

追記

NovelAIが解説記事をあげていた。

https://blog.novelai.net/novelai-improvements-on-stable-diffusion-e10d38db82ac

2022-08-24

anond:20220824104307

拡張子そのままだとGoogle勝手解凍して

「あっこの種のファイル送信セキュリティのため禁止しまーす。ウイルス証拠?知らん念のためだよ」

つってブロックしてくるが、拡張子変更しとけば防げる

という意味での有用性はある

2022-08-01

anond:20220731183342

自動安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋) 

/**************************************

以下のCSV_DIR, FILE_PATHS, SETTINGSを書き換えてね。 <h3>o- *************************************/</h3>

//CSVファイルが置かれてるディレクトリパス投稿前にエラー出たら大体ここの設定ミス。 例:"C:\\Users\\sakuraimasahiro\\Documents\\iMacros\\Macros\\rentou\\";

const CSV_DIR =

'C:\\Users\\USER\\Desktop\\iMacros\\Macros\\rentou\\';

//ファイルパスCSV絶対パスで、拡張子必要。iimは相対パスでよく、拡張子不要

const FILE_PATHS = {

//投稿文が書かれたCSVファイル

textCsv: CSV_DIR + 'textNoAnker.csv',

//レス投稿文が書かれたCSV。通常とレス用で分けないなら同じファイルを使えばいい。

replyTextCsv: CSV_DIR + 'textReply.csv',

};

const SETTINGS = {

//投稿後の基本待ち時間

baseWaitTime: 5,

//baseWaitTime+0~waitTimeRange(ランダム)だけ待つ

waitTimeRange: 5,

//連投しすぎだと忠告された場合に処理を一時停止させる時間(秒)

waitTimeForAvoidingPunishment: 60 * 30,

//メール

mail: 'sage',

//名前設定

nameSettings: {

//名前名無しなら''。

name: '',

//以下、偽装ワッチョイ設定。浪人ワッチョイを非表示にしてるときだけtrueにしてね。

//妙なニックネーム(ワッチョイ、アウアウウーなど)をランダムで決めて付加するかどうか。true=付加する。false=付加しない。

nickname: false,

//妙なニックネームの後に付く8桁の文字列ランダムで決めて付加するかどうか。

korokoro: false,

//IPランダムで決めて付加するかどうか。

ip: false,

//地域ランダムで決めて付加するかどうか。

area: false,

},

postSettings: {

//アンカー無し投稿をするならtrue。しないならfalse。noAnkerPostかreplyPostのどちらかはtrueにすること(両方trueでもOK)。

noAnkerPost: false,

//アンカー付き投稿(返信)をするならtrue。しないならfalse。もしnoAnkerPostとreplyPostの両方がtrue場合投稿は返信が優先され、返信対象が見つからなくなったらアンカー無し投稿をする。

replyPost: true,

//最初に取得するアンカー無し投稿CSVファイルの行番号。もし返信用と同じCSVファイルを使うなら-1と入力

noAnkerPostTextCsvStartRow: 1,

//最初に取得する返信用投稿CSVファイルの行番号。もしアンカー無しと同じCSVファイルを使うなら-1と入力

replyPostTextCsvStartRow: 1,

//テキストCSV/返信用テキストCSVの取得行が最終行に達したら最初の行まで戻るかどうか。true=戻る。false=マクロ終了。

textCsvLoop: true,

//返信する場合、これより小さなレス番には返信しない。返信を投稿すると、この数値は前回の返信先のレス番に更新される。

minAnker: 895,

//返信する場合名前に以下の文字列を含む投稿アンカーをつけて返信する(ワッチョイやIPなど名前フィールドにあるものならなんでも可)。配列複数指定可能指定無しなら空配列([])。filterNamesとfilterNamesNotIncluded共に無指定ならレス番1から順に返信していく(minAnkerが設定されてればそこから順に)。以下のfilter系は全て併用可能

filterNames: [],

//↑とは逆に、名前に以下の文字列を含まない投稿アンカーをつけて返信する。↑と併用も可能

filterNamesNotIncluded: [],

//返信する場合、本文に以下の文字列を含む投稿アンカーをつけて返信する。

filterText: ['自演かな', '自演わらわら', 'スクリプト使うの', '安価ガバ', '>>660', '自演擁護', '最後' ,'あいうえお', 'かきくけこ', 'さしすせそ', 'なにぬねの', 'はひふへほ', 'まみむめも', 'やいゆえよ', 'やゆよ', 'らりるれろ', 'わいうえを', 'わをん', 'わいうえをん'],

},

//自分IPアドレス確認VPNとかでIPを変更してマクロを動かしてるとき、突然VPN作動しなくなってIPが元に戻ったときマクロを止めるためのもの

ipSettings: {

//自分現在IPアドレス確認をする。

checkIp: true,

//以下の文字列自分現在IPアドレスに含まれている場合マクロを一時停止する。基本的自分の本当のIPアドレス入力

avoidTheIp: '133.206.99.224',

},

//浪人設定。最後動作確認したのは5年くらい前で、今も同じように動作するかは、浪人を持ってないか確認できずわからない。

roninSettings: {

//浪人ログインしてるかどうかをチェックするかどうか。trueらするfalseならしない。trueにしていてもし浪人ログインしていないことを確認したらログインしにいく。

checkLogin: false,

//浪人ログインメールアドレス

mailAdress: 'abc@def.com',

//浪人ログインパスワード

password: '1234',

},

//false: run()実行させず(デバッグ用)

run: true,

//true: 投稿処理だけしない デバッグ

skipPost: false,

};

/**************************************

設定箇所終わり。

書き込めない時の早見表 - 5ちゃんねるwiki

https://info.5ch.net/index.php/%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%81%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E6%97%A9%E8%A6%8B%E8%A1%A8 <h3>o- *************************************/</h3>

/**************************************

メモ

クラスフィールド宣言できない。

・NULL演算子(??)は使えない。論理積(&&)は使える。

オブジェクトの分割代入はできない。

・importはできない。 <h3>o- *************************************/</h3>

/**************************************

関数 <h3>o- *************************************/</h3>

/**

* ここから始まる。

*/

function run() {

//設定ミスがないか調べる。

checkSettings();

var _TextCsvCursors = new TextCsvCursors(

new TextCsvCursor(

SETTINGS.postSettings.noAnkerPostTextCsvStartRow > 0

? SETTINGS.postSettings.noAnkerPostTextCsvStartRow - 1

: SETTINGS.postSettings.noAnkerPostTextCsvStartRow,

FILE_PATHS.textCsv,

SETTINGS.postSettings.textCsvLoop,

),

new TextCsvCursor(

SETTINGS.postSettings.replyPostTextCsvStartRow > 0

? SETTINGS.postSettings.replyPostTextCsvStartRow - 1

: SETTINGS.postSettings.replyPostTextCsvStartRow,

FILE_PATHS.replyTextCsv,

SETTINGS.postSettings.textCsvLoop,

),

);

var _LoopStatuses = new LoopStatuses(0, SETTINGS.postSettings.minAnker);

const _MyPosterName = new MyPosterName({

name: SETTINGS.nameSettings.name,

});

//スレURL指定

const _ThreadUrl = openPromptThreadUrl();

//ループ

while (true) {

//IP確認する設定なら、それをする。

SETTINGS.ipSettings.checkIp && checkCurrentIpNotTheIp();

//スレを開く

openUrl(_ThreadUrl.fullUrlHttps());

//浪人ログインする設定なら、浪人ログインしているかどうかを確認し、していなければログインしにいく。

if (SETTINGS.roninSettings.checkLogin) {

if (!checkRoninLogin()) {

loginRonin();

continue;

}

}

//投稿に使うテキスト取得。

const p = (function () {

if (SETTINGS.postSettings.replyPost) {

//返信あり設定の場合。返信対象が無いか調べる。

const targetAnkerNumber = createPostDOMList()

.filterPostnumberHigher(_LoopStatuses.currentMinAnker())

.filterByPostername(SETTINGS.postSettings.filterNames)

.filterByPosternameNotIncluded(

SETTINGS.postSettings.filterNamesNotIncluded,

)

.filterByText(SETTINGS.postSettings.filterText)

.lowestPostNumber();

if (targetAnkerNumber !== null) {

//返信対象があったのでアンカー付き投稿文を作る。

const r = _TextCsvCursors.takeNextRowTextAsReply(targetAnkerNumber);

messageDisplay(`返信対象有り。アンカー先: ${targetAnkerNumber}`);

return {

...r,

updatedLoopStatuses:

_LoopStatuses.updateMinAnker(targetAnkerNumber),

};

}

}

if (SETTINGS.postSettings.noAnkerPost) {

//返信対象無し、或いは返信しない設定の場合アンカー無し投稿文を作る。

const r = _TextCsvCursors.takeNextRowTextAsNoAnker();

messageDisplay('返信対象無し。アンカー無し投稿。');

return {

...r,

updatedLoopStatuses: _LoopStatuses,

};

}

return null;

})();

if (p) {

//投稿

postThenCheckError(

_ThreadUrl.serverName(),

_MyPosterName.randomize({

nickname: SETTINGS.nameSettings.nickname,

korokoro: SETTINGS.nameSettings.korokoro,

ip: SETTINGS.nameSettings.ip,

area: SETTINGS.nameSettings.area,

}),

SETTINGS.mail,

p.text,

);

//_TextCsvCursorsと_LoopStatusesを更新

_TextCsvCursors = p.updatedTextCsvCursors;

_LoopStatuses = p.updatedLoopStatuses.incrementPostCount();

messageDisplay([

`投稿回数: ${_LoopStatuses.currentPostCount()}`,

`minAnker: ${_LoopStatuses.currentMinAnker()}`,

`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,

`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,

]);

} else {

messageDisplay([

`返信対象が現われるのを待機中...。`,

`投稿回数: ${_LoopStatuses.currentPostCount()}`,

`minAnker: ${_LoopStatuses.currentMinAnker()}`,

`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,

`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,

]);

}

//短時間で連投しまくると規制されるので一定時間待機。

wait(SETTINGS.baseWaitTime + randomRange(0, SETTINGS.waitTimeRange));

}

}

/**

* 投稿処理と投稿結果を見てリトライしたりマクロ終了したり。

* @param {string} serverName サーバー

* @param {MyPosterName} _MyPosterName

* @param {string} postMail メール

* @param {MyText} _MyText

* @param {number} retryTimes

* @returns {void}}

*/

function postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes = 0,

) {

const r =

retryTimes === 0

? new ValuesOfPost(serverName, _MyPosterName, postMail, _MyText).post(

postTo5chTread,

postConfirm,

)

: new ValuesOfPost(

serverName,

_MyPosterName,

postMail,

_MyText,

).postSubstring(retryTimes, postTo5chTread, postConfirm);

if (r) {

back();

return;

}

//エラーページに飛ばされた。エラー情報取得。

wait(7);

const error = createPostErrorMessage().analyze();

messageDisplay(error.message);

if (error.order === 'KILL') {

kill();

} else if (error.order === 'SKIP') {

return;

} else if (error.order === 'TRUNCATE') {

back();

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes + 1,

);

} else if (error.order === 'WAIT') {

wait(SETTINGS.waitTimeForAvoidingPunishment);

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes,

);

} else if (error.order === 'LOGIN') {

//動作未確認

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes,

);

}

return;

}

/**

* 現在IPアドレスに、SETTINGS.ipSettings.avoidTheIpの値が含まれていないことを確認する。含まれていたらマクロを一時停止。

* @returns

*/

function checkCurrentIpNotTheIp() {

//IP確認ページへ飛ぶ

openUrl('https://www.cman.jp/network/support/go_access.cgi');

const _IpAdress = createIpAdressFromCMan();

if (_IpAdress.includes(SETTINGS.ipSettings.avoidTheIp)) {

pause('現在IP指定した値が含まれていることを確認。');

//ポーズ解除したならもう一度確認しに。

checkCurrentIpNotTheIp();

}

return;

}

/**

* 設定に致命的な問題が無いか検査

* @returns

*/

function checkSettings() {

if (

SETTINGS.postSettings.noAnkerPost === false &&

SETTINGS.postSettings.replyPost === false

) {

return kill('設定エラー。noAnkerPostとreplyPost両方ともfalseになってる。');

}

if (

SETTINGS.postSettings.noAnkerPostTextCsvStartRow < 0 &&

SETTINGS.postSettings.replyPostTextCsvStartRow < 0

) {

return kill(

'設定エラー。noAnkerPostTextCsvStartRowとreplyPostTextCsvStartRow両方とも-1になってる。',

);

}

if (

SETTINGS.postSettings.noAnkerPostTextCsvStartRow === 0 ||

SETTINGS.postSettings.replyPostTextCsvStartRow === 0

) {

return kill(

'設定エラー。noAnkerPostTextCsvStartRow/replyPostTextCsvStartRowの初期値は-1或いは1以上で。',

);

}

}

/**

* 入力フォームを表示して入力されたスレURLを受け取る。

* @returns {ThreadUrl}

*/

function openPromptThreadUrl() {

const url = prompt('スレURL入力');

return new ThreadUrl(url);

}

/**

* 開いてるスレレス全て読み取ってPostListインスタンスを作って返す。

* 重すぎるので使うのやめ。どうやらインスタンスの大量生成が原因な模様。

* createPostDOMListを使う。

* @returns {PostList}

*/

function createPostList() {

const posts = window.document.getElementsByClassName('post');

return new PostList(Array.from(posts).map((e) => new Post(e)));

}

/**

* 開いてるスレレス全て取得してPostDOMListに格納して返す。

* @returns

*/

function createPostDOMList() {

const posts = window.document.getElementsByClassName('post');

var arrPostDOMList = [];

for (let index = 0; index < posts.length; index++) {

//HTMLCollectionからElementを1つずつ抽出して配列に。

arrPostDOMList.push(posts.item(index));

}

return new PostDOMList(arrPostDOMList);

}

/**

* 開いてる投稿結果画面に表示されてるエラーを読み取ってPostErrorMessageインスタンスを作って返す。

* @returns {PostErrorMessage}

*/

function createPostErrorMessage() {

return new PostErrorMessage(

window.document

.g Permalink | 記事への反応(0) | 15:40

2022-06-14

anond:20220614224945

アイコン フリー」で検索して、出てくるサイトから「.svg」とか「.jpg形式で気に入ったやつを保存して、適当フォルダに保存してプロパティからリンクしとけばいいんやろと思ってたんだよ

そっからさらペイントで加工して、拡張子書き換えるのは面倒に感じてしまった

気持ち的には親子丼セット(そんなものないけど)を買って、ごはんにかけて食べようと思って中身開けたら、調理前の卵と鶏肉ネギが入ってたくらいめんどい

アイコンって「.ico」って拡張子なのか

デスクトップに置いているブラウザ系のアプリショートカットが気の滅入るような見た目だったので変えたいなと思ったのだけど、わざわざ「.ico」にしないといけないのか

サイズ規定通りにして「.bmp」で保存してから「.ico」に書き換えればいいというブログ記述を見つけたが、心底めんどくさくなった

マンガミーヤ

画像ビューアとしていまだに使ってるけど、さいきんみれない画像がふえてきたなー

拡張子だけみるとおなじjpgなのに、じつはこそり仕様がかわってきてるのかなー

2022-04-22

anond:20220422121001

TypeScriptなんて、JavaScriptで書いておいて拡張子だけ ts に変えればいいだけじゃないの。

そりゃ、TypeScriptの全機能を使うのは無理かもしれんけどさ。

2022-03-24

iphonで写真撮ったらheicって拡張子になった

ま、それは解決たからいいんだけど

この画像圧縮形式はHEIF(ヒーフ)っていうんだって

んでそれの拡張子がHEIC(ヘイク)。

おかしくない?

そこはヒークじゃないの?英語のこういう所が嫌い。

2022-03-12

○nion版サイトからTwitterアカウント作成してみた【読みにくい】追記

<はじめに>

読みにくいと題に書きました。この文章を読んだあなた不快になったとしてもそれは注意書きを読んだ上であなたあなた判断によってあなたが読んだ文章によってあなた不快になったにすぎず、それは完全にあなた自己責任です。祈りが足りません。毎日もっともっと祈ってください。

<はじめにおわり>

ブログを開設して投稿しても良かったのですが、増田投稿したほうが興味のある人に少しでも多く届くかなと思い増田投稿することにしました。

先日、TwitterがOnion版サイト対応したと風のうわさに囁かれました。

https[:]//twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid.onion

これがそのURLです。(ChromeSafariEdgeインストールした後そのままつかているFirefox、では閲覧することができません。諦めてください)

おそらくTwitter社が想定しているケースは

①何らかの理由によって、Twitterへのアクセスエラーを吐くようになった。(生IPでのアク禁

ユーザーは長年使用してきたTwitterアカウントログインして情報を得たい、情報投稿したい。

③なので、Onion版サイトを公開するから使ってね。

みたいな意図なのではないか勝手に想定しています。が、これはあくまで一民間人主観なので流してください。

①への対策としてVPNが挙げられますが、プライバシー保護を謳う幾多のVPNがこれまで国家権力に屈してログ情報を開示してきた例を見ると(すべてがすべてノーログを謳っていたわけではない)、そこらのVPN会社を利用するよりもTorで多重化した方が少しは安心ではないかという気持ちからTwitter社がOnion版サイトを公開してくれたとしたら、嬉しいことです。

<本題>

今回の実験におけるポイントは以下の2点です。

個人的に今利用しているアカウントTorログインするのは嫌なので、新規登録ができるかどうかを確認する(気になる人は既存アカウント実験してみてください)

Tor等を利用したTwitterアカウント作成時との比較を観察する

アカウント作成

Torから設定→プライバシーセキュリティセキュリティセキュリティレベル)を選び、Torボタン一つで選択することのできるJavaScript等のトラッキング制限をどの程度選択すればアカウント作成できるかを確認します。

標準(3段階で一番下のレベル):アカウント作成できる

より安全(真ん中のレベル):アカウント作成できない(自分確認した環境ではできないだけかもしれません、詳しくは後で記します)

最も安全(3段階で一番上のレベル):相変わらずいつも通りアカウント作成できない

アカウント作成した感想としては、正直Onion版サイトを公開したと聞いたときには、他所のOnion版サイトのように「最も安全」でアクセス先のURL依存したJavaScriptをいくつか許可すればアカウント作成できるのかな、と期待を胸にしていたのですが、現実としては「いつもどおりのhttps[:]//twitter.comへTorを用いてアカウント作成するとき」と何一つとして変わる点がありませんでした。これには少しがっかりです。

アカウント登録後の挙動

Torを用いてTwitterアカウント作成するとだいたい1ツイートまではTwitter社の宇宙よりも大きな器によって許されます

しかし、2ツイート目をしようものなら、時間をかけてアイコンやBIO、ヘッダーを設定しようものなら「reCAPTCHAパチモンクリア(4問正解で通してくれる神キャプチャ、お前が世界を取れ)」がやってきます

運が良ければそのまま関門通過。運が悪ければ電話番号登録を強いられます

今回はセキュリティの「標準」でアカウント作成したので、ログイン後1ツイートをした後に「より安全」に上げても使えるかな?と上げてプロフィール設定をしているところで電話番号登録要求されました。

ここ最近https[:]//twitter.comは、ブラウザセキュリティレベルを「最も安全」「より安全」にしていると「んなんか今日調子悪いわ笑」とログインページやアカウント作成ページを表示しれくれません(国際情勢が関係しているのかな?)。ですが、以前は上で書いた「他所のOnion版サイトのように『最も安全』でアクセス先のURL依存したJavaScriptをいくつか許可すればアカウント作成できるのかな」の手順でアカウント作成をできた過去がありますセキュリティレベルを上げ忘れたままTorを利用していた可能性があります、「ですが」以降は思い出として読んでください)。

その時ですら電話番号登録まで要求してこなかったというのに、セキュリティレベルを最低まで落として、やっとアカウント作成できたと思ったら、「お前はホモサピエンスか?」とパチモンに聞かれ、全問正解したというのに電話番号まで登録を強いられる。ダルいのでこの文章放置されている電話番号登録画面を横目に書かれています

実験結果

ブラウザセキュリティレベルを最低まで落とすことでアカウント作成成功したが、セキュリティレベルを上げて遊んでいたら(これが原因では???電話番号登録を強いられた。

結論

この実験結果からわかるように、新規アカウントへの優遇としてOnion版サイトを公開したとはとても思えず、既存ユーザーに向けたサービス展開と見るべきだと思う。

実験を通した感想

まず今回やったことはOnion版サイトで行わなくても、https[:]//twitter.comで再現可能だったことであり、2者の差はOnionに対応しているか否かでしかありません(緩くあってほしかった)。

IPアクセスできないかTor使うのにそこで電話番号登録要求したら、電話番号契約している本人が分かりますよね。

Onion版サイトの展開がどこの誰のためにやっているのか知ったことではないですが(良い子のみんなはソースを探してから口を開こう)、向いている方向とやっていることが少しズレている気がします。

理不尽事象により生IPアク禁された人々がいる、それに対抗するためにOnion版サイトを公開する、がOnion版からであってもアカウント作成はいつもどおりです。」だと仮定すると、現状は今のTwitterが落とし込めるギリギリなのかもしれません。

TwitterくんがFacebookくんに憧れる気持ちはよく分かりますが、Tor関連を冷遇するのところまでしっかり見習わなくても良かったと思います

腹癒せ

「Onion版サイト公開されたんですか?やったー!」「サイト公開されただけじゃないですかやだー!(少しは優遇されただろうと勝手に思っていた筆者が完全に悪い)」をしたので、初めの方に少し書いたVPNについて少し。ノーログを謳うおすすめの紹介です。VPNを使ってたとしても、画面の向こうにいる人間配慮しながらインターネットを利用しましょう。もうページを閉じてインターネットに帰っていいですよ。帰りの会は終わりました、事務連絡は済ませたのでここから雑談です。

おすすめ4選(それぞれノーログを謳っています

Mullvad(有料)

https[:]//mullvad.net

一言広告を一切していないので、検索して出てくるMullvadの感想PRを含みません。すげぇ

IVPN(有料)

https[:]//www.ivpn.net

一言:高いが支払い方法豊富。が、高い

ProtonVPN無料&有料)

https[:]//protonvpn.com

一言他所のノーログを謳うVPNサービスは月当たりの通信量の制限があったりしますが、ProtonVPNにはそれがない。そこがすごい。本当にすごい。無料で始めたかったらProtonを使ってください。

OVPN(有料)

https[:]//www.ovpn.com

一言2月から#StandWithUkraine https://www.ovpn.com/en/blog/standwithukraine というページを公開し、ウクライナの人への応援をしている。すごい。「ウクライナ人はサポートに連絡したら無料VPNが用意してあるぞ」と言ってる。かっこいい、抱いてほしい。それはそれとしてOpenvpn拡張子が.ovpnから検索結果がOVPNめっちゃ交じる。マジ卍


個人的には薦めないけれど、生IPよりかは良いんじゃないんですか、有名で使っている人も結構ますよね、好きだったら使えばいいと思います4選(それぞれノーログを謳っています

NordVPN(有料)

https[:]//nordvpn.com

一言:有名、紹介料いくらか知らんけどプライバシー特化おすすめVPN○選!みたいな記事はいつもいるやつ。ちなみにそいういう記事に限って上の4選の奴らはいません。

ExpressVPN(有料)

https[:]//www.expressvpn.com

一言:買収されて運営会社が変わった。NordVPNを紹介している記事は大体ExpressVPNも紹介している感じのアレ。

PIA(有料)

https[:]//www.privateinternetaccess.com

一言:゚(゚´ω`゚)゚。ピーア 日本人ではNordとExpressよりは使っている人は少ないんじゃないかな。

AirVPN(有料)

https[:]//airvpn.org

一言:支払い方法豊富

最後

マルウェア開発企業VPNサービス大手を続々買収

https://gigazine.net/news/20211015-former-malware-kape-technologies-owns-vpn-services/

後半で挙げた4選のExpressVPNとPIAは買収された側に含まれています。気にするか気にしないかアナタ次第。

2022-02-12

anond:20220212180044


ZTAだとPDFとかTXT以外の安全拡張子以外はDL強制的不可能にすることもできたり、

ExchangeZIP強制的フォルダ保存後に添付削除したりして検疫するとかできるらしい(やったことはない)

anond:20220212175913

ZTAだとPDFとかTXT以外の安全拡張子以外はDL強制的不可能にすることもできたり、

ExchangeZIP強制的フォルダ保存後に添付削除したりして検疫するとかできるらしい(やったことはない)

2022-01-19

anond:20220119074847

愛用してたCubeICEがアプデでアイコンダサくなった上

なんか関連付け反映されないし

アイコン拡張子ごとに違ってくるバグみたいなの出ててもうなんかダメ

2022-01-07

経験から1ヶ月!Pythonで観る将ライフを向上させた話(プログラム編)

まとめ

プログラミング経験から1ヶ月ほどで、将棋評価値の新たな方法でのグラフ化を行うPythonツールを作った。

https://github.com/k-the-p/notherscore

この記事は2本立てです。プログラミングより結果のグラフ将棋に興味がある方はもう一方の将棋から読むことをおすすめします。

未経験から1ヶ月!Pythonで観る将ライフを向上させた話(将棋編)

目標

評価値以外の観る将の楽しみとして、手の広さの可視化提案する

AIはわれわれアマチュア将棋への親しみを大幅に向上させてくれた一方で、棋士が悩みに悩んだ結果として評価値が下がる手を指してしまったときに、「悪手きたwwww」と騒ぐ主にABEMAのコメント欄には忸怩たる思いがあった。

とはいえ、もう評価値を知らなかった時代に後戻りするなんてことは誰にもできないだろう。そして、電王戦から将棋にハマった自分自身としても、AI否定はしたくない。

であるなら、AIを用いた新しくよりよい将棋の楽しみ方を探っていくしかないのではないか

以前から私は、「AIの手を指せるなら人間も苦労しないんだよなあ」と思っていた。あるとき藤森哲也先生Youtubeチャンネルで言っていたことを聞いて得心がいった。「AIの一手は最強の一手なんです。確かにプラス1000点になるけど一手間違えた瞬間にマイナス何百点になるような綱渡りの手。それよりもアマチュアの皆さんにはプラス数百点で得は少ないけど安全な道、最善の一手を学んで欲しい」(大意)と。

ここで言う「最強の一手」に人間にして最も近いのは紛れもなく藤井聡太四冠であろう。藤森先生アマチュアに向けて喋っていたが、その葛藤は間違いなくプロの中でもあるはずである渡辺明三冠が言うように「藤井くんと全く同じスタイルを今から目指しても絶対藤井くんより強くなれない」のは自明であるからして。

私はここにドラマがあると思う。また、最強の一手と最善の一手が等しく「いい手」に見えてしまうわれわれアマチュアとしては、そこを機械に教えてもらえるのであれば、棋力向上にも繋がりそうである

具体的目標

第1候補手と第2候補手の評価値の差を取ってグラフ化すればよさそう?

(差が小さければ手が広い、差が大きければ絶対手に近い、綱渡り

目指すのはあくまで便利な将棋ツール将棋AIを作りたいわけではないので、将棋AI自体局面を入れたら評価値を吐く謎の箱という扱いでよい。

手法

Python一択

グラフ化や数値の扱いだけでなく、将棋AIとのやりとりをやってくれるあれこれもあるようなので。

あと習得が楽だと聞いた。その話を教えてくれた人はもう10年間英語学習法をブクマし続けてるけど。

あと「読みやすコードじゃないと動かない」って設計思想がかっこいい。ついでに言うといわゆる「おまじない」が少なそうなのも魅力。(CのHello world挫折した経験あり。studio.hって何……)

何をしたか

詳しい人に聞く

プログラム講師をやっている?方が音楽制作を初歩からやってみる、という(残念ながら)リアルタイム視聴者が俺だけしかいないような配信があったので、音楽の基礎(についての知識は持っていた)を教えてあげたお返しのような形で、「pythonでこういうことがしたくてこういうライブラリがあるのはわかった。経験HTML+CSS変数導入前、Bootstrapなんてなかった)のみ。どうしたらよいか」という質問をしたら、「progateは簡単すぎると思うのでPaizaが丁度いいのではないか」というアドバイスを頂き、比較もせずに即登録したのだが結果的にはこれがドンピシャだった。

Paizaラーニング

最近流行りの、環境構築不要で講座の内容を書いて覚えるタイプサイト

無料で入門講座の序盤を受けていたらふと目に入ったのが、「対象者:これからプログラミングを学びたい方。HTMLがどのようなものかを知っている方。」でYoutuber先生オススメ完璧か?と思った。そして実際に完璧だった。

基本的に1講座3分+演習1~2問+やりたければ問題集たくさんという形式なのだが、これが簡単すぎることなく難しすぎることもなく、俺の知識レベルベストマッチだった。基本的に毎回何か書くことになるので、変数とは~みたいな解説だけで終わる回がほぼ無いのも飽きなくてよい。

Python入門(と言ってはいるがまだこれだけで発展編はない)の見出しは「プログラミングとは」「条件分岐比較演算子」「ループ処理」「リスト」「辞書」「多次元リスト」「関数」「クラス」「クラス発展」「例外処理」に各5~8講座*3分+演習、という感じ。クラス発展の途中で行けそうだと思ったのでドロップアウトして実製作に移った。実際関数まで理解していれば、この程度の小さなツールには十分だった(もしかしたらクラスを使えば多少楽になった場面はあったかもしれないけど)。

また、これは書いてる今気づいたことだが、上のコースで学んだことで、実際に役立たなかったものほとんどなかった(強いて挙げれば辞書くらい?使えてないだけかも)。このこともコース構成の優秀さを示している。

ここまででだいたい2週間くらい。

Google colab

もともとこのサービスは知っていたのと、谷合先生が実際に使っていたように、便利そうなライブラリのcshogiが主にcolab(jupyter)上で動かすことを意図しているようだったので、まずここから入った。最初はcshogiが列挙してくれる特定局面での合法手をリストに入れて、そのリストの項目数=その局面での合法手の数を出力することから始めた。これは本当に簡単にできて興奮した。

学習と好きなことが直結してると、こんなサンプルコードみたいな簡単なことで喜べるのでコストパフォーマンスがよい。

cshogiとやねうら王をusi連携する

cshogiのチュートリアルで紹介されているレサ改というAIがどうもmultipv(有望な候補手を2手以上挙げる)に対応してないらしく、強さ的な問題でいずれ手を出すつもりだった予定を繰り上げてやねうら王との連携を試みる。

makeって何?あー、もりかしてMakefileが無いと動かない?(これを書いている今もこんな理解である)みたいな人間でもなんとかやねうら王をビルド?することはできた。レサ改をcshogiに読ませる数行のサンプルコードがとても役に立った。今でもあの完成品らしき拡張子が無いファイルがなんなのか分かってない。(なお、評価関数nn.binが無いと怒られたのでどこのご家庭にもある水匠4のそれをぶち込んだら動いた。評価関数とやねうら王の分担は今もって理解あやふや)(また、途中でAyane[やねうらお謹製ライブラリ]も使おうとしたがcolab上では上手く動かす方法が分からなかった)

一応これでcshogiで局面の最善手と次善手およびそれらの評価値を呼び出せるようになったのだが、単にdebugでずらずらと余計なものまで出力するのではなく、重要な指し手周りのinfoだけ出力するようにしようとしたが、上手いやり方がわからず、結局こうなった。

sys.stdout = open('out.txt', 'a')
engine.go(listener=print)

ここは絶対もっとマシなやり方があるはずなので、識者の教えを請いたい。

ようやくWindowsPythonVSCodeを入れる

Colab上でまあまあ目処がついたので、この辺りでPython環境を作った。ここまでそれをやっていなかった理由は、「おま環」トラブル可能性をなるだけ遠ざけておきたかたかである環境が悪いのか俺が悪いのか分からない、というのは初心者にとって限りなきストレスである。あーネットが繋がらなくてルーターの設定や接続とか支払いとか文字通り部屋をひっくり返しながら調べてたら実はフレッツ自体が落ちてた件を思い出してイライラしてきた。cshogiはJupyter上で動かすことを意図しているようなので、それで動かなければ自分の書き方が間違っているのだとほぼ確実にわかる。

まあこの辺りはいろんなサイト見ながら仮想化などしつつ普通に仮想化が何か分かってないんですけど。

Jupyter notebook

これまでColab上で書いてきたものは多少の書き換えで動いたので、ローカルにJupyter notebookをインストールして、数字計算グラフ化を試みる。

ちなみにこの時点で得られているデータはこんな感じ。

go
info depth 1 seldepth 1 score cp -47 multipv 1 nodes 483 nps 241500 time 2 pv 3c3d
info depth 1 seldepth 1 score cp -86 multipv 2 nodes 483 nps 241500 time 2 pv 4a3b
info depth 2 seldepth 2 score cp -53 multipv 1 nodes 847 nps 423500 time 2 pv 3c3d 9g9f
info depth 2 seldepth 2 score cp -68 multipv 2 nodes 847 nps 423500 time 2 pv 8c8d 7g7f
info depth 10 seldepth 17 score cp -78 multipv 1 nodes 100163 nps 1963980 time 51 pv 8c8d 2f2e 4a3b 7g7f 3c3d 2e2d 2c2d 2h2d 8d8e 6i7h 8e8f 8g8f
info depth 10 seldepth 17 score cp -111 multipv 2 nodes 100163 nps 1963980 time 51 pv 3c3d 7g7f
bestmove 8c8d ponder 2f2e
go
info depth 1 seldepth 1 score cp 117 multipv 1 nodes 206 nps 206000 time 1 pv 2f2e
info depth 1 seldepth 1 score cp 78 multipv 2 nodes 206 nps 206000 time 1 pv 7g7f
...

今回の小目標は、goで区切られた中からから2行目と3行目のcpほにゃららを取得していい感じのリストにする、というものだ。この辺りは正規表現でなんとかなるだろうと見通しを立てたが、実際そうなった。

ただ、後手が見たとき評価値が後手目線なので、それだけにマイナスをかけるのはどうするか(そうしなければ、先手+3000点の次が「後手から見て」-2900点だったりして綺麗にグラフにならないのだ)を調べるのに結構時間が掛かった。

また、詰み周りでまたプラスマイナスカンストの絡む計算をしたくないのもあり、数値にNaNを入れてグラフ表記を省略することにしたのだが、そうするとnumpyの関係整数(とNaN)しか扱わないのに浮動小数点で計算しなければいけなくなって若干気持ち悪かったり。まあ動くのでヨシ!

中間報告

この時点で、ローカルにKIFファイルを保存し、pyファイルでcshogiと水匠を動かし、Jupiter notebookを開き評価グラフと手の広さのグラフを重ねて表示する、というそれなりのものは出来上がった。

簡単に言えばpyファイルで1手10局面(森内チャンネルに出てたHEROZの方が使ってた数字をそのまま使っているので特に意味は無い)探索させ、最善手と次善手についての生の評価データを吐き出させ、ipynbでそれを整形し、グラフ化している。

基本的に全部VSCode上でできるので、慣れれば計算時間も含めて10数秒で結果が出るのだが、このワークフローはいかにも美しくない。

なので、Flaskという簡単らしいフレームワークを使ってローカルWebアプリとして使えるようにしようと思った。inputとoutputをどうにかするだけだから余裕やろ。

Google colabを触り始めてからここまで1日。圧倒的成長!

ローカルWebアプリを作る

Flaskを学ぶ

Paizaラーニング再び。後半ではデータベースとか本格的な話もあるようなのだが、txtに書き込む一行掲示板を作るまでの前半部を高速で履修(演習は全部飛ばした)。なるほどー、こうやってやりとりするのね、と最低限は完全に理解した

モジュール

Jupyter向けのコード普通Pythonに直してあっちで数字を出してこっちでそれを受けて元に戻して……とかやってると循環参照か何かで怒られることに。その対策に細かく部分を分けて関数にしたのだが、その場合ってもしかしてdefの内部しかまれない?(共通部分も読まれると思ってた)(いや、共通部分は読まれるけど他のdef内が見えないのか?何も分からん)なるほど。こうなると関数の内部から上に戻るためにクラスとか欲しくなるのかなーという感想

最終的にWebに公開しようとこの時点では思ってたので、txtに一旦出力するのが安全性的にどうかとか考えてたのだが、テキストの読み取り周りでハマる。結局抜け出せず諦めた。

以降は、HTMLダブルクオートが抜けてるのに一時間気づかないとか、FlaskのXSS対策対策をするとか、ファイル書き込み設定をミスって2万手くらい蓄積されて評価グラフが大変なことになったが、原因に気づかずひたすらグラフ生成部を調べ続けるなど、非本質的問題にかかずらっていたので書くことは特にない。

GithubVSCodeとなら連携がらくらく

なので、最初にgitignoreしてなかったせいで1万ファイルくらい上げそうになったけど、それ以外は特に問題も無く。中間報告からここまで2日ほど。結局1ヶ月かけずにプログラミングをそれなりに身につけることが出来た。「プログラムを覚えたければ作りたいものを見つければいい」というのは本当だな、と改めて思った。

で、どうなったの?

については将棋編の方で詳しく書いています

https://anond.hatelabo.jp/20220107060727

どれくらい書けるようになったのか、を見たい方は主にvalue_output.py(将棋AI思考させてデータを取り出す)とgraph.py(データを整形してグラフを書き出す)を見ていただければいいかと思います

謝辞

最初にPaizaを教えてくださったYoutuberの方、cshogiを初心者でも使いやすいように作って展示してくださったTadaoYamaoka様、水匠開発者のたややん様、水匠含めこんにちの将棋AIの基盤を作ってくださったやねうらお様、cshogiを通して利用したpython-shogiのKIFパーサーを書いてくださったTasuku SUENAGA様に、厚く御礼申し上げます

最後

私は現在仕事Twitterフォロワー募集しています

30歳無職よろしくお願いいたします。

https://twitter.com/k_the_p

2021-11-03

親に「Windowsログオン画面のスクリーンショットを撮りたい」って言われたら、どうする?

「そんな方法は無い」って即答できる?

 

 

  

 

  

 

  

 

  

 

それとも俺みたいに、実は親は「ログオン画面に表示される風景写真が気に入ったのでプリントアウトして保存したかった」というのが真相だという事を一瞬で推理して、

C:¥Users¥<ユーザー名>¥AppData¥Local¥Packages¥Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy¥LocalState¥Assets を開いて、

.jpg拡張子の無い画像ファイルの中から当該風景写真を探し出し、それをL判写真出力する。ここまで尋ねられてから5分以内で、できる?

2021-11-02

三大実は中身がZIPなのでリネームしたら展開できると知ってビビった拡張子

xlsx

docx

pptx

cbz

あと一つは?

2021-10-27

anond:20211027152420

キー操作マウス操作を代行させたいならPyAutoGUIを使うと良い。

Windows+shift+Sでクリックさせたいボタンとかテキストボックスとかのスクショを取って保存しておき、locateCenterOnScreenにその画像を渡して帰ってきた座標をクリックすれば自動化が出来る。

日本語入力させるときはpyperclipでクリップボード操作し、Ctrl+Vで貼り付けるとよい


わざわざソフト化するのが面倒ならメモ帳

cmd /k python ファイル名.py

と書いて拡張子".bat"でpythonファイルの横に保存すれば良い


PythonGUIを組むならPySimpleGUIを使えばいい

そんでボタン押したときアクションに実行したい関数を割り当ててやれば良い


定型的なデータ処理をしたいのならJupyternotebookを使うと良い

ただし結構熟練がいるのでお察しの通り大抵の場合ExcelVBAでゴニョゴニョしたほうが速い。

VBAで出来ないor組みたくない処理をどうしてもやらないといけない時用。正規表現関連とか。

2021-08-28

業務改善は反発を生むのだろうか

新しい会社に入りいろいろ業務改善をした。

メールで毎朝届く、特定拡張子ファイル特定場所自動保管して、差分チャットツールに通知

工場機器情報毎日自動取得して社内Web上に更新

みたいなことをやってたら、上には褒められたけど同僚には口もきいてもらえなくなった。

それまで2年も手動でやってたことを取り上げられた反発はあると思う。

自分は余計なことをやったのだろうか。悩んでいる。

2021-08-22

じゃあ何すか、俺らは100年後に思い出を残すこともできないって言うんすか

このご時世、気軽に旅行にも行けない。

そんな中、友人間流行っているのがdiscordでの思い出語り。

過去友達と行った数々の旅行やお出かけの写真動画を見返して懐かしみ、

「また行けるといいな」なんて言いながら、

その日がそう近くないことはみんなわかっているので、ちょっとしんみりして通話を終わる。

ふと思った。

100年後の俺がもし生きていたら、

老衰しきってもはや友達もお互いに五体満足に動けなくなっているかもしれない中で、

せめて過去に縋るときにはこの頃をこそ再び振り返るのではないか

その時、振り返る手段記憶以外に用意しておけるのか?

今まで撮った写真動画歴代スマホガラケーの中にたくさん詰まっている。

容量にすると多く見積もって1TBくらいになるだろう。

例えば向こう10年程度を想定するなら、適当クラウドストレージにぶち込んでおけば

たまに見返したくなった時の思い出くらいは問題なく満足できるだろう。

ただし今俺が求めているのは、

・今まで撮ってきた思い出のすべてを

・何一つ情報量の欠けることな

100年後の思い立った時に常に参照可能にできること

である

たとえば、両親が財布に幼少期の写真プリントしたもの大事に抱えていることがあるかと思う。

または結婚式アルバムだったり、写ルンですで撮った褪せた写真の束なども実家なら存在するだろう。

白黒の文字のみを記録するのであれば紙媒体でも100年程度もつかもしれないが、

こと写真において破れたり色褪せたり滲んだり折り目のついたものではもはや満足はできない。

それに1TB分の写真動画であり、物理媒体に保存した場合はたとえばこれから引っ越しの際などに

保存に非常に困ってしまうことは簡単想像できる。

ならば電子媒体ならどうか。

ググったらちょうどいい記事が見つかった。

https://www.itmedia.co.jp/enterprise/articles/1508/26/news007_2.html

媒体にも触れていて、結論からすると電子媒体では100年後に残すことは難しいらしい。

続く記事にも、このあと触れようと思っていたクラウドストレージ問題点(データ保証されない、サービスの予期せぬ終了など)があり、

結局はたとえば今ならSSDHDDあたりにぶち込んでおいて、

適宜マイグレーションを行いながら後世へとつなぐしか方法はないように思える。

ただ、これにも実は懸念があり、

例えば現在主流の圧縮形式拡張子100年後も現行で使われているとは限らないためその部分もマイグレーション必要になり、

そしていつかはマイグレーションすらできないタイミングが発生しうるということだ。

その時俺はどうするのか?

もはや記憶の中の美化された各々の顔や声だけを頼りにするしかないのか?

誰か助けてくれ。

100年後の俺を憂う今の俺を早く安心させてくれ。

ちなみに26歳です。

2021-06-20

拡張子なしは罪ですか

anond:20210619143545

新しくパソコンを買ったら/Windowsインストールしたらすぐに以下のことをしてください。

  1. フォルダウィンドウを開きます
  2. リボンメニュー「表示」の右端「オプションボタンクリック
  3. フォルダオプションの「表示」タブを開きます
  4. 登録されている拡張子は表示しない」のチェックをはずし、「OK」をクリック

これであなたパソコンでも拡張子が表示されるようになります

これでファイル形式の違いによるいざこざや軋轢から解放されます

2021-06-14

anond:20070613233116

拡張子rmをうっかり開いたときストレスは多くの人類遺伝子レベルで刻み込まれたと思う。

movもひどかったがここ十年で普通に使えるようになり治癒されている。

ログイン ユーザー登録
ようこそ ゲスト さん