masaki
このページは、自分でも後で役に立つのかどうか分からないが、経験したことや、気になって調べたりしたことをとりとめもなく記しておくための「雑記帳」です。とっちらかっている上に間違ったことも平気で書きますが、必要に応じてメンテしますから、あしからず。
https://lh3.googleusercontent.com/-XdUIqdMkCWA/AAAAAAAAAAI/AAAAAAAAAAA/4252rscbv5M/photo.jpg
村瀬雅樹 (MURASE, Masaki)
(千)と(万)の二児の父親である。親ばかである。
学歴・職歴等
http://www.hautbois.jp/~masaki/
https://www.linkedin.com/in/murase-masaki-a401999a/?originalSubdomain=jp
専門
以前は、10年ほど、細胞の情報伝達に関する生物物理学的研究をやっていた。
主に、短期シナプス可塑性とシナプス前末端内部のCa2+動態との関係を調べていた。機能重視の研究。
生命科学研究に関わる上で「機能分子の同定」がいかに重要か痛感させられた。そう思って後でイオンチャネルなどの機能分子の研究に取り組もうとしたけど、これは気持ちが空回りするだけで、何もできなかった。
ということもあり、紆余曲折あり、直近の10年間は、民間企業にて、質量分析データを用いて生体分子を同定するソフトウェアを作っている。
主な分析対象は、タンパク質の翻訳後修飾。
ソフトウエア開発に関するスキル
開発言語: python, Java, C#, javascript
OS:Windows/Linux/(プライベートでmacOS)
最近はWebでUIを作ることが増え、慣れ親しんだLinuxで仕事をする機会が増えたので、学生時代に好きでマスターしたUnixやネットワーク管理に関する知識が仕事の役に立つケースが増えてきた。また、昔のスキルではとても実装できなかったようなことが、今では(スキルなしに)簡単に実装できるようになりつつあり、10年を超える期間では、スキルよりも基本を習得することの重要性を改めて実感する今日このごろ。
生命科学とソフトウェア開発の両方の知識をそこそこ持ち合わせているので、その専門性を活かして、個人的に重要と思えるテーマに絞って仕事をしている。
生活圏
京都市在住だが、月に一,二回は愛知の地元に戻るので、京都と愛知の両方が生活圏。
愛知+京都: 食材の調達
京都: 日々のサイクリング(名古屋市周辺は、市街地を抜け出すのに時間がかかりすぎる)
愛知: 子育て(散髪や車の整備とかは徐々に京都に移行中)
行動範囲を広げるべく、大阪や京都伏見の飲み屋を紹介してくれる人を求めている。
趣味
サイクリング:
ツーリング: 最近はワンデーサイクリングばかりだけど、学生時代に北海道の東半分を周ったときなど、自転車ツーリングは良い思い出ばかり。
ヒルクライム: 30代はダイエットをして、ヒルクライムに取り組んでいた。1〜2時間ほどを全力で走るだけだけど、無心になれて良かったし、そこそこ速かったので楽しかった。
ロングライド: 40 代後半から激太りしたので、のんびりとしたワンデイサイクリングを楽しんでいる。でも、2−3日でいいので、もう少しハードにツーリングできたら楽しいと思うので、鈍った体を鍛え直したいと思いつつ、はや10年。
オーディオ
スピーカー自作にはまっていますが、ド素人です。
このScrapboxにたくさんのスピーカー関係のメモを書き散らかしてますが、ド素人が書いたものなので、要注意。ほとんど参考にならないと思います。
音楽鑑賞
オペラ、歌曲、協奏曲、ピアノ曲
岡村孝子(40年来のファンです。「電車」がマイベスト。)、手嶌葵、The Breeze Adventures, Travis, Jason Mraz, その他
ジャズは全然知らないですが、割と聴いてます。
社会貢献
現状、寄付以外は何もしてないが
オープンソースのソフトウェアで生命科学分野の研究者を支援したいと思っている。
子供たちが創意工夫をして新しいものを世に出すきっかけになるような機会を提供したいと思っている。
「サイクリング」と「ソフトウェア開発」、「社会貢献」に興味がある。他事に時間をとられて全く何もやれてないので、あちこち体験参加して、コンスタントに参加できそうな場を見つけた方がよいと思っている。
着手段階の個人プロジェクト
プロジェクト46
Mass++
code:script.js
scrapbox.TimeStamp.addFormat('#日記 #YYYY年 #M月D日 ]YYYY年M月[-D HH:m')
import '/api/code/scrasobox/WebからコピペしたらSB記法に変換する/script.js'
//テーブルのスクロール表示(https://scrapbox.io/customize/%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E6%A8%AA%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B)
// Functions
/** @param {HTMLElement} movedElem */
const scrollWholeTable = movedElem => {
const tableName = movedElem.className.match(new RegExp(${CLASS_COMMON}-\\d+))0
for (let tableElem of document.querySelectorAll(.${tableName})) {
if (tableElem === movedElem) { continue }
tableElem.scrollLeft = movedElem.scrollLeft
}
}
/**
* @param {HTMLElement} line
* @return {HTMLElement}
*/
const line2Elem = line => document.getElementById(L${line.id})
// ticking=falseのときだけ再描画を依頼、再描画時にfalseに戻すことでイベントを間引く
// https://developer.mozilla.org/ja/docs/Web/API/Element/scroll_event
/** @return {function(HTMLElement)} */
const tickClosure = () => {
let ticking = false
const scrollWholeTableWithTick = movedElem => e => {
if (!ticking) {
window.requestAnimationFrame(() => {
scrollWholeTable(movedElem)
ticking = false
})
ticking = true
}
}
return scrollWholeTableWithTick
}
// Settings
const CLASS_COMMON = 'scrollTable'
const CLASS_BOTTOM = ${CLASS_COMMON}Bottom
const getTableUniqueName = n => ${CLASS_COMMON}-${n}
// main
const enableTableScroll = () => {
let isTable = false
let nTable = 0
let currentTableName = ''
let currentLineElem
// Scrapbox側のDOM操作(例: cursor-line付与)でtable名のクラスが消える問題対策
const ensureTableName = mut => {
const withPrefix = mut => mut.target.classList.contains(CLASS_COMMON)
if ((mut.type === 'attributes') && !withPrefix(mut)) { enableTableScroll() }
}
const observer = new MutationObserver(mutations => mutations.forEach(ensureTableName))
// テーブルへのクラス名付与
// テーブル最下行を特別扱いしたいので、逆順に読む
for (const line of scrapbox.Page.lines.reverse()) {
if ('tableBlock' in line) {
const tableRowElem = line2Elem(line).querySelector('.table-block-row')
if (!tableRowElem) { isTable = false; continue } // テーブルヘッダ = 逆順での読み終わり行
const addClass = _className => tableRowElem.classList.add(_className)
// テーブル最下行発見
if (!isTable) {
isTable = true
nTable++
currentTableName = getTableUniqueName(nTable)
addClass(CLASS_BOTTOM)
}
// テーブル共通処理
addClass(CLASS_COMMON)
addClass(currentTableName)
// 他を追従させる処理 + DOM変化をobserveしてクラス名消失を防ぐ
const scrollWholeTableWithTick = tickClosure()
tableRowElem.addEventListener('scroll', scrollWholeTableWithTick(tableRowElem))
// onclick?でDOM更新されてクラス名が消えてしまうので、監視して再度付与
observer.observe(tableRowElem, { attributes: true })
}
}
}
enableTableScroll()
scrapbox.on('lines:changed', enableTableScroll)
code:style.css
/* 気にいった・気になったCSSを貼りつけて、ごにょごにょする。.emacsみたいに育てる。 */
/* チェックボックスになるタグ v2 Font Awesome版 */
.line:not(.cursor-line) ahref='./_':not(.icon) span,
.line:not(.cursor-line) ahref='./x':not(.icon) span {
display: inline-block; width: 0; text-indent: -9999px }
.line:not(.cursor-line) ahref='./_':not(.icon)::after,
.line:not(.cursor-line) ahref='./x':not(.icon)::after {
display: inline-block; min-width: 1.15em; padding-left: 1px;
font-family: FontAwesome; font-size: 120%; text-align: center; vertical-align: middle }
.line:not(.cursor-line) ahref='./_':not(.icon)::after { content: '\f096'; color: #08BDBD }
.line:not(.cursor-line) ahref='./x':not(.icon)::after { content: '\f046'; color: #2489C5 }
/* 付箋記法のスタイル例 */
.line:not(.cursor-line) .deco-\~ {
display: inline-block; position: absolute; top: -0.6em; right: -6vw;
max-width: 40%; padding: .3rem 1rem;
border-right: 1rem solid #04B2D9;
background-color: #f9f8f6;
transform: rotate(-0.8deg); box-shadow: 4px 1px 3px rgba(0,0,0,.2) }
.presentation .line .deco-\~ { position: static; max-width: 100% }
@media screen and (max-width: 768px) { .line:not(.cursor-line) .deco-\~ { position: static; max-width: 100% } }
@media print { .line:not(.cursor-line) .deco-\~ {
right: 0; border-bottom: 1px solid #ccc; background-color: #f9f8f6 } }
/* 太字記法との組み合わせでスタイルを変える場合 */
/* カラーパレット→ https://color.adobe.com/Softie-color-theme-2233237/ */
.line .level-2 .deco-\~ { border-right-color: #009175 }
.line .level-3 .deco-\~ { border-right-color: #EFBB33 }
.line .level-4 .deco-\~ { border-right-color: #F23E2E }
/* 付箋記法内で打消し線記法と下線記法を併用する場合 */
.line .deco-\~.deco-- { text-decoration: line-through }
.line .deco-\~.deco-_ { text-decoration: underline }
/*テーブルのスクロール表示*/
/* https://scrapbox.io/customize/%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E6%A8%AA%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B */
.scrollTable { overflow-x: scroll; }
.scrollTable:not(.scrollTableBottom)::-webkit-scrollbar { display: none; }
.scrollTable:not(.scrollTableBottom) {
-ms-overflow-style: none;
scrollbar-width: none;
}
/*画像サイズを見出しサイズと同様の書式で指定できるようにする(横幅だけで縦サイズは大きくならない)*/
/* なお、単にが画像を大きく表示したいのであれば、角括弧を二重にするだけで良い(https://helpfeel.com/help/%E7%94%BB%E5%83%8F%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%AE%E5%A4%89%E3%81%88%E6%96%B9-5ea666718c3d2100177662e7) */
.level-1 img { width: 16.7%; max-height: none; }
.level-2 img { width: 33.3%; max-height: none; }
.level-3 img { width: 50%; max-height: none; }
.level-4 img { width: 66.7%; max-height: none; }
.level-5 img { width: 83.3%; max-height: none; }
.level-6 img { width: 100%; max-height: none; }
#member