ebiken
https://lh6.googleusercontent.com/-wUreNj4TG0M/AAAAAAAAAAI/AAAAAAAAAZM/buJedpZJXmI/photo.jpg
Software Engineer
This is my wiki.
Links
Blog
Github
Twitter
note
Facebook
Qiita
Wantedly
Jobs
Mesh
2022/08~
Software Engineer
Go
Flutter
React (Next.js)
Google Cloud (Cloud Run, Cloud Spanner, etc...)
gRPC
Terraform
https://note.com/ebkn/n/n234cb47d94af
and side jobs..
Previous Jobs
DeNA (new grads)
2020/4~2022/07
Backend Engineer at Takasho team (Game Server Development)
Go
kubernetes
Google Cloud (GKE, Cloud Spanner, Cloud Memorystore, etc..)
gRPC
Terraform
https://cloudonair.withgoogle.com/events/inside-games-and-apps?talk=20211005-1
https://cloudonair.withgoogle.com/events/inside-games-and-apps?talk=20211005-2
https://engineering.dena.com/blog/2021/10/takasho-overview/
https://techcon2021.dena.dev/winter/session-win06
https://fullswing.dena.com/archives/8739
(Training)
https://engineering.dena.com/blog/2020/07/20-new-graduates-techtalk/
https://engineering.dena.com/blog/2020/07/20-new-graduates-training-retrospective-1/
STELLA
2018/12~2019/12
Lead (Backend) Enginner
Go
TypeScript
GraphQL
AWS (ECS, RDS, Elasticache, etc..)
Synchro
intern
DeNA
2019/8~2020/3
Backend Engineer
TypeScript, Node.js, Google App Script
Frontend Engineer
Flutter, gRPC
https://hibiyamusicfes.jp/2020/app/
https://engineer.dena.com/posts/2020.06/2020-hibiya-festival-client/
playground
2017/6~2018/11
Backend Engineer
Ruby, Ruby on Rails
AWS
Frontend Engineer
Angular
https://moala.live/ticket
UserScript
/scrasobox/WebからコピペしたらSB記法に変換する
code:script.js
if (sessionStorage.getItem('scrasobox-paste') !== 'true') {
document.addEventListener('paste', event => {
const type = 'text/html'
const d = event.clipboardData
if (d.types && d.types.indexOf('Files') == -1 && -1 < d.types.indexOf(type)) {
event.preventDefault()
const dom = new DOMParser().parseFromString(d.getData(type), type)
const ng = text => text.trim().replace(/[\\\n]/g, ' ')
const q = query => dom.querySelectorAll(query)
const f = (text, deco) =>
[].concat(text.split(/\n/)
.filter(l => l.trim()).map(l => [${deco} ${l.trim()}] )).join('')
q('pre').forEach(d => {
d.innerText = 'code:code.*\n' + d.innerText.split('\n').map(l => ${l}).join('\n') })
q('h3').forEach(d => { d.innerText = f(d.innerText, '**') })
q('h2').forEach(d => { d.innerText = f(d.innerText, '***') })
q('h1').forEach(d => { d.innerText = f(d.innerText, '****') })
q('em, i').forEach(d => { d.innerText = f(d.innerText, '/') })
q('strong, b').forEach(d => { d.innerText = f(d.innerText, '*') })
// q('ahref imgsrc').forEach(d => {
d.closest('a').outerHTML = [${d.src.trim()}#.png ${d.closest('a').href}] })
// q('ahref').forEach(d => { d.outerHTML = [${d.href} ${ng(d.text).trim()}] })
q('imgsrc').forEach(d => { d.outerHTML = [${d.src.trim()}#.png] })
q('iframesrc*="//www.youtube.com/embed/"').forEach(d => {
d.outerHTML = [https://www.youtube.com/watch?v=${d.src.split('/embed/')[1].split('?')[0]}] })
q('code').forEach(d => { d.innerText = '' + d.innerText + '' })
let depth = -1
const li = node => {
depth++
node.querySelectorAll('li').forEach(n => li(n))
return node.innerHTML = '@sp@'.repeat(depth--) + node.innerHTML
}
li(dom.body)
const div = document.createElement('div')
div.innerHTML = dom.body.innerHTML
document.body.appendChild(div)
const range = document.createRange()
range.selectNode(div)
//const text = range.toString()
const text = div.innerText
document.execCommand('insertText', null, text.replace(/(\s*\n){3,}/g, '\n\n').replace(/@sp@/gi, ' '))
document.body.removeChild(div)
}
})
sessionStorage.setItem('scrasobox-paste', true)
}
window.addEventListener('unload', () => { sessionStorage.setItem('scrasobox-paste', false) })
faviconを変更する
code:script.js
$('head > linkrel=icon').attr('href','/api/pages/ebiken/ebiken/icon');
:xxxで/emojiとiconをいれられるように
code:script.js
import '/api/code/yutaro/emoji_selector/script.js'
UserCSSはこっち
Settings