generated at
shio
塩澤一洋
Kazuhiro Shiozawa
Καζουχίρο Σιοζάουα
成蹊大学法学部教授・写真家

以下のURLでRSSをフィードしています→ https://scrapbox.io/api/feed/shiology (解説:/help-jp/RSS


民法著作権法法学教育方法論を研究しています。
難しいことをやさしくするのが学者の役目、それを面白くするのが教員の役目、と考える法律学者兼大学教員です。

授業関連Cosense:/shiolectures

𝕏:@shiology
Facebook:shiozawa, (shiology
Instagram:shiology
Flickr:shio
Theta360:shio

Cosense:shiology.org(2004年の第1回からすべて)
旧Medium:shiology.net(2016年8月の第4501回〜2017年9月まで)
旧blog:shiology.com(2004年の第1回〜2016年の第4500回)


2024年
011月1日1月2日1月3日1月4日1月5日1月6日1月7日
021月8日1月9日1月10日1月11日1月12日1月13日1月14日
031月15日1月16日1月17日1月18日1月19日1月20日1月21日
041月22日1月23日1月24日1月25日1月26日1月27日1月28日
051月29日1月30日1月31日2月1日2月2日2月3日2月4日
062月5日2月6日2月7日2月8日2月9日2月10日2月11日
072月12日2月13日2月14日2月15日2月16日2月17日2月18日
082月19日2月20日2月21日2月22日2月23日2月24日2月25日
092月26日2月27日2月28日2月29日3月1日3月2日3月3日
103月4日3月5日3月6日3月7日3月8日3月9日3月10日
113月11日3月12日3月13日3月14日3月15日3月16日3月17日
123月18日3月19日3月20日3月21日3月22日3月23日3月24日
133月25日3月26日3月27日3月28日3月29日3月30日3月31日
144月1日4月2日4月3日4月4日4月5日4月6日4月7日
154月8日4月9日4月10日4月11日4月12日4月13日4月14日
164月15日4月16日4月17日4月18日4月19日4月20日4月21日
174月22日4月23日4月24日4月25日4月26日4月27日4月28日
184月29日4月30日5月1日5月2日5月3日5月4日5月5日
195月6日5月7日5月8日5月9日5月10日5月11日5月12日
205月13日5月14日5月15日5月16日5月17日5月18日5月19日
215月20日5月21日5月22日5月23日5月24日5月25日5月26日
225月27日5月28日5月29日5月30日5月31日6月1日6月2日
236月3日6月4日6月5日6月6日6月7日6月8日6月9日
246月10日6月11日6月12日6月13日6月14日6月15日6月16日
256月17日6月18日6月19日6月20日6月21日6月22日6月23日
266月24日6月25日6月26日6月27日6月28日6月29日6月30日
277月1日7月2日7月3日7月4日7月5日7月6日7月7日
287月8日7月9日7月10日7月11日7月12日7月13日7月14日
297月15日7月16日7月17日7月18日7月19日7月20日7月21日
307月22日7月23日7月24日7月25日7月26日7月27日7月28日
317月29日7月30日7月31日8月1日8月2日8月3日8月4日
328月5日8月6日8月7日8月8日8月9日8月10日8月11日
338月12日8月13日8月14日8月15日8月16日8月17日8月18日
348月19日8月20日8月21日8月22日8月23日8月24日8月25日
358月26日8月27日8月28日8月29日8月30日8月31日9月1日
369月2日9月3日9月4日9月5日9月6日9月7日9月8日
379月9日9月10日9月11日9月12日9月13日9月14日9月15日
389月16日9月17日9月18日9月19日9月20日9月21日9月22日
399月23日9月24日9月25日9月26日9月27日9月28日9月29日
409月30日10月1日10月2日10月3日10月4日10月5日10月6日
4110月7日10月8日10月9日10月10日10月11日10月12日10月13日
4210月14日10月15日10月16日10月17日10月18日10月19日10月20日
4310月21日10月22日10月23日10月24日10月25日10月26日10月27日
4410月28日10月29日10月30日10月31日11月1日11月2日11月3日
4511月4日11月5日11月6日11月7日11月8日11月9日11月10日
4611月11日11月12日11月13日11月14日11月15日11月16日11月17日
4711月18日11月19日11月20日11月21日11月22日11月23日11月24日
4811月25日11月26日11月27日11月28日11月29日11月30日12月1日
4912月2日12月3日12月4日12月5日12月6日12月7日12月8日
5012月9日12月10日12月11日12月12日12月13日12月14日12月15日
5112月16日12月17日12月18日12月19日12月20日12月21日12月22日
5212月23日12月24日12月25日12月26日12月27日12月28日12月29日
5312月30日12月31日

-
UserScripts

tweet menu
script.js
scrapbox.PageMenu.addItem({ title: 'Tweet', image: 'https://x.com/favicon.ico', onClick: () => window.open(`https://twitter.com/intent/tweet?url=${encodeURIComponent(location.href)}&text=${encodeURIComponent(window.scrapbox.Page.title)}`) })

文字数カウントメニュ
script.js
scrapbox.PageMenu.addItem({ title: () => { if (!scrapbox.Page.lines) return const chars = scrapbox.Page.lines.map(line => line.text.length).reduce((a,b) => a + b) const words = scrapbox.Page.lines.map(line => line.text.split(/\s+/).length).reduce((a,b) => a + b) return `${chars}文字 ${words}単語 ${scrapbox.Page.lines.length}行` }, onClick: () => null })

script.js
{ // realtime word counter const counter = document.createElement("div"); document.querySelector(".page-menu").appendChild(counter); const count = event => { counter.innerText = document.querySelector(".lines").innerText.replace(/[\r\n]/g,'').length} document.onkeydown = count; count(); }

選択範囲 tweet popup
script.js
scrapbox.PopupMenu.addButton({ title: 'Tweet', onClick: text => { const lines = text .split(/[\r\n]/) .map(line => line.replace(/[\[\]]/g, '').replace(/^\s+/, '')) lines.push(location.href) const url = `https://twitter.com/intent/tweet?&text=${encodeURIComponent(lines.join('\n'))}` const width = 550 const height = 420 const option = `width=${width},height=${height},left=${(window.innerWidth - width) / 2},top=${(window.innerHeight - height) / 2},scrollbars=yes,resizable=yes,toolbar=no,location=yes` window.open(url, '_blank', option) } })

文字カウントポップアップ
script.js
scrapbox.PopupMenu.addButton({ title: function (text) { const chars = text.replace(/[\r\n]/g, '').length const words = text.trim().split(/[\r\n\s]+/).length return `${chars}c ${words}w` }, onClick: () => null })

日付書式 control+tで日付を入力
script.js
// Formats: https://momentjs.com/ scrapbox.TimeStamp.addFormat("[[]YYYY-MM-DD[]] HH:mm:ss") scrapbox.TimeStamp.addFormat("[[]YYYY-MM-DD[]]") scrapbox.TimeStamp.addFormat("[[]M月D日[]]") scrapbox.TimeStamp.addFormat("YYYY-MM-DD") scrapbox.TimeStamp.addFormat("YYYYMMDD") scrapbox.TimeStamp.addFormat("[[]YYYYMMDD[]]")

選択範囲に引用符をつける
script.js
scrapbox.PopupMenu.addButton({ title: 'quote', onClick: text => text.split(/\n/).map(line => ` > ${line}`).join('\n') })

見える文字数カウンター/scrasobox/見える文字数カウンター
script.js
const __appliedProject__ = scrapbox.Project.name const __charCounterSetup__ = setInterval(function() { // ページが準備できるのを待ちたいので、スクリプトがロードされてから3秒くらいしたら処理開始↓↓ if (document.getElementById('editor') && scrapbox.Page.lines) clearInterval(__charCounterSetup__) else return // ページの準備ができてないときはまた3秒待つ // 下準備 const $id = id => document.getElementById(id) const $query = q => document.querySelector(q) const fmt = n => new Intl.NumberFormat('en-US').format(n).padStart(6) // 文字数カウンター表示用のエレメントを作ってく const linesText = $query('.lines').innerText.trim() const chars = linesText.split(/\s+/).join('').length var counterWrapper = document.createElement('div') counterWrapper.id = '__charCounter__' counterWrapper.innerHTML = `<span>${fmt(chars)} chars</span>` + '<pre id="__charCounterPopup__" style="opacity:0"></pre>' $id('editor').appendChild(counterWrapper) const counter = $query('#__charCounter__ span') const popup = $id('__charCounterPopup__') // 文字数カウンターにマウスカーソルを乗せたときに詳細をポップアップする counter.addEventListener('mouseover', function() { const linesText = $query('.lines').innerText.trim() const chars = linesText.split(/\s+/).join('').length const words = linesText.split(/\s+/).length popup.innerHTML = `${fmt(chars)} chars\n` + `${fmt(words)} words\n` + `${fmt(scrapbox.Page.lines.length)} lines` popup.style.opacity = 1 }) // 文字数カウンターからマウスカーソルが離れたら詳細ポップアップを見えなくする counter.addEventListener('mouseout', function() { popup.style.opacity = 0 }) // 文字数のみを数え直す関数 const updateCounter = function() { if ($query('.presentation') || scrapbox.Project.name !== __appliedProject__) { // プレゼンモードになってたり、よそのプロジェクトを表示してたら文字数カウンターを非表示にする counterWrapper.style.display = 'none' } else if (scrapbox.Page.lines) { // ここで数え直ししてます const linesText = $query('.lines').innerText.trim() const chars = linesText.split(/\s+/).join('').length counter.innerText = `${fmt(chars)} chars` counterWrapper.style.display = 'block' } } // 数え直すタイミングは、テキスト入力時とペースト時 $id('text-input').addEventListener('input', updateCounter) $id('text-input').addEventListener('paste', updateCounter) // 何もしなくても3秒ごとに数え直す setInterval(updateCounter, 3000) }, 3000)

選択文字列をプロジェクト内で検索ポップアップ
script.js
// 選択された文字列をScrapboxプロジェクト内で検索する // Scapbox検索ボックスを使ったときと同じ結果ページを開く scrapbox.PopupMenu.addButton({ title: 'SB内検索', onClick: function (text) { var projectName = 'shio'; window.open('https://scrapbox.io/'+ projectName +'/search/page?q=' + text); } });

全角半角変換などをする「format」メニュ
1. 箇条書きの先頭を全てTabに置き換える
2. 文中の全角・半角空白を取り除く
3. 文字化けを修正する (今回は での での に直す)
4. 全角英数字を半角英数字に置き換える
5. 全角括弧を半角括弧に置き換える
6. 括弧で囲まれた前後に空白を入れる
7. コードブロック記法の前後に空白を入れる
script.js
scrapbox.PopupMenu.addButton({ title: 'format', onClick: text => text.split('\n').map(function(line) { return line.replace(/^\s*/g, s => s.replace(/\s/g, '\t')) // .replace(/[  ]/g, '') .replace(/[ぁ-ん|ァ-ヴ]゙/g, s => String.fromCharCode(s.charCodeAt(0) + 1)) .replace(/[A-Za-z0-9]/g, s => String.fromCharCode(s.charCodeAt(0) - 0xFEE0)) .replace('(', '(') .replace(')', ')') .replace(/\S\(/g, s => s.charAt(0) + ` (`) .replace(/\)\S/g, s => ') ' + s.charAt(1)) .replace(/\S`.*`/g, s => s.charAt(0) + ' ' + s.slice(1)) .replace(/`.*`\S/g, s => s.slice(0, -1) + ' ' + s.slice(-1)) }).join('\n') })

箇条書きナンバリング
script.js
scrapbox.PopupMenu.addButton({ title: 'No.', onClick: text => text.split(/\n/).map((line, index) => `${index+1}. ${line}`).join('\n') })

script.js
scrapbox.PageMenu.addMenu({   title: "NewWork",   image: "https://i.gyazo.com/7057219f5b20ca8afd122945b72453d3.png",   onClick: () => {     func();   }, }); function func() {   var project = location.pathname.split("/");   var title = scrapbox.Page.title;   var number = Number(title.substr(0, 5));   var now = new Date();   var path =     "https://cosen.se/" +     project[1] +     "/" +     (number + 1).toString().padStart(5, "0") +     "?body=" + "No. "+     "[" +     (number + 1).toString().padStart(5, "0") +     " https://cosen.se/" +     project[1] +     "/" +     (number + 1).toString().padStart(5, "0") +     "], by shio / 塩澤一洋\n["+     now.getFullYear() +     "-" +     (now.getMonth() + 1).toString().padStart(2, "0") +     "-" +     now.getDate().toString().padStart(2, "0") +     "], "+     now.getFullYear() +     "年" +     "[" +     (now.getMonth() + 1) +     "月" +     now.getDate() +     "日]\n\n\n\n◀[" +     (number + 2).toString().padStart(5, "0") +     "]\n▶[" +     title +     "]";   const encoded = encodeURI(path);   window.location.href = encoded; }


.navbar .navbar-menu>li.stream-btn,
.navbar .navbar-menu>li.stream-btn.hidden-xs
{ display: block !important; }