@sta 2021/01 - 2021/02
できそうだったので作りましたtakker.icon
選択範囲内にある一番最初のリンクの逆リンクを探して、clipboardにコピーします
雑コード
もし後日UserScriptを作る予定であったのなら、ネタをとってしまい申し訳ないです。
ありがとうございますsta.icon
(まだまだUserScriptに慣れてないので腰が重たい……
Promise.all使われてますね
ここでPromise..all使う利点は、実をいうとほとんどありませんtakker.icon
どのみちfetchが終わるのを一つずつ待っている
/icons/たしかに.iconsta.icon
ではなぜPromise.allを使ったかというと、単に元のコードを直すのがめんどくさかったからですごめんなさい
X-Following-Id これ前も見た気がする(被リンクを得る方法
({xxx}) これもメモした覚えある
そんなはずはないのですが……takker.icon
Firefoxで動作確認しています
私のFirefox、わりかしイレギュラーなのでたぶん環境固有の問題な気がしますsta.icon
/icons/そうなのか.icontakker.icon
code:js
scrapbox.PageMenu.addMenu({
title: 'Copy back links',
image: '/assets/img/favicon/chrome-icon-192.png',
onClick: async () => {
const text = document.getElementById('text-input').value;
if (!isLink(text)) return;
const {project, title: link} = getLink(text);
console.log(Searching for back links of [/${project}/${link}]...);
const backLinks = getBackLinks(link, await fetchAllLinks(project));
if (backLinks.length === 0) {
console.log('No back link found.');
return;
}
console.log('Copy back links: ', backLinks);
navigator.clipboard
.writeText(backLinks.map(link => project === scrapbox.Project.name ?
[${link}] : [/${project}/${link}]).join('\n'))
.then(() => console.log('Copied.'));
},
});
const isLink = text => /\^\+\]/.test(text);
const getLink = text => {
const linkText = text.match(/\[(^\]+)\]/)1; const temp = linkText.match(/\/(-\w+)\/(.*)/); if (temp) return {project: temp1, title: temp2}; return {project: scrapbox.Project.name, title: linkText};
};
function getBackLinks(targetLink, linksData) {
return linksData
.filter(({links}) => links.some(link => lc(targetLink) === lc(link)))
.map(({title}) => title);
}
async function fetchAllLinks(project) {
let followingId = null;
const linksData = [];
const promises = []; //処理待ち用
do {
const response = await (!followingId ?
fetch(/api/pages/${project}/search/titles) :
fetch(/api/pages/${project}/search/titles?followingId=${followingId})
)
followingId = response.headers.get('X-Following-Id');
promises.push(response.json().then(links => linksData.push(...links)));
} while(followingId);
// 全てのリンク情報を配列に格納し終わったら返す
await Promise.all(promises);
return linksData;
}
function lc(title) {
return title.toLowerCase().replace(' ', '_');
}
sta.iconおお、ありがとうございます
/rashitamemo/rashita.iconさんのとこで一番近そうなのはこれですが、おそらく見かけたのはこれではないと思います
これかも
sta.iconあざっす
すでに調べて分かってるかも知れませんが補足しておくと、実際にプログラムを実行しなくても解析するだけで何をimport/exportしているのかが分かるように意図的に文字列リテラルしか受け入れないような仕様になっています
/icons/iine.iconsta.icon
すんばらしいですsta.iconsta.icon
おお、こういう手段もあるんですね、あざっすsta.icon
ノートPCではなくマザーボードだけで動くというイメージでしょうかsta.icon
たぶんケースもある or ないならDIYすると思うが PCケースもありますよtakker.icon
あざっすsta.icon
あざっすアイコンほしいな
作った
/icons/あざっす.icon
/icons/あざっす.iconsta.icon
SVGという手段があるんですね
ox
o 普通のノートPCよりはるかに省スペース
o ハードの性能も高い?
o 拡張もできる
スロットは多くない(まあ小型なので仕方ない
x たぶん自作パソコンの世界で手先の器用さが要求される
としたら普通のモニタでいいか
でも引越し時は「モニタ」よりも「mobile display + 自立装置」の方が持ち運びやすいはず
/emoji/negative squared cross mark.icon常にケーブルを接続する必要がある
土手を自転車で走っている途中に思いついたことをその場で書くことができなくなる
そもそもそんなことするやついない
結構おせっかいな指摘です
無視しておk
一部間違えてるかも
いやかなりありがたいですsta.iconsta.icon
A level where you can write in English as smoothly as you usually write in Scrapbox.
たぶんA level on which you can write in English as smoothly as you usually write in Scrapbox.
でもon whichはwhereで代替できないはずだったんだけど
もちろん意味は十分にわかる
文法が気になる
下の解説読んで「比較級、そういえばそんなのもあったなぁ(やべえ全然文法覚えてねえ)」となっていて、もっと手前でガチらないとダメそうな予感!sta.icon
as soon as I canのように「できるだけ」を意味する定型句として捉えることもできる。一方で比較級で考えることもできる
1. 比較の軸を把握する。ここではsmoothlyが比較の軸
you can write in English smoothly.
you usually write in Scrapbox smoothly.
you can write in English as smoothly.
you usually write in Scrapbox smoothly.
3. 第二文から比較の軸smoothlyをasに置換し、先頭に移動させる
you can write in English as smoothly.
as you usually write in Scrapbox smoothly.
このasは関係詞の役目をしていると個人的に解釈してるtakker.icon
4. 合体させる
you can write in English as smoothly as you usually write in Scrapbox.
今回はこれ以上変形できないが、場合によってはSやVなどを省略できる
これもおせっかいですが、楽しめる程度の時間・頑張りの範囲で勉強すればいいと思いますよyosider.icon
楽しめないと勉強なんてそうそう続かないと思う
(別にyosider.iconが英語できるわけではないので参考程度にしてください)
/icons/iine.iconsta.icon
初耳sta.icon
味が濃くて廃人になるぜぇ
staはイタリア語でisです(豆知識)
w3hr5wtyueo9isohsxfpv85hyak53by5llnw7607re6fck2bn7user1.icon
ruc6gs118eta7xem9u7moj30qxtp5vbmfdz1bqsaasaofu0uudmeah28wxehzn63y0s6pf8fkllzj9g4z9pgwhej4z6uc231sld7sta.icon
3dbtnn9clpl7bb4mgp2p02k5uq2vgrz9uh8ouoql3hy5ish4np1ccsxpau1n5tmm523ja0ij79s19l61qykswnow7vq2f2eqvofbj34o614hokk8q9cumdaf97h3wzenm0dbu756efdtp3rmi96uc6user1.icon
k2kgrzd8rde5zdhn521j68ty7rcn2sta.icon
公開鍵暗号で秘密のメッセージやり取りした場合、どう見えるかのテスト
(これはただ乱数でつくっただけ)
暗号化されたメッセージの長さは元のメッセージの長さに応じて変わるんだろうか?
ハッシュ化ではなく暗号化なので変わるかなぁと
暗号化できるメッセージの長さに上限はあるんだろうか?
これは暗号化ライブラリの実装に依存する気がする
気象庁が使ってるやつなんてあるんですねsta.icon
3h単位はわかりやすそう
あんなに長くなったまま放置してたのは自分です。すみませんtakker.icon
ということでばらしました
/icons/あざっす.iconsta.icon*2
仕事が早い
できました
おお、ありがとうございます!sta.icon
IME拾えるイベントなんてあるんですね
(ないやろと思って最初から調べてなかった(そういうとこやぞ
リンク張ってなかったので今張った
自分用UserScript使う習慣もないので、これを期に取り入れていきたい
IME cancelも実装できました!takker.icon
blurとfocus使うだけでいけた
元コードを更新してあります
おおおおおおおおsta.icon
強制的に確定かー、なるほど……
2022-01-04 00:45:18 Chrome for Androidだと機能しないみたいですtakker.icon
そのうち調査します
見た目や位置を修正する必要はありそうですが
/icons/あざっす.iconsta.icon 内部がまだちんぷんかんぷんですが、表示したいときは使ってみます
自力じゃ明らかに難度エグかった
手動かすの大事ですね(なるべく早く理解したい気持ちが先行してしまう
なるほど、ブラウザの組み込み機能だったのか
2022-01-04 00:45:45 このアドバイスは非推奨ですtakker.icon
しち面倒くさい
初心者向けの資料があるというわけではないですが、複数人Projectなので、UserScriptで疑問があれば相談したりアドバイスを出したりできると思います 一人でUserScriptを書くよりも楽だと思いますtakker.icon
迷ってますsta.icon
プログラミングで井戸端できるのも楽しそうではある
早速ドンピシャでほしかったものが見つかったりしている
s/logo-cut.svg/logo_cut.svg/です
https://scrapbox.io/assets/img/logo_cut.svg←ロゴ
色がないので、別途色付けする必要があります
それは知らなんだsta.icon
Promise.all()で複数のPromiseを同時に走らせられます
あざっすsta.icon
そのキーワード見たことありましたが、そんな意味があったんですね
自分だったらこういう方法を考えるかなーというのを挙げますtakker.icon
Scrapboxのみで済ます
少し手直しすれば、リマインダーになると思うよ
おお、ありがとうございますsta.icon
通知を実装するためのweb APIらしいです。
takker.iconは使ったことないので、これで実現できるかどうかはわかりませんが、試してみる価値はありそうです
時刻や残り時間をカウントするサーバー立てて、ScrapboxからはPush APIなどでそいつと通信する感じかしら
サーバーでかんたんなアプリ立てる練習になりそう
なるほど、Tamperさんは知ってましたが、APIにPOSTするみたいなことできるんですねsta.icon
POST自体はTamperMonkeyなしでもscrapbox.io/upload.gyazo.ioへならできます
TamperMonkeyはCSPを無視してAPIを叩くために使います なるほどsta.icon
mobile端末だと動かないという欠点があります
sta.iconさんは使ってなさそうなので関係かもしれませんが一応捕捉
/icons/あざっす.icon
データの格納はlocal storage一択ですね
GaaS (Government as a Service)と被るのが気になるtakker.icon 被るのありそうだと思ってましたが、やはりありましたかsta.icon
たぶんこんな感じでテキトーに分けると思いますw
意味
1 GitHub As A Storage
2 Government as as Service
もちろん個人projectなので、どの用語をどう定義しようが自由です
ただ、将来Government as a Serviceについてメモするようになったら、使い分けを考えたほうがいいかもしれません
ありがとうございますsta.icon
userscriptでここまでできるんか、思ったらpythonでしたね
p5.jsを使えばuserscriptのみでもいけると思いますtakker.icon このへんはsuto3.iconさんが詳しいです
これらを扱うのに、従来の画面ベースのツールでは役不足です。のところですが、役不足ではなく力不足などが正しいかと思います(細かい指摘ですみません)yosider.icon
ありがとうございますsta.icon
最初は「いや、合ってる」と思ってたんですが、誤用かなと思って検索
僕が間違ってましたね(よくある)
あとで修正しときます
とりあえず5日後に現れるよう突っ込んでみた
3 2021/02/18 Thu 9 tritask 役不足修正しとく
タスクリストからやってきた
/icons/iine.iconyosider.icon
「変態論」好きですfranky.icon
ありがとうございますw(ちょっと恥ずかしいと思いつつ)sta.icon