shio
塩澤一洋, Kazuhiro Shiozawa
https://gyazo.com/ff355efb9b506690daabc4ed30c3ce24
Καζουχίρο Σιοζάουα
現行 Scrapbox blog:shiology.org(2004年の第1回からすべて)
旧Medium:shiology.net(2016年8月の第4501回〜2017年9月まで)
旧blog:shiology.com(2004年の第1回〜2016年の第4500回)
授業関連Scrapbox:/shiolectures
旧連載:大公開時代の羅針盤
ご連絡いただく場合は、TwitterのDM、Facebookメッセージ、InstagramのDMがありがたいです。
Twitter:@shiology
Facebook:shiozawa, (shiology)
Instagram:shiology
Flickr:shio
Theta360:shio
https://gyazo.com/9fa13e6cbc6fcb79d43283de13d557e3
プロフィール
難しいことをやさしくするのが学者の役目、それを面白くするのが教員の役目、と考える法律学者兼大学教員です。
民法、著作権法、法学教育方法論を研究しています。
東京生まれ東京育ち。
桐朋12年
小学校(梅根典子先生・野口祥子先生・別宮慶彦先生・武田透先生)
中学校(村松春彦先生・山下明先生)
高校(衛藤浩一先生)
慶應義塾大学12年
経済学部(島田晴雄ゼミ)
法学部法律学科(内池慶四郎ゼミ)
大学院法学研究科修士課程・博士課程(指導教授:池田眞朗先生)
2000年4月に成蹊大学法学部に着任し2008年から教授。その間に、
東京大学先端科学技術研究センター特任助教授(2003〜2007年)
政策研究大学院大学 客員教授(2003〜2018)
Stanford Law School, Visiting Scholar(2005〜2007年)
Center for Internet and Society, Visiting Fellow(2005〜2007年)
成蹊大学法科大学院(ロースクール)非常勤講師(2011〜2013年)
慶應義塾大学総合政策学部特任教授(2012〜2014年)
慶應義塾大学 総合政策学部 非常勤講師(2010〜2012年、2015〜2022年)
金沢大学 法科大学院(ロースクール) 非常勤講師(2017年度)
を併任した他、現職は以下のとおり。
現職
成蹊大学 法学部 教授(2008年〜) →/shio/成蹊大学へのアクセス
多摩美術大学 情報デザイン学科 非常勤講師(2011年〜)
政策研究大学院大学 非常勤講師(2019〜)
写真家(1995年〜)
受賞
2015年度 成蹊大学 Teaching Award 受賞
楽器
ヴァイオリン:3歳〜(スズキ・メソード)
ピアノ:5歳〜
ブロックフレーテ(リコーダー):8歳〜
ギター:11歳〜(NHK教育テレビ「ギターを弾こう」に1981年4月〜9月毎週出演)
フルート:12歳〜
パンフルート:15歳〜
スポーツ
ヨット、カヌー、カヤック、アーチェリー:いずれも13歳〜(東京YMCA主催「野尻学荘」にて)
一級小型船舶操縦士免許(20歳〜)
2022年度担当授業
成蹊大学: 民法1 / 民法2 / LE1 / 知的財産法(著作権法) / 1年生ゼミ(演習1)前期/ 1年生ゼミ(演習1)後期 / shioゼミ(判例研究ゼミ・2〜4年生・演習2/3/4) / ドラゼミ(司法試験論文ゼミ・2〜4年生・演習2/3/4)
成蹊大学大学院 修士課程: 民法基本研究1 / 民法特殊研究3 / 知的財産権法基本研究1 / 研究指導I(法律)
成蹊大学大学院 博士課程: 民法基本演習1 / 知的財産権法基本演習1
政策研究大学院大学: 民法 / 修士論文指導
多摩美術大学: 情報と社会
信州大学:著作権法入門(2コマ)
2021年度担当授業
成蹊大学: 民法1 / 民法2 / LE1 / 知的財産法(著作権法) / 1年生ゼミ(演習1)(前期/後期) / 2〜4年生ゼミ(演習2/3/4) / 司法試験論文ゼミ(演習2/3/4)
成蹊大学大学院 博士課程: 民法基本演習1 / 知的財産権法基本演習2
政策研究大学院大学: 民法 / 修士論文指導
慶應義塾大学SFC: 民法演習
多摩美術大学: 情報と社会
信州大学:著作権法入門(2コマ)
2020年度担当授業
成蹊大学: 民法1 / 民法2 / LE1 / 知的財産法(著作権法) / 1年生ゼミ(演習1)(前期/後期) / 2〜4年生ゼミ(演習2/3/4) / 司法試験論文ゼミ(演習2/3/4)
成蹊大学大学院 博士課程: 民法基本演習3 / 知的財産権法基本演習1
政策研究大学院大学: 民法 / 修士論文指導
慶應義塾大学SFC: 民法演習
多摩美術大学: 情報と社会
信州大学:著作権法入門(10コマ)
2019年度担当授業
成蹊大学: 民法1 / 民法2 / LE1 / LE2 / 知的財産法(著作権法) / フレッシャーズセミナー / 1年生ゼミ(演習1) / 2〜4年生ゼミ(演習2/3/4) / 司法試験論文ゼミ(演習2/3/4)
成蹊大学大学院 博士課程: 民法基本演習2 / 知的財産権法基本演習2
政策研究大学院大学: 民法 / 修士論文指導
慶應義塾大学SFC: 民法演習
多摩美術大学: 情報と社会
2018年度担当授業
成蹊大学: 民法1 / 民法2 / LE1 / 知的財産法(著作権法) / フレッシャーズセミナー / 1年生ゼミ(演習1) / 2〜4年生ゼミ(演習2/3/4) / 司法試験論文ゼミ(演習2/3/4)
成蹊大学大学院 博士課程: 民法基本演習1 / 知的財産権法基本演習1
政策研究大学院大学:修士論文指導
慶應義塾大学SFC: 民法演習
多摩美術大学: 情報と社会
2017年度担当授業
成蹊大学: 民法1 / 民法2 / LE1 / 知的財産法(著作権法) / フレッシャーズセミナー / 1年生ゼミ(演習1) / 2〜4年生ゼミ(演習2/3/4) / 司法試験論文ゼミ(演習2/3/4)
成蹊大学大学院: 民法基本研究1 / 知的財産権法基本研究2
政策研究大学院大学: 民法 / 修士論文指導
金沢大学ロースクール: 民法1 / 知的財産法論文指導
慶應義塾大学SFC: 民法演習
多摩美術大学: 情報と社会
成蹊大学での部活の顧問
應援指導部(リーダー部・チアリーダー部)(2010年4月〜)
体育会水泳部(水球班・競泳班 )(2010年6月〜)
体育会ヨット部(2010年6月〜)
体育会蹴球部(2010年7月〜)
写真部(2014年4月〜)
卒業アルバム委員会(2014年4月〜)
興味関心
#民法 #民法体系 #契約法 #財産法 #知的財産法 #著作権法 #法律
#学問 #楽問 #教育 #ゼミ #学習法 #shioゼミ #ドラゼミ
#法学教育 #授業 #全方向授業 #授業は体育 #対話型授業
#教えあい #半学半教 #同時発言 #一斉回答 #ピアラーニング #アクティブラーニング
#魚を与えて1日を養い、漁法(すなどり)を伝えて一生を養う
#Scrapbox #スクスク #書考
#Mac #iPhone #iPad Apple Watch AppleTV
#親指シフト #shioシフト #or2レイアウト
#HHKB #ScanSnap
#写真 #カメラ #SIGMA #RICOH #CANON #Fujifilm #Leofoto
#音楽 #アドリブ #ヴァイオリン #ピアノ #フルート #ギター #自作ヴァイオリン
#ヨット #カヌー #カヤック #SUP #アーチェリー
#キャンプ #野尻学荘 #野尻小学生キャンプ
#カンボジア #法整備支援 #JJL #RULE #NUM #モンゴル #ベトナム
#万年筆 #Pilot #Sailor #Pelican #MontBlanc #カスタム823 #フォルカン
#測量野帳 (コクヨ・セ-Y3・スケッチブック) #手帳 #辞書 #リテラシー
#ヴィブラムファイブフィンガーズ #VibramFiveFingers #5本指シューズ #ふんどし #腹巻き
#18時間ダイエット #断食 #breakfastは18時
#手ぶら #teblr #ミニマル #素足 #スアシスト #立ち机 #アーユルチェアー
#ムンタージ #尾崎庵 #手もみラーメン十八番 #旅人の木
1泊以上の滞在経験(ほぼ滞在順)
Tokyo, Oahu Island, Kauai Island, Los Angeles, San Diego, Washington D.C., New York, Seoul, Vladivostok, Phnom Penh, Fiji, Tonga, Siem Reap, Bangkok, San Francisco, Bay Area, Portola Valley, Palo Alto, Sunnyvale, Paris, London, Cambridge, Hanoi, Athens, Paros Island, Ulan Bator, Hong Kong
授業時間割
2022年度授業時間割
https://gyazo.com/f1eaf290b73584f69d77b7e0018dfc23
2021年度授業時間割
https://gyazo.com/0fb5eae466d24442238f43103da0ab7b
2020年度授業時間割
前期:10コマ
https://gyazo.com/3bf8fe1892dce16e4e0a03514ee01e1a
後期:11コマ
https://gyazo.com/de6cff7c6333ad0b9650dfd27bee33c6
2019年度授業時間割
後期:14コマ
https://gyazo.com/b32317fea5a75124ce715455e3ff1386
前期:9コマ
https://gyazo.com/58bf6a65c2c173a034dadd4c964e9fc9
2018年度
https://gyazo.com/e93d79d1628f48f4c013bd88df5e8631 https://gyazo.com/11b9429d34cfe9ba9f70a24375c5b6df
2017年度
https://gyazo.com/3190a89e0038ba03ba6d8a5a27a031b8 https://gyazo.com/ca6dbf613a4f83fae2f12357f802b5a5
https://gyazo.com/5c06b1c41a5f5d0a3b0cce6d0f265152 https://gyazo.com/e6a53caa434fcbf17e0262779159b908
https://gyazo.com/76aca7ee0786f867badcb0cabe9ed9ff
/icons/-.icon
UserScripts
tweet menu
code:script.js
scrapbox.PageMenu.addItem({
title: 'Tweet',
image: 'https://twitter.com/favicon.ico',
onClick: () => window.open(https://twitter.com/intent/tweet?url=${encodeURIComponent(location.href)}&text=${encodeURIComponent(window.scrapbox.Page.title)})
})
文字数カウントメニュ
code: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
})
選択範囲 tweet popup
code: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)
}
})
文字カウントポップアップ
code: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で日付を入力
code: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[")
選択範囲に引用符をつける
code:script.js
scrapbox.PopupMenu.addButton({
title: 'quote',
onClick: text => text.split(/\n/).map(line => > ${line}).join('\n')
})
/shokai/行頭に引用符を付けるUserScript
見える文字数カウンター/scrasobox/見える文字数カウンター
code: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)
選択文字列をプロジェクト内で検索ポップアップ
code: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. コードブロック記法の前後に空白を入れる
code: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')
})
箇条書きナンバリング
code:script.js
scrapbox.PopupMenu.addButton({
title: 'No.',
onClick: text => text.split(/\n/).map((line, index) => ${index+1}. ${line}).join('\n')
})
NewWIP
code:script.js
scrapbox.PageMenu.addMenu({
title: 'NewWIP',
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://scrapbox.io/'+project[1]+'/'+((number+1).toString().padStart(5, '0'))+'?body='+'WIP|書きかけ.icon WIP|書きかけ\n'+((number+1).toString().padStart(5, '0')) + '+'/'+  ((number+1).toString().padStart(5, '0'))+']\n'+(now.getFullYear())+'-'+((now.getMonth()+1).toString().padStart(2, '0'))+'-'+((now.getDate()).toString().padStart(2, '0'))+'\n'+(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;
}
code:style.css
.navbar .navbar-menu>li.stream-btn,
.navbar .navbar-menu>li.stream-btn.hidden-xs
{ display: block !important; }