import 한 줄이 e2e test 를 깨뜨리다
기술 스택
@vitejs/plugin-legacy 정리
A Summary of @vitejs/plugin-legacy
뒤로가기 눌렀는데 왜 여기로? Chrome과 Safari가 다르네?
I Hit Back, So Why Am I Here? Chrome and Safari Behave Differently?
requestAnimationFrame의 콜백 함수 실행 시점이 자꾸 햇갈려서 정리해보았다.
I kept getting confused about when requestAnimationFrame’s callback function actually runs, so I decided to write it all down.
```javascript
며칠 전에 Yarn4가 나왔다. 조만간 업그레이드 하려고 생각했으나, 문제는 당장 터졌다.
A few days ago, Yarn4 was released. I had been planning to upgrade soon, but the problem hit me right away.
iframe의 js 코드에서 부모창의 dom을 찾으려면 parent.document 객체에서 검색해야 한다.
To find the parent window’s DOM from JS code inside an iframe, you need to search the parent.document object.
QueryCache에서 error response body를 캐싱하지 않도록 하자.
Let’s make the QueryCache stop caching error response bodies.
react-query의 useQuery는 state 저장소의 역할을 할 수 있다. useQuery의 return값은 어느 컴포넌트에서 조회하든 같은 값을 반환한다.
react-query’s useQuery can play the role of a state store. The return value of useQuery returns the same value no matter which component queries it.
react-query에서 특정 mutation을 수행하고, mutation이 완료될 경우 특정 함수를 실행하려면 어떻게 해야할까? react-query는 mutation을 수행할 때마다 mutationCache를 update한다. 따라서 mutationCache의 변경을 subsc...
In react-query, how do you run a specific function once a particular mutation has been performed and completed? react-query updates the mutationCache every t...
객체에 조건부로 프로퍼티를 추가할 때 사용하는 방법.
A technique for conditionally adding a property to an object.
javascript Set 자료형에 object를 element로 넣는다면, 각 element가 unique한지 어떻게 구별하는 기준은 무엇일까? object 안의 property value까지 비교할까?
If you put objects as elements into a JavaScript Set, what is the criterion for deciding whether each element is unique? Does it compare even the property va...
진행 중인 transition이 취소되면? transitionEnd event가 발생하지 않는다. 이렇게 되면 transitionEnd를 기준으로 event를 발생시키는 javascript 앱에 오류가 발생한다.
What happens when a transition in progress is cancelled? The transitionEnd event doesn’t fire. When this happens, it causes errors in JavaScript apps that tr...
Android mobile chrome에서는 알 수 없는 이유로 scroll이 최상단, 최하단까지 이동하지 않는 경우가 있다.
In Android mobile Chrome, for reasons unknown, the scroll sometimes fails to move all the way to the very top or the very bottom.
요약: safari는 scrollIntoView의 모든 option을 지원하지 않음 reference: https://caniuse.com/?search=scrollIntoView safari 13, 14에서 test함 오류 목...
Summary: Safari does not support all options of scrollIntoView reference: https://caniuse.com/?search=scrollIntoView Tested on Safari 13 ...
Working code link: CodePen
Lodash 사용 예제를 정리해보았다. 왜냐면 내가 자꾸 잊어먹기 때문… 계속 업데이트 할 예정이다.
I put together some Lodash usage examples. Because I keep forgetting them… I plan to keep updating this.
Chrome browser 기준이다.
This is based on the Chrome browser.
Vue.js에서 lodash의 remove 함수가 제대로 동작하지 않는다. 보다 정확히 말하자면, Vue.js에서 watching 중인 reactive array에서 element를 _.remove(array, fn) 해도, Vue.js는 이를 감지하지 못한다.
In Vue.js, lodash’s remove function doesn’t work properly. To be more precise, when you remove an element from a reactive array that Vue.js is watching with ...
새로 나온 Node.js 디버깅 도구(?)
A new Node.js debugging tool(?)
Server for FCM Admin
0. JavaScript Logger
0. JavaScript Logger
It is working code on my blog
Login with Email and password
Where is Uploader component?
Rotate images by EXIF orientation infomation
I made a game using Vue.js, vuetify, firebase.
For Exporting JSON to Excel file, SheetJS is useful. SheetJS is complicated to use, but powerful and well maintained. I tried to use vue-json-excel, but on v...
프린터 구매를 위해 프린터 사용기를 구글링해보았다. 놀랍게도 유용한 리뷰는 드물었다. 이제 프린터가 IT의 한 축이던 시대는 영원히 끝나버린건가. 조지 소로스의 오픈 소사이어티 재단의 주요 사업 중 하나가 복사기 보급 아니었던가. 제록스가 한 때 IT의 선두주자 아니었던가. 아쉬운...
When I was shopping for a printer, I tried Googling printer reviews. Surprisingly, useful reviews were hard to come by. Is the era when printers were one of ...
개발이란 참 묘한 것이다. 어떤 언어나 프레임워크든 처음 배울 때는 무진장 어렵고, 눈에 익기 시작하면 쉽고 재미있으며, 익숙해지면 이제 개발의 달인이 된 것 같다. 그리고 시간이 더 흐르고 난 어느 시점에 불현듯 이런 생각이 든다. 내가 알기는 아는 것 같은데, 정말로 제대로 알...
Development is a curious thing. No matter the language or framework, it feels impossibly hard when you first learn it, then becomes easy and fun once it star...
짧고 재미있어 하루도 안 걸려 읽어내렸다. 나도 SI에서 개발자 일을 시작했다. 경영학과 출신의 IT비전공자였고, 개발에 대해서는 아무런 지식도 없었다. 벌써 9년 전의 일이다.
It was short and entertaining, so I finished it in less than a day. I, too, started my career as a developer in SI. I was a business school graduate with no ...
모 클라우드 회사 면접에서 OSI 모델을 제대로 설명하지 못 한 충격을 잊기 위해 잡은 책. 어플리케이션 개발을 주로 하다보니 인프라를 소홀히 다뤘다. 하지만 우리가 딛고 있는 세상은 거대한 IT인프라 위에 서 있는 것이나 다를 바 없다. 따라서 그 중요성은 말할 필요도 없다. 하...
I picked up this book to get over the shock of failing to properly explain the OSI model in an interview at a certain cloud company. Since I mostly do applic...
요즘 롤스의 정의론을 읽고 있다. 롤스는 사회 체제를 유지하기 위한 판단 기준으로 정의를 내세우는데, 자신의 논지를 전개하기 위하여 고전적 공리주의를 비판한다. 그러다 문득 이런 생각이 들었다.
These days I’ve been reading Rawls’s A Theory of Justice. Rawls puts forward justice as the criterion for sustaining a social system, and in order to develop...
결단이 필요한 순간, 무엇이 옳은지 또는 어떻게 해야하는지를 말하는 사람들이 있다. 헤겔, 롤스, 벤담 등 다들 어려운 이야기를 하는 사상가들이다. 그리고 이들은 자신의 논지를 전개하기 위하여 늘 하나의 가정을 한다. 인류 최초의 사회는 어떻게 만들어졌을까? 각자 설득력 있는 가정...
At moments that call for a decision, there are people who tell us what is right or how we ought to act. Hegel, Rawls, Bentham, and others are thinkers who ta...
이런 류의 책, 즉 ‘만화로 보는 xx’의 책이 흔히 그렇듯, 결코 쉽지는 않다. 하지만 이는 순전히 책이 다루고 있는 내용 그 자체가 애당초 어렵기 때문이다. 이 책은 짧은 분량과 만화라는 매체의 제약에도 불구하고 머신러닝을 쉽게 설명하기 위해 많은 노력을 했다. 그러면서도 머신...
As is often the case with this kind of book, namely the “xx through manga” genre, it is by no means easy. But this is purely because the subject matter the b...
어릴 적의 나는 장기를 곧잘 두었는데, 별다른 이유가 있던 것은 아니었고, 그저 내가 또래 친구들보다 장기를 조금 더 잘 두었기 때문이었다. 당시만 해도 온라인 장기 대전은 아예 없었기 때문에 나는 장기에 있어서는 늘 득의양양했다. 하지만 이런 나도 맥을 못추는 상대가 있었다. 작...
As a kid, I was pretty good at janggi (Korean chess), not for any particular reason, but simply because I was a little better at it than my peers. Back then ...
인천 이음 카드를 1달 이용한 후 쓰는 사용기
A Review After Using the Incheon E-eum Card for a Month
산업의 초창기에는 이런 일도 가능하다. 신화적인 이야기다. 하지만 여전히 어딘가 기회는 있을지 모른다.
In the early days of an industry, things like this are still possible. It’s the stuff of legend. But perhaps there’s still an opportunity out there somewhere.
알리 익스프레스에서 w1칩을 복제한 짝퉁 공기팟을 샀다. 결론은…
I bought a pair of fake AirPods with a cloned W1 chip from AliExpress. The conclusion is…
AliExpress에서 V9을 구매했다. 내 생에 첫 골전도 헤드폰이다.
I bought the V9 on AliExpress. It’s my first pair of bone conduction headphones.
부끄러운 이야기 먼저 하나 해야겠다. 나는 지금껏 몇 개의 Node.Js 앱을 만들어왔다. 하지만 그러는 동안 Node.Js를 따로 공부하지 않았다. 한 권의 책도 보지 않았고, 인터넷 강의도 보지 않았다. 어짜피 다 아는 JavaScript 아닌가, 달리 공부해야 할 것도 많은데...
Let me start with an embarrassing confession. Up to now, I’ve built a handful of Node.js apps. But the whole time, I never actually studied Node.js. I never ...
나는 지극히 오만한 인간이다. 때문에 동물에 대한 모든 연구는 결국 인간에 대한 질문으로 귀결된다고 생각한다. 하지만 무엇을 볼 수 있는지는 오로지 어떤 질문을 하느냐에 따라 전적으로 갈린다. 그 결과, 우리 인간은 동물의 세계에 자신의 모습을 비춰볼 수밖에 없다. 이 책이 다루는...
I am an exceedingly arrogant human being. That is why I believe that every study of animals ultimately boils down to a question about humans. But what we are...
실로 야심찬 시도다. 프로그래밍 언어 67개를 다룬다. 하나만 제대로 다루기도 벅찬데, 무려 67개다. 그렇다고 재미로 만들어진 언어 몇을 대충 다루는 것도 아니다. 죄다 어엿한 하나의 언어다. 물론 어디까지나 도감인만큼 깊이 다루지는 않는다. 어떤 컨셉이고, 특징은 무엇이며, 프...
This is truly an ambitious undertaking. It covers 67 programming languages. Doing justice to even one is hard enough, yet here we have a whopping 67. And it’...
글은 빛나야 하고, 이야기는 재미있어야 한다. 설사 그것이 세상에 다시 없을 미친 사랑 이야기라 할지라도 말이다.
The writing must shine, and the story must be interesting. Even if it is a crazy love story like no other in the world.
삶과 허무는 춤추듯 마주본 채 빙글빙글 돈다.
Life and nothingness whirl round and round, facing each other as if in a dance.
삶에 휘말려 어찌할 바를 몰라 전전긍긍 할 때가 있다. 그러고 있자면 이대로 끝인가 싶기도 하다. 하지만 그래도 어떻게든 내일은 오고, 살아진다. 아니, 그저 이 길 외에는 달리 방법이 없다는 것을 잘 알고 있을 뿐이다. 마치 길 건너편으로 이어지지 않은 육교 위를 걷듯이. 우리는...
There are times when you get swept up in life, unsure of what to do, fretting and floundering. When you’re in that state, you sometimes wonder if this is the...
요사이에 읽은 책 중에는 좋은 글들이 많았다. 특히 ‘사피엔스’와 ‘호모 데우스’는 거대 담론을 냉철하게 전개하고 강력하게 주장하여, 읽고 있노라면 넋이 나가기 십상이었다. 좋다. 나는 이런 대담한 글을 좋아한다. 하지만 굳이 따지자면 내가 가장 좋아하는 이야기는 어리석은 사람들의...
Among the books I’ve read recently, there were many fine pieces of writing. In particular, ‘Sapiens’ and ‘Homo Deus’ lay out grand narratives with cold clari...
진심으로 말하건대, 나는 이 에세이를 읽을 준비가 전혀 되어있지 않았다. 나는 방금 막 같은 작가가 쓴 에세이를 읽은 참이었다. 프란츠 카프카가 이룬 문학적 성취의 미묘함에 관하여 열변을 토하는 글이었는데, 솔직히 말하여 내게는 관심 밖이었다. 자연히 제 아무리 ‘이것은 물이다’의...
Honestly, I was not at all prepared to read this essay. I had just finished reading another essay by the same author, an impassioned piece about the subtlety...
단 한 번도 물 속을 떠나보지 않은 물고기가 물에 대하여 헤아릴 수 있을까. 익숙함이란 그런 것이다. 마치 모든 것이 원래 그러했던 것처럼, 당연히 그러해야 하는 것처럼 만든다. 하지만 세상에 당연한 것은 어디에도 없다. 이 괴리가 분노와 환멸을 일으킨다. 그 결과는 황폐함이다. ...
Can a fish that has never once left the water comprehend the water? That is what familiarity is like. It makes everything seem as though it was always this w...
위대한 역사가들의 시대는 끝났다. 사마천은 역사에서 하늘의 도가 어디에 있는지를 물었다. 하지만 사람들은 이제 과학에 천도를 묻는다. 우리가 누구인지, 어떻게 살고 있는지에 대해서라면 경제학자가 역사학자보다 우월하다. 뿐만 아니라 정치외교학 등 수많은 학문이 역사학으로부터 떨어져나...
The age of the great historians is over. Sima Qian asked where the Way of Heaven lay in history. But people now ask science about the Way of Heaven. When it ...
나는 JavaScript가 어렵다. 일단 언어 자체부터 상당히 난해하다. 뿐만 아니라 하루가 멀다하고 새로운 기술이 나온다. 그냥 또 뭔가 나왔는가보다 하고 넘기기에는 너무나 매력적인 기술이라 놓칠 수도 없다. 그러는 사이에 세월은 흘렀고, 어느새 JavaScript는 단지 언어 ...
JavaScript is hard for me. To begin with, the language itself is quite confusing. On top of that, new technologies appear practically every day. They are far...
1. vitest 설정
1. vitest configuration
After Upgrading vue-cli from v3 to v4, you got an error message like below on typing any npm script.
dispatch를 쓰면 된다.
You can use dispatch.
Working code link: CodePen
Vue CLI를 사용하다 보면 이런 에러가 발생할 때가 있다.
While using the Vue CLI, you may run into an error like this.
Vue.js devtools v5 beta가 나왔다. performance, routing 등 여러 추가 기능이 있지만 무엇보다 중요한 것은,
Vue.js devtools v5 beta is out. It comes with several new features such as performance, routing, and more, but what matters most is this:
The Incident
Vue.js에서 lodash의 remove 함수가 제대로 동작하지 않는다. 보다 정확히 말하자면, Vue.js에서 watching 중인 reactive array에서 element를 _.remove(array, fn) 해도, Vue.js는 이를 감지하지 못한다.
In Vue.js, lodash’s remove function doesn’t work properly. To be more precise, when you remove an element from a reactive array that Vue.js is watching with ...
I made a game using Vue.js, vuetify, firebase.
firebase cli로 firebase hosting에 Vue.js로 만든 SPA를 배포하는 순서를 정리해보았다.
Here I’ve put together the steps for deploying a SPA built with Vue.js to firebase hosting using the firebase cli.
UPDATE: 오류 발생 확인(v2.9.1)
UPDATE: Bug confirmed (v2.9.1)
지난 주에 vuetify를 사용하여 서비스를 하나 만들었다. vuetify의 번잡함(?)에 질려(?), 비교적 깔끔해보이는 element-ui를 사용하여 서비스를 만든 후, 후기를 적어보았다.
Last week I built a service using vuetify. Fed up (?) with vuetify’s clutter (?), I then built a service using element-ui, which looks comparatively clean, a...
Vuex is very useful library for Vue.js. However… when handling form like input tag with Vuex, setting up two way binding is somehow complicated and you need ...
고뇌
The Struggle
For Exporting JSON to Excel file, SheetJS is useful. SheetJS is complicated to use, but powerful and well maintained. I tried to use vue-json-excel, but on v...
Vue.js에서 화면을 이동 혹은 변경할 때, 나는 2가지 방법 중 하나를 사용한다.
When navigating between or changing screens in Vue.js, I use one of two approaches.
버스에서 간단히 읽으려고 집어든 책인데, 얇은 두께에도 불구하고 의외로 깊이가 있어 놀랐다. 일단 이 책은 초보자용 책은 아니다. 책 표지에도 초중급 독자를 대상으로 한다고 (작게) 써져있다. Vue.js에 대해 어느 정도 알고 있고, 적어도 실전 프로젝트로 개발을 하고 있는 분들...
I picked this book up to read casually on the bus, but despite its slim thickness it had surprising depth. To begin with, this is not a book for beginners. T...
설문조사 서비스를 만들었다. Vue.js와 SurveyJS를 사용하여 SPA로 만들었다. 소스코드는 여기서 볼 수 있다.
I built a survey service. I built it as an SPA using Vue.js and SurveyJS. You can find the source code here.
무슨 서비스가 되었든 로그인(인증)을 구현하기란 상당히 까다롭다. 요즘에는 좋은 라이브러리나 모듈이 많이 있어 그 고통에서 많이 해방되었지만, 여전히 이런저런 사정상 직접 구현해야 하는 경우도 있다. 이번에는 내가 그런 경우다. 그래서 하나 만들어보았다. 로그인 화면이 수문장처럼 ...
No matter what kind of service it is, implementing login (authentication) is quite tricky. These days there are plenty of good libraries and modules that hav...
Vue.js로 만든 기존 코드를 es6로 바꾸는 작업을 하고 있다. 하다보니 methods를 정의할 때, 화살표 함수를 사용하면 안된다는 사실을 알게됐다. 아래와 같이 정리해 보았다. 이 글로부터 큰 도움을 받았다.
I’ve been working on converting existing Vue.js code to es6. While doing so, I learned that you should not use arrow functions when defining methods. I’ve pu...
나는 글쓰기를 제법 어려워하는데, 모든 글은 재미있어야 한다는 강박관념 때문이다. 물론 재미있는 글을 쓰기란 어렵다. 기술 문서라면 더더욱 그렇다. 하지만 놀랍게도 이 책은 성공했다. 훌륭한 기술 문서이면서도 재미있다. 도대체 무슨 짓을 한걸까?
I find writing rather difficult, because I’m obsessed with the idea that every piece of writing has to be interesting. Of course, writing something interesti...
나는 JavaScript가 어렵다. 일단 언어 자체부터 상당히 난해하다. 뿐만 아니라 하루가 멀다하고 새로운 기술이 나온다. 그냥 또 뭔가 나왔는가보다 하고 넘기기에는 너무나 매력적인 기술이라 놓칠 수도 없다. 그러는 사이에 세월은 흘렀고, 어느새 JavaScript는 단지 언어 ...
JavaScript is hard for me. To begin with, the language itself is quite confusing. On top of that, new technologies appear practically every day. They are far...
webpack 시작 Vue.js 등의 프론트엔드 프레임워크를 사용해서 개발을 시작하면 webpack 사용을 피할 수 없다. webpack에서는 webpack-dev-server를 제공하는데, 개발시에 로컬 웹서버 역할을 해준다. webpack의 설정은 상당히 복잡하지만, 대부분...
Getting Started with webpack Once you start developing with a frontend framework like Vue.js, using webpack becomes unavoidable. webpack provides webpack-dev...
1. ‘Promise’이(가) 정의되지 않았습니다.
1. ‘Promise’ is undefined.
Update! 2019-08-04
Update! 2019-08-04
급박한 프로젝트로 인하여 뜨거워진 머리를 식히기 위해 잡은 책. 하지만 머리는 더욱 뜨거워지고 말았다.
A book I picked up to cool down a head overheated by an urgent project. But my head only got hotter.
간만에 AngularJS로 개발을 할 일이 생겼다. 내가 만든 코드인데도 만든지 4년 가까운 시간이 지나니 AngularJS의 동작에 대하여 기억이 나지 않았다. 그래서 간단히 정리해본다.
After a long while, I had a reason to do some development with AngularJS. Even though it was code I wrote myself, almost 4 years had passed since I made it, ...
After Upgrading vue-cli from v3 to v4, you got an error message like below on typing any npm script.
모달을 띄울 때, 뒤 배경을 흐릿하게 만들면 모달의 가독성이 향상된다. backdrop-filter CSS를 쓰면 이걸 쉽게 만들 수 있다.
When you bring up a modal, blurring the background behind it improves the modal’s readability. With the backdrop-filter CSS property, you can do this easily.
dispatch를 쓰면 된다.
You can use dispatch.
You should get Uncaught TypeError: Cannot read property ~~ of undefined, because you accessed txt property even though there is not middleName property.
Luxon is a small version of Moment. Let’s get it.
Vue CLI를 사용하다 보면 이런 에러가 발생할 때가 있다.
While using the Vue CLI, you may run into an error like this.
AngularJS Material provide useful functions, especailly theme. Configuring theme is not complicated, but searching on google is not easy. So I wrote a simple...
Internet Explorer는 URLSearchParams를 지원하지 않는다. 그래서 URL 쿼리스트링을 다루기가 귀찮아진다.
Internet Explorer doesn’t support URLSearchParams. That makes dealing with URL query strings a hassle.
AngularJS는 DOM 렌더링 완료 후에 콜백 함수를 실행하게 하는 기능이 없다. 직접 만들어줘야 한다.
AngularJS has no built-in feature for running a callback function after the DOM has finished rendering. You have to build it yourself.
나는 iframe을 싫어하지만 이런 저런 이유로 부득불 사용해야만 할 때가 있다. 아래 코드는 iframe에서 부모 frame으로 데이터를 전송하는 방법이다. iframe에서는 postMessage 함수로 메세지(데이터)를 쏴주고, 부모 프레임에서는 iframe에서 전달받을 메시지...
I dislike iframes, but for one reason or another there are times when I have no choice but to use them. The code below shows how to send data from an iframe ...
UPDATE: 오류 발생 확인(v2.9.1)
UPDATE: Bug confirmed (v2.9.1)
지난 주에 vuetify를 사용하여 서비스를 하나 만들었다. vuetify의 번잡함(?)에 질려(?), 비교적 깔끔해보이는 element-ui를 사용하여 서비스를 만든 후, 후기를 적어보았다.
Last week I built a service using vuetify. Fed up (?) with vuetify’s clutter (?), I then built a service using element-ui, which looks comparatively clean, a...
Vuex is very useful library for Vue.js. However… when handling form like input tag with Vuex, setting up two way binding is somehow complicated and you need ...
고뇌
The Struggle
이제는 애증의 물건이 되어버린 AngularJS. Angular-UI-Router를 사용하여 지연 로드(lazy load)를 구현해보았다. 지연 로딩을 위해 ocLazyLoad를 사용했다.
AngularJS, which has by now become a love-hate kind of thing. I tried implementing lazy loading using Angular-UI-Router. For lazy loading, I used ocLazyLoad.
This problem was Fixed version 1.0.20!! (thanks betty!)
Vue CLI 3에서는 webpack 설정 방법이 크게 바뀌었다. Vue CLI 2와는 달리 따로 설정을 하지 않으면 webpack 설정 파일이 만들어지지도 않는다. 하지만 이런 저런 이유로 webpack 설정을 만져줘야 할 때가 있다.
In Vue CLI 3, the way you configure webpack has changed significantly. Unlike Vue CLI 2, a webpack config file isn’t even created unless you set one up yours...
버스에서 간단히 읽으려고 집어든 책인데, 얇은 두께에도 불구하고 의외로 깊이가 있어 놀랐다. 일단 이 책은 초보자용 책은 아니다. 책 표지에도 초중급 독자를 대상으로 한다고 (작게) 써져있다. Vue.js에 대해 어느 정도 알고 있고, 적어도 실전 프로젝트로 개발을 하고 있는 분들...
I picked this book up to read casually on the bus, but despite its slim thickness it had surprising depth. To begin with, this is not a book for beginners. T...
나는 글쓰기를 제법 어려워하는데, 모든 글은 재미있어야 한다는 강박관념 때문이다. 물론 재미있는 글을 쓰기란 어렵다. 기술 문서라면 더더욱 그렇다. 하지만 놀랍게도 이 책은 성공했다. 훌륭한 기술 문서이면서도 재미있다. 도대체 무슨 짓을 한걸까?
I find writing rather difficult, because I’m obsessed with the idea that every piece of writing has to be interesting. Of course, writing something interesti...
나는 JavaScript가 어렵다. 일단 언어 자체부터 상당히 난해하다. 뿐만 아니라 하루가 멀다하고 새로운 기술이 나온다. 그냥 또 뭔가 나왔는가보다 하고 넘기기에는 너무나 매력적인 기술이라 놓칠 수도 없다. 그러는 사이에 세월은 흘렀고, 어느새 JavaScript는 단지 언어 ...
JavaScript is hard for me. To begin with, the language itself is quite confusing. On top of that, new technologies appear practically every day. They are far...
요즘 스위프트로 iOS 앱을 개발하고 있다. 네이티브앱은 아니고 웹뷰로 이미 개발되어 있는 웹페이지를 띄워주는 앱인데, 열심히 개발하고 있자니 난데없이 화면이 하얗게 침묵했다. 불과 몇 초 전까지만 해도 잘 돌아가던 기능이다.
These days I’m developing an iOS app with Swift. It’s not a native app but one that loads an already-built web page in a web view, and as I was busily workin...
가치의 전복이라는 현실 앞에서 개인과 사회는 어떤 선택을 해야 하는가. 끔찍할 정도로 자극적이면서도 좋은 소재다. 연작의 시작이라니, 앞으로 어떤 갈등과 모순을 짚어줄지 몹시 기대된다. 하지만 서사로 자연스럽게 풀어도 충분했을 설정을 굳이 1인칭 화자의 입을 빌려 길게 설명할 필요...
Faced with a reality where values are overturned, what choices should the individual and society make? It is a horrifyingly provocative yet excellent premise...
이 소설의 등장 인물들은 자꾸만 눈이 먼다. 안개와 구름에 눈이 멀고, 화염과 연기에 눈이 멀고, 원한과 복수에 눈이 멀고, 세월과 시간에 눈이 먼다. 그 외 명예, 호승심, 탐욕 등 사람의 눈을 가리는 장막은 이루 셀 수 없다. 그 중 가장 아름다운 장막은 단연 사랑이니, 정이란...
The characters in this novel keep going blind. They are blinded by mist and clouds, blinded by flames and smoke, blinded by grudges and revenge, blinded by t...
나는 예전부터 늘상 소설이 재미있으려면 사람을 죽이고 시작해야 한다고 했다. 주인공의 개성 부족에도 불구하고 끊임없이 터져나오는 긴급 상황이 몰입감을 이끌어낸다.
I’ve always said that for a novel to be entertaining, it has to start by killing someone. Despite the protagonist’s lack of personality, the relentless strea...
현실은 항상 저 멀리 흐릿하게 보인다. 하지만 당위는 내 바로 곁에 있다. 양자의 간극을 좁히기란 어렵다. 어디에 머물러야 하는가. 어디로 나아가야 하는가. 추한 간극 속에 선택은 늘 고통스럽다. 고뇌하는 칼끝은 흔들린다. 오로지 마음을 다잡을 뿐이다.
Reality always appears far away, hazy in the distance. But what ought to be stands right beside me. Closing the gap between the two is hard. Where should I r...
나는 도심 한가운데 살고 있지만, 그럼에도 인간 외의 생물을 관찰하기를 좋아한다. 무엇에도 구속 받지 않는듯 보이면서도 최대한의 효율을 추구하는 그들의 삶에서 어떠한 영감을 얻지 않을까 하는 기대감 때문이다. 때문에 그들의 발자국과 자취 하나 하나에 담긴 의도와 사연에 대한 깨달음...
I live in the heart of the city, yet I still love to observe living things other than humans. It’s because I hold out hope that I might draw some kind of ins...
톨스토이는 모든 종류의 작위를 거부한다. 그를 가리켜 무정부주의자라고 보는 견해는 지나치게 온건하다. 그를 어떻게 바라보아야 할까? 그의 책을 더 많이 읽고 싶다.
Tolstoy rejects every kind of title and rank. To call him an anarchist is far too mild a view. How should we regard him? I want to read more of his books.
급류는 운명이다. 피할 수 없는, 그저 받아들일 수 밖에 없는 그 무엇이다. 누군가는 좌절하고, 혹은 극복하려 하고, 혹은 증오하지만, 결국에는 모두 씻겨 내려간다.
A torrent is fate. It is something inevitable, something you can only accept. Some despair, some try to overcome it, some hate it, but in the end everyone is...
1.부모님
“나는 누구인가?”
“Who am I?”
‘육체는 단명하나 근성은 영원한 것’. 김성모 만화가 근 30년간 내세우던 주제 의식이다. 김성모는 이 강렬한 메세지를 쉼없이 남발한다. 전달의 과잉이다. 덕분에 어떠한 역경에도 굴하지 않는 불굴의 정신이 가지는 숭고함은 일종의 쌈마이한 허세로 전락하는 수모를 겪는다.
”The flesh is short-lived, but grit is eternal.” This has been the central message that cartoonist Kim Seong-mo has championed for nearly 30 years. Kim Seon...
나는 문학이 주는 공감과 위안의 힘을 믿지 않는다. 상처입은 가슴이 귀를 통해 치유를 받았다는 말을 나는 들어본 적이 없다. 하지만 가만히 이런 생각을 해본다. ‘나도 분명 높은 이상과 꿈, 그리고 의지를 가지고 있던 시절이 있었지. 그때는 어느 누구도, 어떤 시련도 나를 막을 수...
I don’t believe in the power of empathy and consolation that literature is supposed to offer. I’ve never once heard of a wounded heart being healed through t...
기억을 더듬다보면 도무지 알 수 없는 이유로 뚜렷이 남아있는 몇몇 장면들이 있다. 시간이 멀어질수록, 기억을 떠올릴수록, 장면은 꿈결같아 정말로 있었던 일인지, 어쩌면 나의 상상일 뿐이었는지 분간하기 어려워진다. 그 진실이야 아무래도 좋다. 좋았던 기억일수록, 우연히 과거의 그 장...
When I trace back through my memories, there are a few scenes that remain vivid for reasons I can’t quite explain. As time grows more distant, and the more I...
2019년에 이 소설을 읽는 나로서는 여러 설정과 전개가 작위적이라는 느낌이 들었다. 도대체 작중 인물들이 내린 선택과 행동에 무슨 실익이 있는가? 하지만 1998년 작품임을 알게 되어 다소 납득했다. 불과 20년만에 세상은 이렇게나 바뀐 것이다. 도무지 왜 저렇게 살았는지 이해하...
Reading this novel in 2019, I couldn’t help feeling that many of its premises and plot developments were contrived. What real benefit was there in the choice...
이 소설의 주인공은 극히 혐오스러운 인간이다. 범죄자이며, 허세꾼이며, 여혐 종자이면서도, 색을 밝히는, 한 마디로 인간 막장이라 할 수 있다. 하지만 운 좋게도 돈은 제법 많은지라 온갖 난잡한 모험을 벌이고 다니는데, 사건이 전개될수록 이놈이 어떻게 인생을 조지게 될지 기대감이 ...
The protagonist of this novel is a thoroughly repulsive human being. He’s a criminal, a braggart, a misogynist, and a lecher—in a word, the dregs of humanity...
환경 Vue 2.7 <script setup> 문법 사용
Environment Vue 2.7 Using the <script setup> syntax
환경 Vue 2.7 <script setup> 문법 사용
Environment Vue 2.7 Using the <script setup> syntax
Environment
처음 Vuetify를 Add하고 프로젝트를 빌드하면 warning이 많이 뜬다.
When you first add Vuetify and build the project, you’ll see many warning messages.
Environment
누군가에게 설명해주려는데 갑자기 기억이 나지 않아서 당황했다. 그래서 정리를 해보았다.
I was about to explain this to someone, but suddenly my mind went blank and I got flustered. So I decided to write it down.
It is working code on my blog
Login with Email and password
Where is Uploader component?
Vue CLI 3에서는 webpack 설정 방법이 크게 바뀌었다. Vue CLI 2와는 달리 따로 설정을 하지 않으면 webpack 설정 파일이 만들어지지도 않는다. 하지만 이런 저런 이유로 webpack 설정을 만져줘야 할 때가 있다.
In Vue CLI 3, the way you configure webpack has changed significantly. Unlike Vue CLI 2, a webpack config file isn’t even created unless you set one up yours...
I wrote codes get EXIF data of image using Vue.js for liks79 who is my dear friend.
지금껏 Vue CLI 2를 사용하고 있었는데, 오늘에야 드디어 Vue CLI 3를 설치했다. 처음에는 webpack 설정 파일을 찾을 수 없어 이게 뭔 똥인가 싶었는데, 이걸 보고 깜짝 놀랐다.
I had been using Vue CLI 2 all this time, but today I finally installed Vue CLI 3. At first I couldn’t find the webpack configuration file and wondered what ...
xargs는 리눅스에서 파이프라인 이전 단계를 standard input으로 하여 다음 명령을 실행하는 기능을 한다.
On Linux, xargs takes the output of the previous stage in a pipeline as standard input and uses it to run the next command.
AWS S3에 예전 배포 파일들이 쌓여있으면 관리하기 어렵다. 배포를 자주 할 수록 더욱 그렇다. 그러니 파일 변경일을 기준으로 30일 이상 지난 파일을 삭제해보자.
When old deployment files pile up in AWS S3, they become hard to manage. The more frequently you deploy, the worse it gets. So let’s delete files that are 30...
‘*/’ 로 설정해야 하위 디렉토리의 파일까지 재귀적으로 artifact에 포함된다. AWS 문서에도 나와 있기는 한데… 다소 애매하게 설명하고 있어서 놓치기 쉽다.
You need to set it to ‘*/’ so that files in subdirectories are recursively included in the artifact. It is mentioned in the AWS docs too… but it’s explained ...
CloudFront(이하 CF)에서 error page redirection은 1회의 request에서 1회만 가능하다. 2회 이상 동작하지 않는다. 예를 들어보자.
In CloudFront (hereafter CF), error page redirection can only happen once per request. It does not run more than once. Let’s look at an example.
build artifact는 codeBuild가 build를 마친 후, 그 결과물을 저장한 파일. 나중에 auto scaling 할 때 쓰인다 source artifact는 codeBuild가 build를 하기 위해 소스코드를 가져온 파일
A build artifact is the file that stores the result after CodeBuild finishes a build. It is used later during auto scaling. A source artifact is the file con...
CloudFront(이하 CF)에 HTTP request를 보낼 때, 존재하지 않는 method(HTTP Verb)로 보내면 어떻게 될까?
What happens when you send an HTTP request to CloudFront (hereafter CF) with a nonexistent method (HTTP Verb)?
CloudFront의 Custom Error Page은 오로지 redirection을 할 뿐이지, 어떠한 side effect도 없다. AWS 엔지니어에게 확인받음. 그러니 response header에 x-cache: error from cloudfront 가 떠도 의도한 바라면...
CloudFront’s Custom Error Page only performs a redirection and has no side effects whatsoever. Confirmed by an AWS engineer. So even if x-cache: error from c...
CORS header 설정도 캐싱한다
CORS header settings are cached too
현상 CloudFront -> S3로 index.html 파일을 요청했는데 이런 오류가 발생
The Symptom I requested the index.html file via CloudFront -> S3, but got this error:
update: 20210811
update: 20210811
11키티즈 게임에서 XState를 선택한 이유
Why We Chose XState for the 11Kitties Game
Vite는 여러 .env 파일들을 순서대로 로드하여 환경 변수를 설정합니다. 로드 순서와 우선순위를 아래와 같이 이해할 수 있습니다.
Vite loads several .env files in order to set up environment variables. You can understand the load order and precedence as follows.
하위 호환성은 늘 고민스러운 문제다. 웹뷰에서도 그렇다. JS의 새 버전이 나오면서 웹뷰가 JS의 신기능을 지원하지 않는 경우가 발생했다. iOS와 Android의 버전이 올라가면서 이 문제는 해결되었지만, 세상에는 여전히 구형 기기를 사용하는 사람들이 많다. 이 분들은 이상하게도...
Backward compatibility is always a thorny issue, and WebViews are no exception. As new versions of JS were released, situations arose where WebViews didn’t s...
4/1 오픈 이후 대략 1달이 지났다. 서비스는 안정화 되었고 추가 개발 건도 착실히 진행 중이다. 이제 회고를 해도 좋은 때가 되었다. 프로젝트의 진행 단계별로 회고를 진행하고자 한다.
About a month has passed since the launch on April 1. The service has stabilized, and additional development is steadily underway. Now is a good time for a r...
40일의 개발 기간을 거쳐 11 키티즈를 런칭했다.
After 40 days of development, I launched 11 Kitties.
Environment iOS Safari
scrollTop의 값을 수정하면, onscroll event가 발생한다
Changing the value of scrollTop fires an onscroll event
iOS는 스크롤 파워가 강할 때 bounce scroll effect를 낸다. 보기 좋은 UX지만, scrollTop을 기준으로 event를 발생시키려면 문제가 발생한다.
iOS produces a bounce scroll effect when the scroll has strong momentum. It is a pleasant UX, but it causes problems when you want to trigger events based on...
safari에서 scroll event를 다루다보면 괴상한 동작을 발견한다. scrollable container 최상단이 고무줄처럼 튕기는 UI인데, 이를 iOS의 native-style scrolling이라고 한다(출처: https://developer.apple.com/lib...
When you work with scroll events in Safari, you run into a strange behavior. It’s a UI where the top of a scrollable container bounces like a rubber band, an...
이거 정말 좋은건데 모르시는 분들이 있어 안타까움에 올린다.
This is a really great feature, and it’s a shame that some people don’t know about it, so I’m sharing it.
TL;DR 가상 슬라이드(Virtual Slides)를 켠 Swiper.js + React 프로젝트에서 prepend로 아이템을 추가하면서도 사용자가 보고 있던 슬라이드를 유지하는 방법은 Zustand에 “현재 슬라이드 전역 인덱스”를 저장하고, 리...
TL;DR In a Swiper.js + React project with Virtual Slides enabled, the way to prepend items while keeping the slide the user is currently viewing is: ...
exhaustive-deps 경고의 기술적 배경
useRef 와 useEffect 의 의존성 진단
exhaustive-deps Warning That Only Appears in React Custom Hooks
Diagnosing dependencies for useRef and useEffect
숫자를 목표치까지 빠르게 변경시키는 커스텀 훅을 만들어보았다.
I built a custom hook that quickly changes a number until it reaches a target value.
React에서 object를 useState로 관리한다면, setState를 할 때 반드시 새로 object를 만들어서 넣어라.
If you manage an object with useState in React, always create a brand-new object and pass it in when you call setState.
React 개발하다가 생각난 거. Object destructing으로 받아온 string값이 useEffect의 dependency로 들어있을 경우, object는 바뀌되 그 안의 string property의 값은 변경되지 않으면, useEffect는 동작할까? 검증을 위해 몇...
Something that came to mind while working on React. When a string value obtained through object destructuring is in a useEffect’s dependency, if the object c...
iframe.contentWindow.postMessage(msg, '*');
iframe.contentWindow.postMessage(msg, '*');
create-react-app으로 react 개발을 하다가, webpack 설정이 궁금해서 npm run eject를 해봤다. 설정을 훑어보고 git checkout -f 로 원복했는데… 다시는 npm run eject를 할 수 없었다.
While doing React development with create-react-app, I was curious about the webpack configuration, so I tried running npm run eject. I looked over the confi...
흔히들 React를 사용하고 싶으면 공식 문서를 보라고 한다. 하지만 그것만으로 정말 충분한가? React를 사용할 때마다 당황스러운 일이 한두 번이 아니다. 그럴 때마다 나는 고통스럽게도 codesandbox를 열고… 하나하나 테스트를 해본다. 내가 아는 게 정말로 맞는지, 내가...
People often say that if you want to use React, you should just read the official documentation. But is that really enough? Every time I use React, I run int...
display: block -> display: none이 된 component는
A component that goes from display: block -> display: none
로컬 브랜치 일괄 삭제
Bulk-deleting local branches
Which files have been deleted or modified? Use git diff --diff-filter=[(A|C|D|M|R|T|U|X|B)…[*]]
When using GitLab-CI, it is needed that finding changed or new files, and then copy & paste the files to server sometimes. The job is pretty simple.
커밋을 비교하여 변경된 파일의 목록을 뽑아보자
Let’s compare commits and pull out the list of files that changed.
나는 게으른 사람이다. 그리고 뭔가를 백업하는건 아주 귀찮은 일이다. 소스코드는 그나마 낫다. 개발하고 수정할 때마다 git remote 서버로 push하면 된다. 하지만 작업용 및 관리용으로 들고 있는 work 폴더를 백업하는건 너무나도 귀찮은 일이다. 그러니 자동화하기로 했다....
I am a lazy person. And backing something up is a really tedious chore. Source code isn’t so bad. Whenever I work on and modify it, I can just push it to a g...
git에서 파일의 변경 이력을 확인하는 방법은 간단하다. file_path에는 확인하고픈 파일의 경로를 넣어준다.
Checking a file’s change history in git is simple. Put the path of the file you want to check in file_path.
저 유명한 소설, ‘변신’이 월급쟁이의 이야기였다니.
To think that this famous novel, ‘The Metamorphosis’, was the story of a salaried worker.
알고리즘 공부라 하면 아마도 모든 개발자들의 한결같은 새해 목표일 것이다. 물론 대부분의 새해 목표가 그렇듯이 곧 잊혀진다. 나도 알고리즘 공부를 몇 년째 새해 목표 중 하나로 잡아두었는지 모른다. 끔찍한 일이다. 그래도 요즘은 알고리즘 공부하기에 좋은 책이 많다. 이 책, ‘누구...
Studying algorithms is probably the kind of New Year’s resolution that every developer shares. And of course, like most New Year’s resolutions, it soon gets ...
나는
버스에서 간단히 읽으려고 집어든 책인데, 얇은 두께에도 불구하고 의외로 깊이가 있어 놀랐다. 일단 이 책은 초보자용 책은 아니다. 책 표지에도 초중급 독자를 대상으로 한다고 (작게) 써져있다. Vue.js에 대해 어느 정도 알고 있고, 적어도 실전 프로젝트로 개발을 하고 있는 분들...
I picked this book up to read casually on the bus, but despite its slim thickness it had surprising depth. To begin with, this is not a book for beginners. T...
요즘 종일 Vue.js만 보고 있었더니, 함께 일하는 나이 지긋한(?) 개발자께서 이런 말을 하신다.
I had been staring at nothing but Vue.js all day long, when a seasoned (?) developer I work with said this to me:
나는 글쓰기를 제법 어려워하는데, 모든 글은 재미있어야 한다는 강박관념 때문이다. 물론 재미있는 글을 쓰기란 어렵다. 기술 문서라면 더더욱 그렇다. 하지만 놀랍게도 이 책은 성공했다. 훌륭한 기술 문서이면서도 재미있다. 도대체 무슨 짓을 한걸까?
I find writing rather difficult, because I’m obsessed with the idea that every piece of writing has to be interesting. Of course, writing something interesti...
나는 JavaScript가 어렵다. 일단 언어 자체부터 상당히 난해하다. 뿐만 아니라 하루가 멀다하고 새로운 기술이 나온다. 그냥 또 뭔가 나왔는가보다 하고 넘기기에는 너무나 매력적인 기술이라 놓칠 수도 없다. 그러는 사이에 세월은 흘렀고, 어느새 JavaScript는 단지 언어 ...
JavaScript is hard for me. To begin with, the language itself is quite confusing. On top of that, new technologies appear practically every day. They are far...
Node 25에서 vitest 4와 js-dom 6.9.1 연결하는 삽질기
A Trial-and-Error Tale of Wiring vitest 4 with js-dom 6.9.1 on Node 25
@vitejs/plugin-legacy 정리
A Summary of @vitejs/plugin-legacy
라우트-단위 코드 스플리팅 — React Data Router v7 + Vite 조합으로 “진짜” Lazy Route 만들기
Route-Level Code Splitting — Building “Real” Lazy Routes with React Data Router v7 + Vite
Vite는 여러 .env 파일들을 순서대로 로드하여 환경 변수를 설정합니다. 로드 순서와 우선순위를 아래와 같이 이해할 수 있습니다.
Vite loads several .env files in order to set up environment variables. You can understand the load order and precedence as follows.
환경 vite v3.6.0 bun v1.0.26
Environment vite v3.6.0 bun v1.0.26
Starting with Vite v5, the setting for HTTPS option has changed.
설치 macos: brew installl scrcpy 안드로이드 기기 연결 usb로 mac과 안드로이드 기기 연결 안드로이드 기기에서 usb 디버깅 On 정상 연결 확인: adb devices ...
Installation macos: brew installl scrcpy Connect the Android device Connect the Mac and the Android device via USB T...
Google Playstore에서 메일을 받았다. 1달 내로 조치가 없다면 내가 만든 앱을 Playstore에서 내려버리겠다고… 오랫동안 방치해둔 앱이기에 관리자 콘솔을 들어가보니, 구글에서는 이미 오래 전부터 관련 내용을 경고하고 있었다.
I received an email from the Google Play Store. It said that if I didn’t take action within a month, they would pull the app I’d made from the Play Store… Si...
When your Android App’s minSdkVersion is prior to 21(using dalvik), and your app and the libraries it references exceed 65,536 methods, Android studio debugg...
Android studio에서 앱을 build하려고 하는데, 이런 오류가 발생했다.
I was trying to build an app in Android Studio when this error popped up.
Let’s launch a custom error page when the network is down in the Android WebView App.
Android Honeycomb부터는 Main Thread에서 네트워킹 처리를 하면 안된다. 이를 어겼다가는 이런 에러가 뜬다!
Starting from Android Honeycomb, you must not do networking on the Main Thread. Break this rule and you’ll get an error like this!
회사에서 운영하는 서비스 중 안드로이드 앱이 있는데, 이 앱에서는 아직도 GCM으로 push messege를 보내고 있다. 하지만 더이상 그럴 수 없는 상황이 되었다.
One of the services my company operates is an Android app, and this app still sends push messages via GCM. But it has gotten to the point where we can no lon...
Background and the Problem
모노레포에서 패키지마다 Path Alias를 두는 가장 안전한 방법
The Safest Way to Set Up a Path Alias per Package in a Monorepo
환경 typescript v5.8.3 yarn workspace
Environment typescript v5.8.3 yarn workspace
Intersection Types를 쓰면 된다.
You can use Intersection Types.
typescript에서 object의 모든 key값을 기준으로 무언가 작업(object 비교)를 할 때, type 때문에 골치아파진다. object의 type은 정해져 있는데, Object.keys() api를 사용하면 key가 string type으로 뽑혀 나온다. string ...
In typescript, when you want to do something (like comparing objects) based on all of an object’s keys, the type becomes a headache. The object’s type is fix...
상당히 어려운 책이었다. 나의 타입스크립트 활용 수준은 변수, 인수, 함수에 주석 다는 정도에 불과했다. 하지만 이 책에서는 그런 건 너무나 초보적인 활용 수준이라 본다. 대신 타입으로 프로그래밍을 한다. 처음에는 타입으로 별 걸 다 한다고 생각했지만 보면 볼수록 정교하고 우아하다...
This was quite a difficult book. My level of using TypeScript amounted to little more than annotating variables, arguments, and functions. But this book trea...
Environment
next.js 14의 공식 문서대로 하면 Jest를 설치가 안 된다. 그래서 방법을 정리해 보았다.
If you follow the official Next.js 14 documentation, Jest won’t install. So I put together a working approach.
next.js에서 dynamic import 함부로 하지 마라. 컴포넌트 내부에서 선언하면, 그 컴포넌트를 리렌더링 할 때마다 dynamic import 한 컴포넌트를 새로 그린다.
Don’t use dynamic import carelessly in next.js. If you declare it inside a component, the dynamically imported component gets re-rendered from scratch every ...
Next.js v14.2.16 기준이다.
This is based on Next.js v14.2.16.
Next.js의 패러렐 라우트 기능을 사용하면 modal UI를 간편하게 구현할 수 있다고 한다. 하지만 14.2.16 버전에서 확인해보니 정상 동작하지 않는다. 패러렐 라우트가 정상 동작하는 앱의 소스 코드를 github에서 확인해보니 next.js 15 버전이다.
They say that using Next.js’s parallel routes feature lets you easily implement a modal UI. But when I tried it on version 14.2.16, it didn’t work properly. ...
Next.js의 dynamic route 기능을 사용하면 간단하게 API proxy server를 만들 수 있다. 좋은 기능이지만 proxy server에서 오류를 response 하는 방법이 조금 기묘하다.
Using Next.js’s dynamic route feature, you can easily build an API proxy server. It’s a nice feature, but the way you respond with errors from a proxy server...
Vue.js로 만든 웹앱을 Firebase에 호스팅하면 당황스러운 상황에 처하게 된다. 분명히 Firebase에서 알려준 내 웹앱의 URL에 접속했는데, 화면에 아무 것도 안뜬다!
When you host a web app built with Vue.js on Firebase, you can run into a baffling situation. You access the URL that Firebase clearly told you was your web ...
It is working code on my blog
Login with Email and password
Where is Uploader component?
Rotate images by EXIF orientation infomation
I made a game using Vue.js, vuetify, firebase.
firebase cli로 firebase hosting에 Vue.js로 만든 SPA를 배포하는 순서를 정리해보았다.
Here I’ve put together the steps for deploying a SPA built with Vue.js to firebase hosting using the firebase cli.
[Troubleshooting] Chrome DevTools MCP: “Network.enable timed out” 해결기
[Troubleshooting] Chrome DevTools MCP: Fixing “Network.enable timed out”
날치인 비루는 세상에서 가장 높고 멀리 나는 날치였다. 태어났을 때부터 지느러미가 유달리 넓고 탄탄했으며, 다른 날치들이 꿈도 꾸지 못할 만큼 하늘 위로 솟구쳐 오를 수 있었다. 비루가 처음 수면 위로 뛰어올랐던 날, 그의 어머니는 걱정스럽게 말했다.
Biru the flying fish flew higher and farther than any other flying fish in the world. From the day he was born, his fins were unusually broad and firm, and h...
노예와 자유인의 차이는 단 한 문장으로 요약할 수 있다. 노예는 질문할 수 없다.
The difference between a slave and a free person can be summed up in a single sentence. Slaves can’t ask questions.
이하 질문은 나, 답변은 Google Bard
The questions below are mine, and the answers are from Google Bard
생각이란 무엇일까? 단비.ai 프로젝트를 할 때부터 든 생각이다. 단비.ai 프로젝트의 목표가 ‘챗봇을 만드는 플랫폼’이었기 때문이다. 대화하는 인공지능, 챗봇이야말로 우리가 생각하는 인공지능의 가장 전형적인 모습 아니겠는가? 그렇다면 이야기를 진척하기 앞서 챗봇이 어떻게 동작하는...
What is thinking? This is something I have been pondering ever since the Danbee.ai project. The goal of the Danbee.ai project was to build “a platform for ma...
S3의 lastModified는 사용자가 변경할 수 없다. 이것은 S3의 사용 제한 사항이다(기능이다).
S3’s lastModified cannot be changed by the user. This is a usage restriction of S3 (it’s a feature).
AWS EC2에 Apache HTTP Server를 올려 frontend를 서빙하고, CI/CD는 AWS CodePipeLine을 사용하고 있었다. 문제는 배포할 때마다 CodeDeploy의 BlockTraffic 단계에서 너무 많은 시간이 걸려 답답했다. 배포 시간을 조금이나마 ...
I was running Apache HTTP Server on AWS EC2 to serve a frontend, and using AWS CodePipeline for CI/CD. The problem was that every time I deployed, the BlockT...
AWS 입문서. ‘당신이 지금 알아야 할 AWS’를 읽고 난 후, 보다 심화된 내용을 알고 싶어 읽은 책이다. 장단점을 정리해보았다.
An introductory AWS book. After reading “The AWS You Need to Know Now,” I wanted to learn more advanced material, which is why I picked up this book. Here ar...
어플리케이션 개발자의 입장에서 볼 때 AWS를 익히기란 쉽지 않다. 물론 온프레미스 환경보다는 쉽다. 아무튼 내가 바닥을 뜯고 전선을 깔 필요는 없으니까. 그럼에도 불구하고 AWS를 배우는 데에는 다음과 같은 난점이 존재한다.
From an application developer’s point of view, learning AWS isn’t easy. Of course, it’s easier than dealing with an on-premises environment. After all, I don...
AWS의 서버리스 웹 애플리케이션 구축 튜토리얼을 따라하고 있다. AWS를 내가 직접 만지는건 3년만이다. 그간 모르긴 몰라도 많이 바뀌었다. aws cli조차도 구성하기 힘들었다. 튜토리얼을 따라하기 위하여 aws cli로 S3를 만질 수 있도록 설정하는 과정을 정리해보았다.
I’m following AWS’s Build a Serverless Web Application tutorial. It’s been three years since I last touched AWS hands-on. In the meantime, it has no doubt ch...
평소 구인 공고에서의 지원’ 자격 중, HTTP 프로토콜에 대한 이해’라는 항목이 무엇을 의미하는지 궁금했다. 벌써 십 수 년 동안 HTTP를 사용해서 개발을 하고 있는데, 또 뭘 더 알아야 한단 말인가? 이런 오만한 생각 때문에 이 책을 사두고도 완독까지 3년에 가까운 시간이 걸...
I had always wondered what the “understanding of the HTTP protocol” item, listed among the qualifications in job postings, actually meant. I’ve been developi...
sign-in
Content Security Policy(CSP) 정리
Content Security Policy (CSP) Notes
HTTP/2를 꼭 사용해야만 하는지 의문을 제기하는 사람이 있어 chrome lighthouse로 성능을 비교해보았다. 동일한 웹앱(Vue.js를 사용해 개발한 SPA)을 대상으로 측정했다.
Someone raised the question of whether we really have to use HTTP/2, so I compared the performance with Chrome Lighthouse. I ran the measurements against the...
0. The problem
클린 애자일 1장 애자일 소개
Clean Agile Chapter 1: Introduction to Agile
아래 링크는 markdown에서 syntax highlighting을 지원하는 language list다.
The link below is the list of languages supported for syntax highlighting in markdown.
Vue.js에서 화면을 이동 혹은 변경할 때, 나는 2가지 방법 중 하나를 사용한다.
When navigating between or changing screens in Vue.js, I use one of two approaches.
tl;dr: npm audit fix로 취약점을 해결하자
tl;dr: Let’s fix vulnerabilities with npm audit fix
tl:dr: xcopy의 /exclude: 옵션에 제외할 목록을 기술한 txt 파일을 넣으면 여러 파일과 디렉토리를 제외하고 복사할 수 있다.
tl;dr: If you pass a txt file listing the items to exclude to the /exclude: option of xcopy, you can copy while excluding multiple files and directories.
0. 클라우드 난민
0. Cloud Refugee
It works on my Node.js project.
Updated! For new IBM Cloud on 2019.06.24.
virtual box 설치
Install VirtualBox
몇 일 전 [IBM Cloud]의 홍보 글을 올린 후, 몇 가지 업데이트 해야할 사항들이 있어 따로 글을 작성한다.
A few days ago, after publishing my promo post about [IBM Cloud], I found a few things I needed to update, so I’m writing a separate post.
IBM Cloud는 참 좋은 서비스인데, 쓰는 사람을 못 봤다. 기껏해야 IBM 소속 개발자 정도. 안타까운 마음에 돈 안 받고 홍보글을 쓴다. IBM Cloud의 장점은 다음과 같다.
IBM Cloud is a really great service, yet I’ve never seen anyone use it. At most, maybe some developers who work at IBM. Feeling that it’s a shame, I’m writin...
html parser가 inline style을 만나면 CSSOM을 만들기 위해 parser 동작을 일시 중지할까? cssom은 javascript가 css style을 조작하기 위한 모델이다 cssom은 외부 css를 받아오든, style tag를 만나든, inline styl...
When the HTML parser encounters an inline style, does it pause the parser to build the CSSOM? The CSSOM is the model JavaScript uses to manipulate CSS styles...
display: block -> display: none이 된 component는
A component that goes from display: block -> display: none
CSS property z-index는 parent를 공유하는 element끼리만 영향을 미친다. 다른 parent의 element와는 무관하다. 그 이유는 stacking order 때문이다. stacking context는 하나의 element당 1개 생성되고, stackin...
The CSS property z-index only affects elements that share the same parent. It has nothing to do with elements that have a different parent. The reason for th...
요약 flex-direction: column-reverse 일 때 scrollTop의 기준은 scroll 최하단이다 scrollTop은 -n ~ 0의 값을 가진다 scroll-bar가 ...
Summary When flex-direction: column-reverse The reference point for scrollTop is the very bottom of the scroll scr...
Galaxy S21 WebView 동영상 녹색 화면 이슈 디버깅 및 해결
Debugging and Fixing the Galaxy S21 WebView Video Green Screen Issue
The Incident
Android에서 WebView로 앱을 개발하다보면 Back 버튼과 Forward 버튼이 신경쓰인다. 이 버튼들을 눌렀을 때 도달할 URL이 민감한(?) 화면일 수 있기 때문. 그래서 URL을 확인할 수 있는 방법을 정리해보았다.
When developing an app with a WebView on Android, the Back and Forward buttons can be a concern. When you press these buttons, the URL they navigate to might...
FCM’s device token is same with GCM’s device token because FCM includes GCM. But FCM’s token has more information than GCM’s. So if you want to convert FCM’s...
시작 저 자신에게 자극을 주기 위해 뭐라도 해보자고 시작한 일기입니다. 그럼 시작!
The Beginning This is a diary I started in an attempt to do something, anything, to motivate myself. So, here we go!
GC는 복잡하고, 크로미움 업데이트 할 때마다 계속 바뀐다. GC는 대부분 증분적으로, 일부는 동시에. 일부는 병렬적으로 한다. 그리고 할당량(?)과 유휴 시간에 결정(?)된다 The summary is that most of the GC work is d...
GC is complex, and it keeps changing every time Chromium is updated. GC is mostly done incrementally, some of it concurrently, and some of it in parallel....
HTML5 spec From the moment that the user agent is to initiate the drag-and-drop operation, until the end of the drag-and-drop operation, device input events ...
현상 오류 대상: scrollable container 현상 상세 dragging 중에는 scrollable container에서 mouse wheel event 동작하지 않음 scrollabl...
Symptom Affected target: scrollable container Symptom details While dragging, the mouse wheel event does not work in t...
현상 오류 대상: drag ghost image 현상 상세 ghost image의 크기가 drag target에 한정되지 않음 ghost image가 scroll이 하단으로 내려간 만큼의 크기의 scroll...
Symptom Affected element: drag ghost image Symptom details The size of the ghost image is not limited to the drag target ...
데이비드 스타 조던과 저자에 대하여 아무런 사전 지식 없이 읽기 시작했다. 이 기묘한 인간 군상 둘은 도대체 어찌 되는 것인가. 그리고 마지막 몇 페이지에 도달하기 전, 크게 탄식했다. 포스트모더니즘의 망령은 아직도 남아 있는가. 하지만 다행스럽게도 남은 몇 페이지 덕분에 나의 의...
I started reading without any prior knowledge of David Starr Jordan or the author. What on earth was going on with these two strange specimens of humanity? A...
나는 글 읽기를 좋아한다. 그리고 제법 많이 읽는 축에 속한다고 자부한다. 아무튼 늘 무언가를 읽고 있으니까. 하지만 그 주제는 대개 정해져 있다. 경제, 역사, 과학이 대부분이고, 문학류는 거의 읽지 않는다. 수필은 말할 필요도 없다. 요컨대 실용적인 글만 찾아본다는거다. 자연히...
I love to read. And I pride myself on being among those who read a fair amount. After all, I’m always reading something. But the topics are mostly fixed. Eco...
글을 읽다보면 가끔씩 그 필력에 사로잡힐 때가 있다. 장절함이든 속도감이든, 무엇이든 좋다. 문장이 뿜어내는 힘을 타고 정신없이 책을 넘기다보면 어느새 책장의 끝이 보이는 순간이 오는데, 그러면 문득 아쉬워하며 나도 이런 글을 써보고 싶은 것이다. 아사이 료의 ‘시간을 달리는 여유...
When reading, there are moments when you find yourself captivated by the sheer power of the writing. Whether it’s the grandeur or the sense of momentum, anyt...
물리학자이자 시인이었던 메이지-다이쇼 시대 일본인의 수필집. 담담하게 자연과 사물과 인간을 관찰하며 묘사한다. 수필에서 흔히 볼법한 감정의 과잉은 없다. 그렇기에 괜한 방해없이 그의 눈에 비치는 광경을 바로 눈 앞에서 보는 듯 빠져든다. 그렇다고 결코 무미無味하지는 않다. 그의 글...
An essay collection by a Japanese physicist and poet of the Meiji-Taisho era. He observes and describes nature, objects, and people with a calm, even-tempere...
설정 방법 반드시 configure 아래에 output을 넣어야 한다. module.exports = { configure: { output: { filename: `[name].[hash].js`, ...
How to configure You must place output under configure. module.exports = { configure: { output: { filename: `[name]...
다른 프로젝트에서 번들링 한 output 파일을 react 등 다른 frontend framework에서 가져다 쓸 수 있을까? 물론 이런 걸 하기 위해 모듈화를 하는 거지만, 간혹 레거시와 함께 해야 할 필요가 있을 때가 있다. craco를 쓰면 간단하다.
Can you take an output file bundled in another project and use it in a different frontend framework such as React? Of course, the whole point of modularizati...
이 글은 webpack 4.11.1 버전을 기준으로 합니다.
This post is based on webpack version 4.11.1.
webpack 시작 Vue.js 등의 프론트엔드 프레임워크를 사용해서 개발을 시작하면 webpack 사용을 피할 수 없다. webpack에서는 webpack-dev-server를 제공하는데, 개발시에 로컬 웹서버 역할을 해준다. webpack의 설정은 상당히 복잡하지만, 대부분...
Getting Started with webpack Once you start developing with a frontend framework like Vue.js, using webpack becomes unavoidable. webpack provides webpack-dev...
간만에 AngularJS로 개발을 할 일이 생겼다. 내가 만든 코드인데도 만든지 4년 가까운 시간이 지나니 AngularJS의 동작에 대하여 기억이 나지 않았다. 그래서 간단히 정리해본다.
After a long while, I had a reason to do some development with AngularJS. Even though it was code I wrote myself, almost 4 years had passed since I made it, ...
AngularJS Material provide useful functions, especailly theme. Configuring theme is not complicated, but searching on google is not easy. So I wrote a simple...
AngularJS는 DOM 렌더링 완료 후에 콜백 함수를 실행하게 하는 기능이 없다. 직접 만들어줘야 한다.
AngularJS has no built-in feature for running a callback function after the DOM has finished rendering. You have to build it yourself.
이제는 애증의 물건이 되어버린 AngularJS. Angular-UI-Router를 사용하여 지연 로드(lazy load)를 구현해보았다. 지연 로딩을 위해 ocLazyLoad를 사용했다.
AngularJS, which has by now become a love-hate kind of thing. I tried implementing lazy loading using Angular-UI-Router. For lazy loading, I used ocLazyLoad.
This problem was Fixed version 1.0.20!! (thanks betty!)
웹브라우저 Autoplay policy
Web Browser Autoplay Policy
모바일 기기는 저성능이다. 모바일 웹브라우저는 저성능이다. 웹뷰는 더더욱 저성능이다. 그러니 개발자에게 웹뷰에 올라갈 어플리케이션의 성능 문제는 너무나도 중요하다. 그러나 성능 문제는 언제나 쉽지 않다. 어렵다. 웹뷰에는 근본적인 한계가 있다. 모바일 기기는 OS 차원에서 웹뷰의 ...
Mobile devices are low-powered. Mobile web browsers are low-powered. Webviews are even more low-powered. So for a developer, the performance of an applicatio...
Galaxy S21 WebView 동영상 녹색 화면 이슈 디버깅 및 해결
Debugging and Fixing the Galaxy S21 WebView Video Green Screen Issue
문제 HLS로 video를 재생하려는데, 최초 로딩시 너무 많은 네트워크 데이터를 사용한다. 나의 경우에는 최초 로딩시 무려 1분의 buffer를 하느라 60MB 가까운 데이터를 사용했다.
Problem I was trying to play video using HLS, but it consumed too much network data on the initial load. In my case, the initial load buffered a full minute ...
모노레포나 하위 폴더에 프로젝트가 위치한 환경에서 Lefthook을 설정하다 보면, 설정 파일을 찾지 못하거나 yarn 명령어가 실패하는 상황을 겪게 됩니다.
When setting up Lefthook in an environment where the project lives in a monorepo or a subfolder, you may run into situations where it can’t find the config f...
When using GitLab-CI, it is needed that finding changed or new files, and then copy & paste the files to server sometimes. The job is pretty simple.
CI/CD 도입 Gitlab을 설치하는 방법은 전에 다뤘다. 이번에는 CI/CD 도구를 도입했다. 예전에 일했던 프로젝트에서는 주로 jenkins를 사용했는데, 이번에는 Gitlab-CI를 써보기로 했다. Git 초심자가 대부분인 우리 프로젝트 특성상, Gitlab과 연계가 긴밀한...
Adopting CI/CD I already covered how to install Gitlab before. This time, I adopted a CI/CD tool. In projects I worked on in the past, we mainly used jenkins...
When dealing with ms-sql, there are times when you encounter the following errors…
MSSQL에서 OPENQUERY를 할 때 이런 오류가 발생할 수 있다.
When using OPENQUERY in MSSQL, you may run into an error like this.
MSSQL에서 OPENQUERY를 할 때 이런 오류가 발생할 수 있다.
When running OPENQUERY in MSSQL, you may run into an error like this.
7년 동안 외웠다 까먹기를 반복하다 지쳐버린 나…
For seven years I’ve memorized this and forgotten it over and over, until I finally gave up…
bitbucket cloud pipeline에서 zero install을 사용하지 마라.
Don’t use zero install in bitbucket cloud pipeline.
Based on Yarn v4.4.0.
며칠 전에 Yarn4가 나왔다. 조만간 업그레이드 하려고 생각했으나, 문제는 당장 터졌다.
A few days ago, Yarn4 was released. I had been planning to upgrade soon, but the problem hit me right away.
node_modules의 구조
The Structure of node_modules
태평양전쟁 말기 함평 엄다리 주둔 일본군 부대와 미공군 공습 분석
Analysis of the Japanese Army Unit Stationed at Eomda-ri, Hampyeong, and US Air Force Air Raids in the Final Phase of the Pacific War
어린 시절의 일이다. 외가집 인근의 망운리 옆 길에는 이상한 헛간이 늘어서 있었다. 시멘트 혹은 콘트리트로 만들어진 둥근 지붕의 헛간이었다. 헛간 안에는 경운기 혹은 농자재 등이 보관되어 있었다. 어머니는 이 헛간의 본래 용도를 잘 알고 계셨다. 일제 시대 때 이 곳에 일본군의 공...
This is a story from my childhood. Along the road next to Mangun-ri, near my mother’s family home, there stood a row of strange sheds. They were sheds with r...
할아버지께 직접 들은 이야기다. 인상깊어 옮겨본다. 나 역시 기억이 잘 나지 않아 오류가 있을 수 있다. 할아버지께 다시 여쭤봐야지. 고로 계속 수정 예정.
This is a story I heard directly from my grandfather. It left a strong impression on me, so I’m writing it down. My own memory isn’t perfect either, so there...
전쟁이 터지고 마을 사람들이 징병으로 끌려간지 얼마 지나지도 않았건만, 전선은 크게 밀려 전라도가 함락되었다. 1번 국도가 마을 한가운데를 관통하고 있었으니 만큼 세상은 즉각적으로 변했다. 인민군이 왔고, 완장을 찬 사람들이 나타나 마을 사람들을 학교 운동장에 둥글게 불러모았다. ...
It had been only a short while since the war broke out and the villagers were dragged off by conscription, yet the front lines had been pushed back so far th...
할아버지께 들은 한국전쟁 이야기. 아마도 여러 에피소드를 소개할 수 있을 듯 하다. 가급적 연재할 예정.
The Korean War story I heard from my grandfather. I will probably be able to share several episodes. I plan to continue it as a series as much as I can.
할아버지께 직접 들은 이야기다. 인상깊어 옮겨본다. 나 역시 기억이 잘 나지 않아 오류가 있을 수 있다. 할아버지께 다시 여쭤봐야지. 고로 계속 수정 예정.
This is a story I heard directly from my grandfather. It left a strong impression on me, so I’m writing it down. My own memory isn’t perfect either, so there...
나는 운이 좋다는 말을 삼가는 편인데, 운명이란 변화무쌍하여 언제 어떻게 내게 등을 돌릴지 모른다 생각하기 때문이다. 그렇다해도 여태 무풍에서 해온 6번의 공연 동안 나의 운은 제법 좋았다고 감히 말할 수 있다. 그간 함께한 파트너 덕분이다. 파트너의 도움 아니었으면 나 홀로 무엇...
I tend to refrain from saying that I’m lucky, because I believe that fate is ever-changing and you never know when or how it might turn its back on you. Even...
지난 17년 첫번째 공연을 하고 만 1년이 지났다. 돌이켜보면 그 당시의 느낌이 꽤나 절절했었다. 나름 장문의 글도 썼다. 글을 다시 읽어보니 행간마다 고통이 박혀있다. 나는 어쩜 그리 춤을 못췄는가. 10초의 안무를 익히는데 1시간이 걸렸다는 대목에 이르러서는 그만 정신을 놓아버...
A full year has passed since my first performance back in 2017. Looking back, the feelings I had at that time were quite intense. I even wrote a long post ab...
얼마 전부터 지인의 강력한 권유로 살사를 배우기 시작했다. 그간 나는 춤과 인연이 전혀 없었다. 혼란스러웠던 세기말, 그 시절에 청소년기를 보냈다면 누구나 한 번쯤 따라해봤다는 HOT와 GOD의 춤조차 근처에도 가지 않았다. 그래도 내심 내가 잘 할거라는 자신은 있었다. 그간 운동...
A little while ago, at the strong urging of an acquaintance, I started learning salsa. Up until then, I had had absolutely no connection to dance. I never we...
나는 운이 좋다는 말을 삼가는 편인데, 운명이란 변화무쌍하여 언제 어떻게 내게 등을 돌릴지 모른다 생각하기 때문이다. 그렇다해도 여태 무풍에서 해온 6번의 공연 동안 나의 운은 제법 좋았다고 감히 말할 수 있다. 그간 함께한 파트너 덕분이다. 파트너의 도움 아니었으면 나 홀로 무엇...
I tend to refrain from saying that I’m lucky, because I believe that fate is ever-changing and you never know when or how it might turn its back on you. Even...
지난 17년 첫번째 공연을 하고 만 1년이 지났다. 돌이켜보면 그 당시의 느낌이 꽤나 절절했었다. 나름 장문의 글도 썼다. 글을 다시 읽어보니 행간마다 고통이 박혀있다. 나는 어쩜 그리 춤을 못췄는가. 10초의 안무를 익히는데 1시간이 걸렸다는 대목에 이르러서는 그만 정신을 놓아버...
A full year has passed since my first performance back in 2017. Looking back, the feelings I had at that time were quite intense. I even wrote a long post ab...
얼마 전부터 지인의 강력한 권유로 살사를 배우기 시작했다. 그간 나는 춤과 인연이 전혀 없었다. 혼란스러웠던 세기말, 그 시절에 청소년기를 보냈다면 누구나 한 번쯤 따라해봤다는 HOT와 GOD의 춤조차 근처에도 가지 않았다. 그래도 내심 내가 잘 할거라는 자신은 있었다. 그간 운동...
A little while ago, at the strong urging of an acquaintance, I started learning salsa. Up until then, I had had absolutely no connection to dance. I never we...
이걸 찾느라 너무나 오랜 시간을 고통받았다.
I suffered for such a long time trying to find this.
0. The problem
0. 기묘한 조합
0. A Strange Combination
docker로 ubuntu를 desktop처럼 돌리려면 아래 docker image를 pull 받아서 실행하면 된다.
To run Ubuntu like a desktop with Docker, just pull and run the Docker image below.
0. The Situation
1. git으로 간다 회사에 git을 도입하기로 했다. 그간 내가 다니는 회사는 svn을 사내 버전관리 도구로 사용하고 있었는데, 나는 머리가 좋지 않아 git이 없으면 개발을 하질 못한다. 언제 뭘 만들고 고치고 지웠는지 도무지 기억할 수가 있어야지… 이점에서 git의 장점은 명...
1. Going with git My company decided to adopt git. Until then, the company I work for had been using svn as its in-house version control tool, but I’m not sm...
오래 전 프로그래밍을 처음 배웠을 때가 생각난다. 나는 자바로 프로그래밍을 처음 시작했고, 당시 자바의 위상은 객체지향 패러다임의 현현과도 같았다. 현실 세계를 모사한다지만 결코 그래보이지 않는 객체 지향의 늪에 빠져, 나 역시 여느 사람 이상으로 꽤나 고생해서 익혀야 했다. 그리...
I’m reminded of the time long ago when I first learned programming. I started out with Java, and back then Java’s stature was practically the very embodiment...
Spring Data JPA를 쓰다가 Sorting이 안되는 고통을 겪었다. 평소처럼 Spring Data method명으로 order by를 먹이려는데, 왜인지는 모르겠으나 컬럼명을 발견하지 못하여, 쿼리문이 만들어지지 못하는 오류가 발생했다. 그래서 Sort 객체를 사용한 간단...
While using Spring Data JPA, I went through the pain of sorting not working. As usual, I tried to apply order by through a Spring Data method name, but for s...
Linux에서 Java10을 설치하는 방법을 정리해보았다. 우분투와 리눅스 민트에서 다 잘 설치된다. linuxuprising의 문서를 참조하였다.
I’ve put together how to install Java 10 on Linux. It installs just fine on both Ubuntu and Linux Mint. I referred to the linuxuprising documentation.
SwiperJS를 사용하여 개발하다가 Transition/Translate 이벤트 핸들러가 성능 문제를 발생시켜 간단히 정리해 보았다.
While developing with SwiperJS, the Transition/Translate event handlers caused performance issues, so I put together a quick summary.
제목을 보고 홀린 듯 사버렸다. 요즘 나의 고민 중 하나를 정통으로 찌르는 제목이었기 때문이다. 요즘 세상은 프레임워크 없는 프론트엔드 개발을 상상하기 힘든 세상이 되었다. 프레임워크는 너무나도 강력하여 개발을 쉽고, 편리하고, 빠르게 만들어준다. 불과 몇 년 전만 해도 jQuer...
The moment I saw the title, I bought it as if under a spell. That’s because the title struck right at the heart of one of my current concerns. These days, it...
이 글은 webpack 4.11.1 버전을 기준으로 합니다.
This post is based on webpack version 4.11.1.
인간 정신의 위대함은 역경을 만나서야 비로소 드러난다. 마치 납에서 은을 분리하는 것처럼, 운명이 자아낸 고난은 피할 도리 없이 밀어 닥치고, 하찮은 껍데기는 모두 날려 버린다. 사는 방법을 깨닫지 못 했다면 죽는 방법이라도 깨달아야 하는 법. 로코코의 여신에서 비참한 죄수로 전락...
The greatness of the human spirit reveals itself only when it meets adversity. Just as silver is separated from lead, the hardships that fate spins out come ...
버냉키의 업적에 대해서는 이미 평가가 끝났다고 생각한다. 그는 연준 의장으로서 금융위기의 시대를 극복해냈고, 현대 중앙은행의 정책 수단을 만들어냈다. 한편으로 그는 경제학자이자 역사가이다. 따라서 그가 정리한 현대 경제사는 연준의 향후 행보를 짐작하기 위한 참고자료일 뿐만 아니라 ...
I think the verdict on Bernanke’s achievements is already in. As Fed chairman, he steered us through the era of the financial crisis and created the policy t...
나는
Environment
처음 Vuetify를 Add하고 프로젝트를 빌드하면 warning이 많이 뜬다.
When you first add Vuetify and build the project, you’ll see many warning messages.
Environment
산쇼다유 매끄럽고도 단순한 이야기가 끝날 때쯤 짧은 생각에 잠겼다. 인간의 도리란 무엇인지, 고통스러운 삶 속에서, 끝내 지켜야만 하는 바는 무엇인지를 생각한다.
Sansho the Bailiff As this smooth yet simple story drew to a close, I fell into a brief reverie. I think about what human duty is, and about what, within a l...
조커의 관객은 둘로 나눌 수 있다. 조커에게 공감하는 자와 그렇지 못한 자. 조커의 말대로 ‘말해도 이해 못 할테니’
The audience for Joker can be divided into two groups: those who empathize with the Joker, and those who do not. Just as the Joker says, “You wouldn’t get it...
바야흐로 공감과 위로의 시대다. 다들 힘들어 죽겠다고 한다. 뭘 해도 안된다고 한다. 그러고 있자면 TV든, 책이든, 유튜브든 한 마디씩 던진다. ‘힘들지. 나도 그래. 다 괜찮다. 잘 될거야.’ 다 좋은 말이다. 하지만 나는 이런 이야기를 그다지 좋아하지 않는다. 내게는 시간이 ...
We live in an age of empathy and consolation. Everyone says life is unbearably hard. They say nothing works out, no matter what they do. And whenever that mo...
이 책을 읽은 소감을 한 마디로 말하자면 주공단에 대한 새삼스러운 존경심이다. 한 사람의 깨달음이 문명의 이정표를 바꾼 사례란 역사상 극히 드물다. 백읍고의 비극은 희씨 일가 모두에게 큰 충격이었겠으나, 이를 받아들이는 방법은 각자 달랐다. 문왕은 신의 뜻을 헤아리고자 했고, 무왕...
If I had to sum up my impressions after reading this book in a single phrase, it would be a renewed respect for the Duke of Zhou (Zhou Gong Dan). Cases in wh...
이쯤에서 오규 소라이를 인정하지 않을 수 없음을 고백해야겠다. 나는 오랫동안 성리학을 썩 맘에 들어하지 않았다. 이유야 많다. 성리학에 대한 집착이 조선 망국의 원인이라는 점, 우주와 만물의 이치 따위의 현대 과학 문명의 관점에서는 터무니 없기만 한 개념 등 때문이다. 하지만 나로...
At this point I must confess that I cannot help but give Ogyū Sorai his due. For a long time I never much cared for Neo-Confucianism. The reasons are many: t...
소라이는 성리학자를 혐오했다. 그들의 엄격주의는 편협함을 낳는다고 보았다. 통감강목에 등장하는 인물 중, 주자의 마음에 드는 사람은 단 한 명도 없어 보인다는 그의 일갈처럼, 성리학의 엄격함은 애당초 실행 불가능하다는 주장이었다. 소라이는 인간의 자연스러운 욕망을 긍정했다. 공익을...
Sorai detested Neo-Confucians. Their rigorism, he believed, bred narrow-mindedness. As his quip goes — among all the figures appearing in the Tongjian Gangmu...
The Situation
node_modules의 구조
The Structure of node_modules
npm audit fix --force 를 하면 node module의 버전을 낮추기도 한다. 보안취약점이 발생하지 않는 버전을 찾기 때문.
Running npm audit fix --force can also downgrade the version of a node module. That’s because it looks for a version where the security vulnerability doesn’t...
React의 ref에서 버그를 내어 정리해 보았다.
I ran into a bug with React’s ref, so I decided to write up what I learned.
Environment
모던 리액트 Deep Dive, 2022, 위키북스, 김용찬
Modern React Deep Dive, 2022, Wikibooks, Kim Yong-chan
라우트-단위 코드 스플리팅 — React Data Router v7 + Vite 조합으로 “진짜” Lazy Route 만들기
Route-Level Code Splitting — Building “Real” Lazy Routes with React Data Router v7 + Vite
react-router useNavigate 훅의 동작 분석 - navigate는 어디서부터 시작되는가
Analyzing How react-router’s useNavigate Hook Works - Where Does navigate Start From?
React Router ScrollRestoration 디버깅 기록 — 왜 스크롤이 안 움직였을까?
React Router ScrollRestoration Debugging Log — Why Wouldn’t the Scroll Move?
웹브라우저 Autoplay policy
Web Browser Autoplay Policy
1. Move to Google Chrome directory
이거 정말 좋은건데 모르시는 분들이 있어 안타까움에 올린다.
This is a really great feature, and it’s a shame that some people don’t know about it, so I’m sharing it.
운영하는 서비스 중 ASP와 Visual Basic으로 만들어진 구닥다리 사이트가 하나 있다. 어느 날 google chrome에서 사이트를 열어보니 화면 한 구석이 휑하다.
Among the services I operate, there’s an old-fashioned site built with ASP and Visual Basic. One day I opened the site in google chrome, and one corner of th...
Python의 Requests 모듈로 C#에 json 데이터를 post request로 보낼 때 아래와 같은 500 에러를 맞이할 수 있다.
When you send JSON data to C# as a POST request using Python’s Requests module, you may run into a 500 error like the one below.
Updated! For new IBM Cloud on 2019.06.24.
기술 문서를 작성할 때 sphinx를 사용하면 편리하다. 기술문서 번역을 한다면 sphinx-intl은 아주 유용하다. 그 장점에는 여러가지가 있지만, 기술 문서 번역자에게 가장 큰 고통을 주는 문제, 바로 원본 문서의 잦은 변경 또한 쉽게 해결해준다. 변경된 부분만 찍어서 알...
When you write technical documentation, using sphinx is convenient. And if you are translating technical documentation, sphinx-intl is extremely useful. It h...
When using GitLab-CI, it is needed that finding changed or new files, and then copy & paste the files to server sometimes. The job is pretty simple.
0. The Situation
1. git으로 간다 회사에 git을 도입하기로 했다. 그간 내가 다니는 회사는 svn을 사내 버전관리 도구로 사용하고 있었는데, 나는 머리가 좋지 않아 git이 없으면 개발을 하질 못한다. 언제 뭘 만들고 고치고 지웠는지 도무지 기억할 수가 있어야지… 이점에서 git의 장점은 명...
1. Going with git My company decided to adopt git. Until then, the company I work for had been using svn as its in-house version control tool, but I’m not sm...
It works on my Node.js project.
부끄러운 이야기 먼저 하나 해야겠다. 나는 지금껏 몇 개의 Node.Js 앱을 만들어왔다. 하지만 그러는 동안 Node.Js를 따로 공부하지 않았다. 한 권의 책도 보지 않았고, 인터넷 강의도 보지 않았다. 어짜피 다 아는 JavaScript 아닌가, 달리 공부해야 할 것도 많은데...
Let me start with an embarrassing confession. Up to now, I’ve built a handful of Node.js apps. But the whole time, I never actually studied Node.js. I never ...
새로 나온 Node.js 디버깅 도구(?)
A new Node.js debugging tool(?)
Add this to httpd.conf:
Apache HTTP Server에 mime type을 추가하려면?
How do you add a MIME type to Apache HTTP Server?
You can configure Apache HTTP Server’s response header based on web browser. Example is below.
이 블로그는 jekyll을 사용하여 돌리고 있다. 테마는 minimal mistake를 사용한다. 요 테마는 업데이트가 상당히 활발한데, 멋진 블로그를 위해 숟가락 얹은 처지인지라 블로깅 하는 틈틈히 테마 업데이트를 따라가줘야 한다. 테마 업데이트 방법은 다음과 같다. 나는 git...
This blog runs on jekyll. For the theme, it uses minimal mistake. This theme is updated quite actively, and since I’m just riding along to get a nice-looking...
0. 시작 블로깅을 재개하기로 결심했다. 오래된 나태함과 타성을 조금이나마 다잡기 위함이다. 블로깅의 본질이라면 마땅히 글쓰기이겠지만, 나라는 사람은 어쩔 수 없는지라 시작부터 수단에 집착하고야 말았다. 바로 적당한 블로깅 도구를 찾아 구축하는 일이었는데, 이 단계에서부터 생각외...
0. Getting Started I decided to take up blogging again. It was an attempt to shake off, even a little, my long-standing laziness and inertia. The essence of ...
0. 클라우드 난민
0. Cloud Refugee
생각이란 무엇일까? 단비.ai 프로젝트를 할 때부터 든 생각이다. 단비.ai 프로젝트의 목표가 ‘챗봇을 만드는 플랫폼’이었기 때문이다. 대화하는 인공지능, 챗봇이야말로 우리가 생각하는 인공지능의 가장 전형적인 모습 아니겠는가? 그렇다면 이야기를 진척하기 앞서 챗봇이 어떻게 동작하는...
What is thinking? This is something I have been pondering ever since the Danbee.ai project. The goal of the Danbee.ai project was to build “a platform for ma...
전쟁이 터지고 마을 사람들이 징병으로 끌려간지 얼마 지나지도 않았건만, 전선은 크게 밀려 전라도가 함락되었다. 1번 국도가 마을 한가운데를 관통하고 있었으니 만큼 세상은 즉각적으로 변했다. 인민군이 왔고, 완장을 찬 사람들이 나타나 마을 사람들을 학교 운동장에 둥글게 불러모았다. ...
It had been only a short while since the war broke out and the villagers were dragged off by conscription, yet the front lines had been pushed back so far th...
할아버지께 들은 한국전쟁 이야기. 아마도 여러 에피소드를 소개할 수 있을 듯 하다. 가급적 연재할 예정.
The Korean War story I heard from my grandfather. I will probably be able to share several episodes. I plan to continue it as a series as much as I can.
Working code link: CodePen
For Exporting JSON to Excel file, SheetJS is useful. SheetJS is complicated to use, but powerful and well maintained. I tried to use vue-json-excel, but on v...
IIS6.0에서 JSON을 내려받을 일이 생겼다. 그런데 잘 안된다. 이런 오류 메시지가 뜬다.
I ran into a situation where I needed to download JSON from IIS 6.0. But it wouldn’t work. I kept getting this error message.
너에게 닥친 고난이 아무리 커보이더라도, 명심해라, 아직 빙산의 일각일 뿐이다.
No matter how great the hardship before you appears, remember — it is still only the tip of the iceberg.
내게는 새마을금고에서 일하는 친구가 하나 있다. 이 친구는 동네의 작은 지점에서 일을 하는데, 이런 곳이 흔히 그렇듯 긴급한 업무만 얼른 보러가는 찬바람 부는 그런 은행이 아니다. 오히려 할일없는 동네 주민들이 들러 한 수다 떨고가는 마을 경로당 겸 사랑방과 비슷하다고 하겠다. 은...
I have a friend who works at a Saemaul Geumgo (a community credit cooperative). This friend works at a small neighborhood branch, and as is often the case wi...
axios에는 HTTP request 여러 개를 한번에 묶어 던지는 기능이 있다. 이 기능을 사용하여 기껏 개발해놨는데, 기능 변경으로 인해 코드를 지워야 한다. 잊기 전에 박제해두자.
axios has a feature that lets you bundle several HTTP requests and fire them off at once. I went to the trouble of building something with this feature, but ...
1. ‘Promise’이(가) 정의되지 않았습니다.
1. ‘Promise’ is undefined.
이거 정말 좋은건데 모르시는 분들이 있어 안타까움에 올린다.
This is a really great feature, and it’s a shame that some people don’t know about it, so I’m sharing it.
webpack 시작 Vue.js 등의 프론트엔드 프레임워크를 사용해서 개발을 시작하면 webpack 사용을 피할 수 없다. webpack에서는 webpack-dev-server를 제공하는데, 개발시에 로컬 웹서버 역할을 해준다. webpack의 설정은 상당히 복잡하지만, 대부분...
Getting Started with webpack Once you start developing with a frontend framework like Vue.js, using webpack becomes unavoidable. webpack provides webpack-dev...
요즘 스위프트로 iOS 앱을 개발하고 있다. 네이티브앱은 아니고 웹뷰로 이미 개발되어 있는 웹페이지를 띄워주는 앱인데, 열심히 개발하고 있자니 난데없이 화면이 하얗게 침묵했다. 불과 몇 초 전까지만 해도 잘 돌아가던 기능이다.
These days I’m developing an iOS app with Swift. It’s not a native app but one that loads an already-built web page in a web view, and as I was busily workin...
시작 저 자신에게 자극을 주기 위해 뭐라도 해보자고 시작한 일기입니다. 그럼 시작!
The Beginning This is a diary I started in an attempt to do something, anything, to motivate myself. So, here we go!
요즘 스위프트로 iOS 앱을 개발하고 있다. 네이티브앱은 아니고 웹뷰로 이미 개발되어 있는 웹페이지를 띄워주는 앱인데, 열심히 개발하고 있자니 난데없이 화면이 하얗게 침묵했다. 불과 몇 초 전까지만 해도 잘 돌아가던 기능이다.
These days I’m developing an iOS app with Swift. It’s not a native app but one that loads an already-built web page in a web view, and as I was busily workin...
시작 저 자신에게 자극을 주기 위해 뭐라도 해보자고 시작한 일기입니다. 그럼 시작!
The Beginning This is a diary I started in an attempt to do something, anything, to motivate myself. So, here we go!
새로 나온 Node.js 디버깅 도구(?)
A new Node.js debugging tool(?)
Stack Overflow에 새로운 기능이 추가되었다. 화면 우측 하단을 보면 고무 오리가 천연덕스레 떠있다.
A new feature has been added to Stack Overflow. Look at the bottom-right of the screen and you’ll see a rubber duck floating there, cool as a cucumber.
소스 코드를 압축할 때 .git 디렉토리나 node_modules을 포함할 필요는 없다. 제외하자.
When you compress source code, there’s no need to include the .git directory or node_modules. Let’s exclude them.
Linux에서 Java10을 설치하는 방법을 정리해보았다. 우분투와 리눅스 민트에서 다 잘 설치된다. linuxuprising의 문서를 참조하였다.
I’ve put together how to install Java 10 on Linux. It installs just fine on both Ubuntu and Linux Mint. I referred to the linuxuprising documentation.
알고리즘 공부라 하면 아마도 모든 개발자들의 한결같은 새해 목표일 것이다. 물론 대부분의 새해 목표가 그렇듯이 곧 잊혀진다. 나도 알고리즘 공부를 몇 년째 새해 목표 중 하나로 잡아두었는지 모른다. 끔찍한 일이다. 그래도 요즘은 알고리즘 공부하기에 좋은 책이 많다. 이 책, ‘누구...
Studying algorithms is probably the kind of New Year’s resolution that every developer shares. And of course, like most New Year’s resolutions, it soon gets ...
요즘 종일 Vue.js만 보고 있었더니, 함께 일하는 나이 지긋한(?) 개발자께서 이런 말을 하신다.
I had been staring at nothing but Vue.js all day long, when a seasoned (?) developer I work with said this to me:
설문조사 서비스를 만들었다. Vue.js와 SurveyJS를 사용하여 SPA로 만들었다. 소스코드는 여기서 볼 수 있다.
I built a survey service. I built it as an SPA using Vue.js and SurveyJS. You can find the source code here.
SurveyJS로 설문조사 서비스를 개발하다가 발견한 것을 공유한다.
Here’s something I discovered while building a survey service with SurveyJS.
Visual Studio Code로 단어 2개를 동시에 포함하는 파일을 검색해보자.
Let’s search for files that contain two words at once using Visual Studio Code.
Visual Studio Code로 Microsoft SQL Server(이하 mssql)을 사용하고 있는데, 아주 좋다. 여기서 설치하면 된다. 무거운 SQL Server Management Studio를 실행할 것 없이, mssql을 가볍고 편리하게 사용할 수 있다.
I’ve been using Microsoft SQL Server (hereafter mssql) with Visual Studio Code, and it’s really great. You can install it from here. Without having to launch...
CI/CD 도입 Gitlab을 설치하는 방법은 전에 다뤘다. 이번에는 CI/CD 도구를 도입했다. 예전에 일했던 프로젝트에서는 주로 jenkins를 사용했는데, 이번에는 Gitlab-CI를 써보기로 했다. Git 초심자가 대부분인 우리 프로젝트 특성상, Gitlab과 연계가 긴밀한...
Adopting CI/CD I already covered how to install Gitlab before. This time, I adopted a CI/CD tool. In projects I worked on in the past, we mainly used jenkins...
CI/CD 도입 Gitlab을 설치하는 방법은 전에 다뤘다. 이번에는 CI/CD 도구를 도입했다. 예전에 일했던 프로젝트에서는 주로 jenkins를 사용했는데, 이번에는 Gitlab-CI를 써보기로 했다. Git 초심자가 대부분인 우리 프로젝트 특성상, Gitlab과 연계가 긴밀한...
Adopting CI/CD I already covered how to install Gitlab before. This time, I adopted a CI/CD tool. In projects I worked on in the past, we mainly used jenkins...
CI/CD 도입 Gitlab을 설치하는 방법은 전에 다뤘다. 이번에는 CI/CD 도구를 도입했다. 예전에 일했던 프로젝트에서는 주로 jenkins를 사용했는데, 이번에는 Gitlab-CI를 써보기로 했다. Git 초심자가 대부분인 우리 프로젝트 특성상, Gitlab과 연계가 긴밀한...
Adopting CI/CD I already covered how to install Gitlab before. This time, I adopted a CI/CD tool. In projects I worked on in the past, we mainly used jenkins...
CI/CD 도입 Gitlab을 설치하는 방법은 전에 다뤘다. 이번에는 CI/CD 도구를 도입했다. 예전에 일했던 프로젝트에서는 주로 jenkins를 사용했는데, 이번에는 Gitlab-CI를 써보기로 했다. Git 초심자가 대부분인 우리 프로젝트 특성상, Gitlab과 연계가 긴밀한...
Adopting CI/CD I already covered how to install Gitlab before. This time, I adopted a CI/CD tool. In projects I worked on in the past, we mainly used jenkins...
CI/CD 도입 Gitlab을 설치하는 방법은 전에 다뤘다. 이번에는 CI/CD 도구를 도입했다. 예전에 일했던 프로젝트에서는 주로 jenkins를 사용했는데, 이번에는 Gitlab-CI를 써보기로 했다. Git 초심자가 대부분인 우리 프로젝트 특성상, Gitlab과 연계가 긴밀한...
Adopting CI/CD I already covered how to install Gitlab before. This time, I adopted a CI/CD tool. In projects I worked on in the past, we mainly used jenkins...
0. JavaScript Logger
0. JavaScript Logger
가내수공업적 로그 분석
Cottage-Industry-Style Log Analysis
아마도 세월이 흘러 이제는 누가 기억하는지도 모를 어느 게임의 이야기다. 때는 97년으로 아직 외환위기 이전이었다. 그래서인지 몰라도 컴퓨터 게임의 가격은 2019년 현재와 비교해도 비싸면 비쌌지 결코 싸지 않았다. SWIV 3D의 가격은 무려 3만 6천원(아마)으로, 지금 물가로...
This is the story of a game that, with the passing of years, probably no one even remembers anymore. The time was 1997, still before the Asian financial cris...
영화 각본가를 꿈꾸던 대학생이 있었다. 하지만 그의 노력과 시도는 성공 직전에 모두 실패했다. 젊은 나이라 할지라도 그의 좌절이 가벼울리 없었다. 그러던 그에게 누군가 이렇게 말했다.
There was a college student who dreamed of becoming a film screenwriter. But all of his efforts and attempts fell apart on the verge of success. Even though ...
HTML textarea로 만들어진 게시판을 TinyMCE로 교체하는 작업을 하던 도중, 개행문자가 DB에 CRLF(\r\n)로 저장되어 귀찮은 일이 생겼다.
While working on replacing an HTML textarea-based board with TinyMCE, I ran into an annoying issue because the newline characters were stored in the DB as CR...
Microsoft SQL Server에서 프로그램당 active connection의 숫자를 확인하자.
Let’s check the number of active connections per program in Microsoft SQL Server.
Lodash 사용 예제를 정리해보았다. 왜냐면 내가 자꾸 잊어먹기 때문… 계속 업데이트 할 예정이다.
I put together some Lodash usage examples. Because I keep forgetting them… I plan to keep updating this.
Vue.js에서 lodash의 remove 함수가 제대로 동작하지 않는다. 보다 정확히 말하자면, Vue.js에서 watching 중인 reactive array에서 element를 _.remove(array, fn) 해도, Vue.js는 이를 감지하지 못한다.
In Vue.js, lodash’s remove function doesn’t work properly. To be more precise, when you remove an element from a reactive array that Vue.js is watching with ...
CSS는 늘 고통스럽다. 저자도 마찬가지였나보다. 저자는 프론트엔드 개발을 하며 겪은 고통스러운 삽질의 과정을 솔직하고 생생하게 말해준다. 마치 내가 삽질하며 배우는 기분이다. 역시 개발을 배우려면 삽질이 최고지. 멋진 책이다!
CSS is always painful. It seems the author felt the same way. He honestly and vividly recounts the painful trial-and-error he went through while doing fronte...
나는 iframe을 싫어하지만 이런 저런 이유로 부득불 사용해야만 할 때가 있다. 아래 코드는 iframe에서 부모 frame으로 데이터를 전송하는 방법이다. iframe에서는 postMessage 함수로 메세지(데이터)를 쏴주고, 부모 프레임에서는 iframe에서 전달받을 메시지...
I dislike iframes, but for one reason or another there are times when I have no choice but to use them. The code below shows how to send data from an iframe ...
처음 Vuetify를 Add하고 프로젝트를 빌드하면 warning이 많이 뜬다.
When you first add Vuetify and build the project, you’ll see many warning messages.
Environment
Naver 지도 Open API가 2019년 04월 15일자로 서비스 종료된다.
The Naver Maps Open API will be discontinued as of April 15, 2019.
CORS 문제로 몇 년간 고통받고 있다. 문제에 부닥칠 때마다 구글링을 하며 수많은 Q&A글을 본다. 그리고
I’ve been suffering from the CORS problem for years. Every time I run into it, I google around and read countless Q&A posts. And then there’s
모달을 띄울 때, 뒤 배경을 흐릿하게 만들면 모달의 가독성이 향상된다. backdrop-filter CSS를 쓰면 이걸 쉽게 만들 수 있다.
When you bring up a modal, blurring the background behind it improves the modal’s readability. With the backdrop-filter CSS property, you can do this easily.
CSS는 늘 고통스럽다. 저자도 마찬가지였나보다. 저자는 프론트엔드 개발을 하며 겪은 고통스러운 삽질의 과정을 솔직하고 생생하게 말해준다. 마치 내가 삽질하며 배우는 기분이다. 역시 개발을 배우려면 삽질이 최고지. 멋진 책이다!
CSS is always painful. It seems the author felt the same way. He honestly and vividly recounts the painful trial-and-error he went through while doing fronte...
침략국의 군인의 죽음은 응보일 뿐이라는 이야기를 많이 듣는다. 하지만 대부분의 경우, 평범한 병사에 불과한 그들 역시 전쟁의 광기에 희생당했을 뿐이다. 이 세상을 선과 악의 이분법적 대결로 보는 시각은 얼마나 어리석은가.
We often hear that the death of a soldier from an invading nation is nothing more than just deserts. But in most cases, those soldiers too were ordinary men,...
워싱턴 포스트가 놀라운 일을 해냈다. 할 말이 많지만 간단히 요약부터 해본다.
The Washington Post has done something remarkable. There’s a lot to say, but let me start with a brief summary.
평화를 이루기 위해 백 만의 목숨을 빼앗아야 한다면 이를 평화라고 부를 수 있는가? 이에 대한 역사학계의 일반적인 답변은 ‘그렇다’이다. 심지어 그 시대를 살아간 당사자들조차 그렇게 증언했다. 로마 제국이 가장 영광스러웠던 시기인 오현제의 시대, 제국은 평화롭다고 일컬어졌으나 실은...
If achieving peace requires taking a million lives, can it still be called peace? The general answer from historians is “yes.” Even the people who lived thro...
갈리아인으로부터 로마를 탈환하고, 3차 삼니움 전쟁에 이르기까지를 다룬 책. 로마는 끊임없이 싸운다. 에트루리아인과 삼니움인, 그리고 그보다 약한 수 많은 부족들과 싸운다. 귀족 계급과 평민 계급의 싸움 역시 외적과의 싸움 이상으로 격렬했다. 어찌나 쉬지 않고 싸우는지 로마인 자신...
A book covering the period from the recapture of Rome from the Gauls up through the Third Samnite War. Rome fights ceaselessly. It fights the Etruscans and t...
우선 부끄러운 고백부터 해야겠다. 나는 올해 처음으로 헌법을 공부하기 시작했다. 그리고 크게 후회했다. 왜 진작 헌법에 관심을 두지 않았을까? 소위 인문학을 공부하면서 해왔던 많은 생각들, 특히 현실의 부조리함에 대한 고민의 최전선에 바로 헌법이 서 있었다. 헌법이란 당위와 현상에...
First, I have an embarrassing confession to make. This year was the first time I ever started studying the constitution. And I deeply regretted not having do...
2005년 제정된 이라크 헌법의 경우, 전문이 유려하고 장문이다. 민족의 역사에 대한 자부심이 가득함을 느낄 수 있다. 그 초반만 소개하면 다음과 같다.
The preamble to the Iraqi Constitution, enacted in 2005, is eloquent and lengthy. You can feel that it is brimming with pride in the nation’s history. Here i...
trailing slash 리디렉션이 HTTP 로 떨어지는 이슈와 해결법
L4 로드밸런서 + Nginx 환경에서 trailing slash 리디렉션이 HTTP 로 떨어지는 이슈와 해결법
Fixing trailing slash redirects that drop to HTTP in an L4 load balancer + Nginx setup
개발자 채용공고를 읽다보면 종종 이런 우대사항 혹은 필수사항을 발견한다.
When reading developer job postings, you often come across this kind of preferred or required qualification.
HOL(head of line): TCP에서의 전송 지연으로 인한 레이턴시
HOL (head of line): latency caused by transmission delays in TCP
몇 년 전 겪은 일이다. 당시 사용 중이던 안드로이드 폰의 배터리가 이상하게 빨리 닳아서 제조사의 서비스 센터에 찾아갔다. 해당 기종의 배터리에 문제가 있어 이미 이슈화 되었던 기기였다. 그래서 나는 당연히 내 폰도 배터리에 문제가 있으리라 생각했다. 서비스센터의 AS기사는 이러한...
This happened a few years ago. The battery on the Android phone I was using at the time was draining strangely fast, so I went to the manufacturer’s service ...
아테네 민주정의 펠라스기 기원: 망각된 선주민 질서와 문명 기억의 역설
The Pelasgian Origins of Athenian Democracy: The Forgotten Indigenous Order and the Paradox of Civilizational Memory
Apollo’s Cult in the Black Sea Area and the Greek Colonists: Some Remarks(논문) 요약
A summary of the paper “Apollo’s Cult in the Black Sea Area and the Greek Colonists: Some Remarks”
After 500 Years, an Ancient Bronze Hand Is Rejoined to a Finger
After 500 Years, an Ancient Bronze Hand Is Rejoined to a Finger
iOS 패키지 매니저 아님
Not the iOS package manager
서아프리카 무문자 사회에 대한 문화인류학의 성과를 엿보며 한반도의 고대사를 생각한다. 무문자 사회에서 신화는 그리 멀리 있지 않다. 누에르족의 신화에서 최초의 인간이 출현했다고 여겨지는 나무는 1920년대까지도 그 자리에 그대로 서 있었다. 전승된 계보라 할지라도 진실을 전하기 보...
Glimpsing the findings of cultural anthropology regarding non-literate West African societies, I find myself thinking about the ancient history of the Korean...
Meet the Other Social Influencers of the Animal Kingdom
Meet the Other Social Influencers of the Animal Kingdom
요약: safari는 scrollIntoView의 모든 option을 지원하지 않음 reference: https://caniuse.com/?search=scrollIntoView safari 13, 14에서 test함 오류 목...
Summary: Safari does not support all of the scrollIntoView options reference: https://caniuse.com/?search=scrollIntoView Tested on Safari...
200 ok status만 응답하는 코드
Code that responds with a 200 OK status only
msw(mock service worker) msw란? api 응답을 모킹하는 서비스 워커.
msw (mock service worker) What is msw? A service worker that mocks API responses.
목표: 애플 실리콘으로 local LLM을 구축하자
Goal: Build a local LLM on Apple Silicon
나는 예전에 고양이와 함께 살았다. 동화에서나 나올법한 이야기 같으나, 우리는 매일 이야기를 나눴다. 두 수컷이 함께 먹고, 자고, 놀고, 다투기 위해서는 대화를 나누지 않을 수 없었다. 물론 한국어를 사용하여 이야기를 나눈 건 아니다. 하지만 우리는 서로의 마음을 전할 수 있었다...
I once lived with a cat. It may sound like something out of a fairy tale, but we talked with each other every day. For two males to eat, sleep, play, and qua...
부재의 존재(Presence of absence)라는 개념을 처음 접했다. 과거에 존재했으나 현재는 더이상 존재하지 않는 모든 것은 그 빈자리로서 현재에 영향을 미친다. 이는 비단 자연 뿐만이 아니다. 우리의 마음에도 영향을 미친다. 예를 들어보자. 맹수가 존재하지 않는 세상에서 ...
I came across the concept of the “presence of absence” for the first time. Everything that once existed but no longer does still affects the present through ...
가상 면접 사례로 배우는 대규모 시스템 설계 기초2, 2024, 인사이트, 알렉스 쉬 & 산 람, 이병준 역
System Design Interview Vol. 2: Learning Large-Scale System Design Through Mock Interview Cases, 2024, Insight, Alex Xu & Sahn Lam, translated by Lee Bye...
10년만 일찍 이 책을 만났으면 어땠을까 싶다. 컴퓨터 공학에 대한 공부를 어디서부터 시작해야할지 도통 감을 잡을 수 없어 괴로워하던 그 시절에 이 책을 읽었으면 큰 도움이 되었으리라. 물론 컴퓨터 공학에 대한 나의 깨달음이 여전히 일천하여 이 책의 가르침을 충분히 소화해내지 못 ...
I wish I had come across this book ten years earlier. Back when I was struggling, with no idea where to even begin studying computer science, reading this bo...
사진 속 저 멀리 용마산의 모습은 지금과 다름 없는데, 사진 속 사람의 모습은 그렇지 않다. 낯설다 못해 충격적이다. 청계천과 중랑천 둑길에 굴을 파고 사는 사람들, 얼기설기 엮은 비닐 아래에서 잠을 청하는 사람들이다. 불과 50년 전의 사진이다. 개미집과 판자촌이라 불리던 그 곳...
Yongmasan in the distance looks no different from how it does today, but the people in the photograph are another story. They are not just unfamiliar; they a...
2016년 11월 12일 광화문 광장에서의 박근혜 퇴진 시위를 기억한다. 추운 날이었다. 너무 추운 나머지 주류 언론에서는 시위의 소멸을 전망했다. 하지만 그날 시위 참여자는 100만명을 넘겼다. 거대한 인파가 청와대 인근까지 전진했다. 의무경찰과 그들을 태운 버스가 시위대를 가로...
I remember the protest demanding President Park Geun-hye’s resignation at Gwanghwamun Square on November 12, 2016. It was a cold day. So cold, in fact, that ...
한국인을 가리켜 기록의 민족이라는 주장을 들을 때마다 나는 어처구니가 없다. 특히 고대사를 보면 더욱 그러하다. 제주도는 커녕 한반도의 고대사 조차도 외국의 기록에 의존하지 않고서는 시작조차 불가능하다. 이러한 와중에 일본 측의 기록은 일단 부정하고 시작한다. 황당한 일이다. 그나...
Whenever I hear the claim that Koreans are “a people of records,” I find it absurd. This is all the more true when you look at ancient history. Forget Jeju I...
아래 논문은 GPT4.5 deep research를 활용하여 나의 다음 주장을 논문으로 작성한 것이다.
The paper below was written as a formal paper using GPT4.5 deep research, based on the following argument of mine.
trailing slash 리디렉션이 HTTP 로 떨어지는 이슈와 해결법
L4 로드밸런서 + Nginx 환경에서 trailing slash 리디렉션이 HTTP 로 떨어지는 이슈와 해결법
Fixing trailing slash redirects that drop to HTTP in an L4 load balancer + Nginx setup
상황 yarn workspace 사용 중 각 package 별로 build output 생성하고, js 파일로 배포하여 마이크로 프론트엔드 스타일로 사용하고자 함 build output 파일 위치 예시: /docroot/packages/footer/dist/footer...
The Situation Using yarn workspaces The goal is to generate a build output for each package and deploy them as js files, micro-frontend style Example ...
한국 드라마의 고부 갈등: 시대별 변화와 대표 작품 분석
Mother-in-Law Conflict in Korean Dramas: Changes Across Eras and an Analysis of Representative Works
1970년대부터 현대까지 ‘시집 못 간 늙은 시누이’ 캐릭터 분석
Analyzing the ‘Unmarried Old Sister-in-Law’ Character from the 1970s to Today
아테네 민주정의 펠라스기 기원: 망각된 선주민 질서와 문명 기억의 역설
The Pelasgian Origins of Athenian Democracy: The Forgotten Indigenous Order and the Paradox of Civilizational Memory
청동기 시대의 붕괴와 고대 이탈리아 민족의 형성
The Late Bronze Age Collapse and the Formation of Ancient Italian Peoples
떠돌이 점쟁이에 대한 연구: 이동성과 공간의 문화사
A Study of Wandering Fortune-Tellers: A Cultural History of Mobility and Space
한국 인문학 내 패러다임 전환의 가능성 - 강신무·세습무 유형론 붕괴 사례를 중심으로
The Possibility of a Paradigm Shift in Korean Humanities - Focusing on the Collapse of the Possessed Shaman / Hereditary Shaman Typology
1700년 일본 최고 지성이자 사상적 괴객 아라이 하쿠세키가 바라본 서양 문명, 그리고 종교적 헌신을 위해 목숨을 바친 에스파냐 선교사 조반니 사도티의 이야기다. 불과 4번의 만남이었을 뿐이지만, 아라이 하쿠세키와 조반니 사도티는 서로의 지성과 인품을 인정한다. 하지만 막부의 신하...
This is the story of Western civilization as seen by Arai Hakuseki, Japan’s foremost intellect and a maverick thinker in 1700, and of Giovanni Sidotti, a Spa...
일본 제조업의 기술력은 탁월하다 너무나 탁월한 나머지 일본 내에서만 수많은 기업이 경쟁 중이다 이들이 먼저 신기술을 개발하고 일본 기업끼리 경쟁하다 보면 어느새 기술이 한국과 중국에 유출... 값싼 제품에 밀린 일본 기업은 해당 시장에서 도태된다 그리고 새로운 기술을 개발해 새로운...
0. 클라우드 난민
0. Cloud Refugee
Updated! For new IBM Cloud on 2019.06.24.
Introduction
서론 제식 훈련, 특히 병사들이 한걸음 한걸음 맞춰 행진하는 훈련은 고대부터 현대에 이르기까지 군대 훈련의 초석이 되어 왔습니다. “발 맞춰 걷기”는 지휘관의 명령에 따라 부대 전체가 일제히 동기화된 행진을 하는 것을 의미하며, 그 목적은 시대에 따라 변화해 왔습니다. 초기에는 대...
Introduction Drill, and especially the training in which soldiers march in step one stride at a time, has been a cornerstone of military training from antiqu...
운영하는 서비스 중 ASP와 Visual Basic으로 만들어진 구닥다리 사이트가 하나 있다. 어느 날 google chrome에서 사이트를 열어보니 화면 한 구석이 휑하다.
Among the services I operate, there’s an old-fashioned site built with ASP and Visual Basic. One day I opened the site in google chrome, and one corner of th...
운영하는 서비스 중 ASP와 Visual Basic으로 만들어진 구닥다리 사이트가 하나 있다. 어느 날 google chrome에서 사이트를 열어보니 화면 한 구석이 휑하다.
Among the services I operate, there’s an old-fashioned site built with ASP and Visual Basic. One day I opened the site in google chrome, and one corner of th...
마이크로소프트 서피스 프로3(이하 서피스)의 OS를 재설치 할 일이 생겼다. 서피스는 편리하게도 다양한 재설치 및 초기화 옵션을 제공한다. 하지만 나는 그런걸 믿지 않는다. windows95 시절에 하드플로피 디스크 30장을 동원, 백업 후 포맷을 했다가 다 날려먹은 뼈아픈 기억 ...
I had to reinstall the OS on my Microsoft Surface Pro 3 (hereafter “the Surface”). Conveniently, the Surface offers a variety of reinstall and reset options....
마이크로소프트 서피스 프로3(이하 서피스)의 OS를 재설치 할 일이 생겼다. 서피스는 편리하게도 다양한 재설치 및 초기화 옵션을 제공한다. 하지만 나는 그런걸 믿지 않는다. windows95 시절에 하드플로피 디스크 30장을 동원, 백업 후 포맷을 했다가 다 날려먹은 뼈아픈 기억 ...
I had to reinstall the OS on my Microsoft Surface Pro 3 (hereafter “the Surface”). Conveniently, the Surface offers a variety of reinstall and reset options....
나는 짬뽕이라는 음식을 좋아하지 않는다. 한국 짬뽕의 주류인 해물 짬뽕은 더욱 그렇다. 비린 맛을 매운 맛으로 가리고, 매운 맛을 비린 맛으로 감추는 모양새가 영 못마땅하다. 아마도 분명하고 명쾌한 것을 좋아하는 나의 성향 때문일 터이다.
I don’t like jjamppong. And the seafood jjamppong that dominates the Korean variety, even less so. The way it hides a fishy taste behind spiciness and masks ...
얼마 전부터 지인의 강력한 권유로 살사를 배우기 시작했다. 그간 나는 춤과 인연이 전혀 없었다. 혼란스러웠던 세기말, 그 시절에 청소년기를 보냈다면 누구나 한 번쯤 따라해봤다는 HOT와 GOD의 춤조차 근처에도 가지 않았다. 그래도 내심 내가 잘 할거라는 자신은 있었다. 그간 운동...
A little while ago, at the strong urging of an acquaintance, I started learning salsa. Up until then, I had had absolutely no connection to dance. I never we...
인하공전 축제 마지막 밤, 공연 무대의 최후를 장식하고자 온 선미를 보기 위해 수많은 인파가 몰렸다. 나 역시 기꺼이 함께 했다. 어떻게든 가까이서 보고 싶다는 열망으로 건장한 청년들과 부비적거리며 어찌어찌 다다른 곳은 무대 앞 15미터, 아쉽지만 그 이상은 어려운 거리였다. 그녀...
On the final night of the Inha Technical College festival, a huge crowd gathered to see Sunmi, who had come to close out the festival’s performance stage. I ...
인하공전 축제 마지막 밤, 공연 무대의 최후를 장식하고자 온 선미를 보기 위해 수많은 인파가 몰렸다. 나 역시 기꺼이 함께 했다. 어떻게든 가까이서 보고 싶다는 열망으로 건장한 청년들과 부비적거리며 어찌어찌 다다른 곳은 무대 앞 15미터, 아쉽지만 그 이상은 어려운 거리였다. 그녀...
On the final night of the Inha Technical College festival, a huge crowd gathered to see Sunmi, who had come to close out the festival’s performance stage. I ...
인하공전 축제 마지막 밤, 공연 무대의 최후를 장식하고자 온 선미를 보기 위해 수많은 인파가 몰렸다. 나 역시 기꺼이 함께 했다. 어떻게든 가까이서 보고 싶다는 열망으로 건장한 청년들과 부비적거리며 어찌어찌 다다른 곳은 무대 앞 15미터, 아쉽지만 그 이상은 어려운 거리였다. 그녀...
On the final night of the Inha Technical College festival, a huge crowd gathered to see Sunmi, who had come to close out the festival’s performance stage. I ...
0. 시작
0. Getting Started
0. 시작
0. Getting Started
0. 시작
0. Getting Started
0. 시작
0. Getting Started
0. 기묘한 조합
0. A Strange Combination
IIS6.0에서 JSON을 내려받을 일이 생겼다. 그런데 잘 안된다. 이런 오류 메시지가 뜬다.
I ran into a situation where I needed to download JSON from IIS 6.0. But it wouldn’t work. I kept getting this error message.
내게는 새마을금고에서 일하는 친구가 하나 있다. 이 친구는 동네의 작은 지점에서 일을 하는데, 이런 곳이 흔히 그렇듯 긴급한 업무만 얼른 보러가는 찬바람 부는 그런 은행이 아니다. 오히려 할일없는 동네 주민들이 들러 한 수다 떨고가는 마을 경로당 겸 사랑방과 비슷하다고 하겠다. 은...
I have a friend who works at a Saemaul Geumgo (a community credit cooperative). This friend works at a small neighborhood branch, and as is often the case wi...
내게는 새마을금고에서 일하는 친구가 하나 있다. 이 친구는 동네의 작은 지점에서 일을 하는데, 이런 곳이 흔히 그렇듯 긴급한 업무만 얼른 보러가는 찬바람 부는 그런 은행이 아니다. 오히려 할일없는 동네 주민들이 들러 한 수다 떨고가는 마을 경로당 겸 사랑방과 비슷하다고 하겠다. 은...
I have a friend who works at a Saemaul Geumgo (a community credit cooperative). This friend works at a small neighborhood branch, and as is often the case wi...
물리학자이자 시인이었던 메이지-다이쇼 시대 일본인의 수필집. 담담하게 자연과 사물과 인간을 관찰하며 묘사한다. 수필에서 흔히 볼법한 감정의 과잉은 없다. 그렇기에 괜한 방해없이 그의 눈에 비치는 광경을 바로 눈 앞에서 보는 듯 빠져든다. 그렇다고 결코 무미無味하지는 않다. 그의 글...
An essay collection by a Japanese physicist and poet of the Meiji-Taisho era. He observes and describes nature, objects, and people with a calm, even-tempere...
글을 읽다보면 가끔씩 그 필력에 사로잡힐 때가 있다. 장절함이든 속도감이든, 무엇이든 좋다. 문장이 뿜어내는 힘을 타고 정신없이 책을 넘기다보면 어느새 책장의 끝이 보이는 순간이 오는데, 그러면 문득 아쉬워하며 나도 이런 글을 써보고 싶은 것이다. 아사이 료의 ‘시간을 달리는 여유...
When reading, there are moments when you find yourself captivated by the sheer power of the writing. Whether it’s the grandeur or the sense of momentum, anyt...
전철을 타고 긴 시간 통근을 한다는 것은 꽤나 고통스러운 일이다. 대체로 만원이고, 비좁고, 덥다. 그렇게 전철을 타고 내리는 사람들 사이에 끼어 서있노라면, 좌석에 앉아가는 승객들을 절로 부러운 눈으로 쳐다보기 마련이다. 어떻게든 앉아서 갈 심산으로 일찌감치 출근을 시작하여 자리...
Commuting by train for a long stretch of time is quite a painful ordeal. The cars are usually packed, cramped, and hot. As you stand wedged among the passeng...
전철을 타고 긴 시간 통근을 한다는 것은 꽤나 고통스러운 일이다. 대체로 만원이고, 비좁고, 덥다. 그렇게 전철을 타고 내리는 사람들 사이에 끼어 서있노라면, 좌석에 앉아가는 승객들을 절로 부러운 눈으로 쳐다보기 마련이다. 어떻게든 앉아서 갈 심산으로 일찌감치 출근을 시작하여 자리...
Commuting by train for a long stretch of time is quite a painful ordeal. The cars are usually packed, cramped, and hot. As you stand wedged among the passeng...
전철을 타고 긴 시간 통근을 한다는 것은 꽤나 고통스러운 일이다. 대체로 만원이고, 비좁고, 덥다. 그렇게 전철을 타고 내리는 사람들 사이에 끼어 서있노라면, 좌석에 앉아가는 승객들을 절로 부러운 눈으로 쳐다보기 마련이다. 어떻게든 앉아서 갈 심산으로 일찌감치 출근을 시작하여 자리...
Commuting by train for a long stretch of time is quite a painful ordeal. The cars are usually packed, cramped, and hot. As you stand wedged among the passeng...
전철을 타고 긴 시간 통근을 한다는 것은 꽤나 고통스러운 일이다. 대체로 만원이고, 비좁고, 덥다. 그렇게 전철을 타고 내리는 사람들 사이에 끼어 서있노라면, 좌석에 앉아가는 승객들을 절로 부러운 눈으로 쳐다보기 마련이다. 어떻게든 앉아서 갈 심산으로 일찌감치 출근을 시작하여 자리...
Commuting by train for a long stretch of time is quite a painful ordeal. The cars are usually packed, cramped, and hot. As you stand wedged among the passeng...
전철을 타고 긴 시간 통근을 한다는 것은 꽤나 고통스러운 일이다. 대체로 만원이고, 비좁고, 덥다. 그렇게 전철을 타고 내리는 사람들 사이에 끼어 서있노라면, 좌석에 앉아가는 승객들을 절로 부러운 눈으로 쳐다보기 마련이다. 어떻게든 앉아서 갈 심산으로 일찌감치 출근을 시작하여 자리...
Commuting by train for a long stretch of time is quite a painful ordeal. The cars are usually packed, cramped, and hot. As you stand wedged among the passeng...
전철을 타고 긴 시간 통근을 한다는 것은 꽤나 고통스러운 일이다. 대체로 만원이고, 비좁고, 덥다. 그렇게 전철을 타고 내리는 사람들 사이에 끼어 서있노라면, 좌석에 앉아가는 승객들을 절로 부러운 눈으로 쳐다보기 마련이다. 어떻게든 앉아서 갈 심산으로 일찌감치 출근을 시작하여 자리...
Commuting by train for a long stretch of time is quite a painful ordeal. The cars are usually packed, cramped, and hot. As you stand wedged among the passeng...
전철을 타고 긴 시간 통근을 한다는 것은 꽤나 고통스러운 일이다. 대체로 만원이고, 비좁고, 덥다. 그렇게 전철을 타고 내리는 사람들 사이에 끼어 서있노라면, 좌석에 앉아가는 승객들을 절로 부러운 눈으로 쳐다보기 마련이다. 어떻게든 앉아서 갈 심산으로 일찌감치 출근을 시작하여 자리...
Commuting by train for a long stretch of time is quite a painful ordeal. The cars are usually packed, cramped, and hot. As you stand wedged among the passeng...
나는 글 읽기를 좋아한다. 그리고 제법 많이 읽는 축에 속한다고 자부한다. 아무튼 늘 무언가를 읽고 있으니까. 하지만 그 주제는 대개 정해져 있다. 경제, 역사, 과학이 대부분이고, 문학류는 거의 읽지 않는다. 수필은 말할 필요도 없다. 요컨대 실용적인 글만 찾아본다는거다. 자연히...
I love to read. And I pride myself on being among those who read a fair amount. After all, I’m always reading something. But the topics are mostly fixed. Eco...
나는 글 읽기를 좋아한다. 그리고 제법 많이 읽는 축에 속한다고 자부한다. 아무튼 늘 무언가를 읽고 있으니까. 하지만 그 주제는 대개 정해져 있다. 경제, 역사, 과학이 대부분이고, 문학류는 거의 읽지 않는다. 수필은 말할 필요도 없다. 요컨대 실용적인 글만 찾아본다는거다. 자연히...
I love to read. And I pride myself on being among those who read a fair amount. After all, I’m always reading something. But the topics are mostly fixed. Eco...
Update! 2019-08-04
Update! 2019-08-04
Update! 2019-08-04
Update! 2019-08-04
git에서 파일의 변경 이력을 확인하는 방법은 간단하다. file_path에는 확인하고픈 파일의 경로를 넣어준다.
Checking a file’s change history in git is simple. Put the path of the file you want to check in file_path.
git에서 파일의 변경 이력을 확인하는 방법은 간단하다. file_path에는 확인하고픈 파일의 경로를 넣어준다.
Checking a file’s change history in git is simple. Put the path of the file you want to check in file_path.
git에서 파일의 변경 이력을 확인하는 방법은 간단하다. file_path에는 확인하고픈 파일의 경로를 넣어준다.
Checking a file’s change history in git is simple. Put the path of the file you want to check in file_path.
너에게 닥친 고난이 아무리 커보이더라도, 명심해라, 아직 빙산의 일각일 뿐이다.
No matter how great the hardship before you appears, remember — it is still only the tip of the iceberg.
1. ‘Promise’이(가) 정의되지 않았습니다.
1. ‘Promise’ is undefined.
1. ‘Promise’이(가) 정의되지 않았습니다.
1. ‘Promise’ is undefined.
webpack 시작 Vue.js 등의 프론트엔드 프레임워크를 사용해서 개발을 시작하면 webpack 사용을 피할 수 없다. webpack에서는 webpack-dev-server를 제공하는데, 개발시에 로컬 웹서버 역할을 해준다. webpack의 설정은 상당히 복잡하지만, 대부분...
Getting Started with webpack Once you start developing with a frontend framework like Vue.js, using webpack becomes unavoidable. webpack provides webpack-dev...
기술 문서를 작성할 때 sphinx를 사용하면 편리하다. 기술문서 번역을 한다면 sphinx-intl은 아주 유용하다. 그 장점에는 여러가지가 있지만, 기술 문서 번역자에게 가장 큰 고통을 주는 문제, 바로 원본 문서의 잦은 변경 또한 쉽게 해결해준다. 변경된 부분만 찍어서 알...
When you write technical documentation, using sphinx is convenient. And if you are translating technical documentation, sphinx-intl is extremely useful. It h...
기술 문서를 작성할 때 sphinx를 사용하면 편리하다. 기술문서 번역을 한다면 sphinx-intl은 아주 유용하다. 그 장점에는 여러가지가 있지만, 기술 문서 번역자에게 가장 큰 고통을 주는 문제, 바로 원본 문서의 잦은 변경 또한 쉽게 해결해준다. 변경된 부분만 찍어서 알...
When you write technical documentation, using sphinx is convenient. And if you are translating technical documentation, sphinx-intl is extremely useful. It h...
Server for FCM Admin
FCM’s device token is same with GCM’s device token because FCM includes GCM. But FCM’s token has more information than GCM’s. So if you want to convert FCM’s...
이거 정말 좋은건데 모르시는 분들이 있어 안타까움에 올린다.
This is a really great feature, and it’s a shame that some people don’t know about it, so I’m sharing it.
Stack Overflow에 새로운 기능이 추가되었다. 화면 우측 하단을 보면 고무 오리가 천연덕스레 떠있다.
A new feature has been added to Stack Overflow. Look at the bottom-right of the screen and you’ll see a rubber duck floating there, cool as a cucumber.
Stack Overflow에 새로운 기능이 추가되었다. 화면 우측 하단을 보면 고무 오리가 천연덕스레 떠있다.
A new feature has been added to Stack Overflow. Look at the bottom-right of the screen and you’ll see a rubber duck floating there, cool as a cucumber.
Stack Overflow에 새로운 기능이 추가되었다. 화면 우측 하단을 보면 고무 오리가 천연덕스레 떠있다.
A new feature has been added to Stack Overflow. Look at the bottom-right of the screen and you’ll see a rubber duck floating there, cool as a cucumber.
요즘 스위프트로 iOS 앱을 개발하고 있다. 네이티브앱은 아니고 웹뷰로 이미 개발되어 있는 웹페이지를 띄워주는 앱인데, 열심히 개발하고 있자니 난데없이 화면이 하얗게 침묵했다. 불과 몇 초 전까지만 해도 잘 돌아가던 기능이다.
These days I’m developing an iOS app with Swift. It’s not a native app but one that loads an already-built web page in a web view, and as I was busily workin...
나는 JavaScript가 어렵다. 일단 언어 자체부터 상당히 난해하다. 뿐만 아니라 하루가 멀다하고 새로운 기술이 나온다. 그냥 또 뭔가 나왔는가보다 하고 넘기기에는 너무나 매력적인 기술이라 놓칠 수도 없다. 그러는 사이에 세월은 흘렀고, 어느새 JavaScript는 단지 언어 ...
JavaScript is hard for me. To begin with, the language itself is quite confusing. On top of that, new technologies appear practically every day. They are far...
회사에서 운영하는 서비스 중 안드로이드 앱이 있는데, 이 앱에서는 아직도 GCM으로 push messege를 보내고 있다. 하지만 더이상 그럴 수 없는 상황이 되었다.
One of the services my company operates is an Android app, and this app still sends push messages via GCM. But it has gotten to the point where we can no lon...
회사에서 운영하는 서비스 중 안드로이드 앱이 있는데, 이 앱에서는 아직도 GCM으로 push messege를 보내고 있다. 하지만 더이상 그럴 수 없는 상황이 되었다.
One of the services my company operates is an Android app, and this app still sends push messages via GCM. But it has gotten to the point where we can no lon...
AWS의 서버리스 웹 애플리케이션 구축 튜토리얼을 따라하고 있다. AWS를 내가 직접 만지는건 3년만이다. 그간 모르긴 몰라도 많이 바뀌었다. aws cli조차도 구성하기 힘들었다. 튜토리얼을 따라하기 위하여 aws cli로 S3를 만질 수 있도록 설정하는 과정을 정리해보았다.
I’m following AWS’s Build a Serverless Web Application tutorial. It’s been three years since I last touched AWS hands-on. In the meantime, it has no doubt ch...
AWS의 서버리스 웹 애플리케이션 구축 튜토리얼을 따라하고 있다. AWS를 내가 직접 만지는건 3년만이다. 그간 모르긴 몰라도 많이 바뀌었다. aws cli조차도 구성하기 힘들었다. 튜토리얼을 따라하기 위하여 aws cli로 S3를 만질 수 있도록 설정하는 과정을 정리해보았다.
I’m following AWS’s Build a Serverless Web Application tutorial. It’s been three years since I last touched AWS hands-on. In the meantime, it has no doubt ch...
Vue.js로 만든 기존 코드를 es6로 바꾸는 작업을 하고 있다. 하다보니 methods를 정의할 때, 화살표 함수를 사용하면 안된다는 사실을 알게됐다. 아래와 같이 정리해 보았다. 이 글로부터 큰 도움을 받았다.
I’ve been working on converting existing Vue.js code to es6. While doing so, I learned that you should not use arrow functions when defining methods. I’ve pu...
나는 게으른 사람이다. 그리고 뭔가를 백업하는건 아주 귀찮은 일이다. 소스코드는 그나마 낫다. 개발하고 수정할 때마다 git remote 서버로 push하면 된다. 하지만 작업용 및 관리용으로 들고 있는 work 폴더를 백업하는건 너무나도 귀찮은 일이다. 그러니 자동화하기로 했다....
I am a lazy person. And backing something up is a really tedious chore. Source code isn’t so bad. Whenever I work on and modify it, I can just push it to a g...
나는 게으른 사람이다. 그리고 뭔가를 백업하는건 아주 귀찮은 일이다. 소스코드는 그나마 낫다. 개발하고 수정할 때마다 git remote 서버로 push하면 된다. 하지만 작업용 및 관리용으로 들고 있는 work 폴더를 백업하는건 너무나도 귀찮은 일이다. 그러니 자동화하기로 했다....
I am a lazy person. And backing something up is a really tedious chore. Source code isn’t so bad. Whenever I work on and modify it, I can just push it to a g...
나는 게으른 사람이다. 그리고 뭔가를 백업하는건 아주 귀찮은 일이다. 소스코드는 그나마 낫다. 개발하고 수정할 때마다 git remote 서버로 push하면 된다. 하지만 작업용 및 관리용으로 들고 있는 work 폴더를 백업하는건 너무나도 귀찮은 일이다. 그러니 자동화하기로 했다....
I am a lazy person. And backing something up is a really tedious chore. Source code isn’t so bad. Whenever I work on and modify it, I can just push it to a g...
tl;dr: npm audit fix로 취약점을 해결하자
tl;dr: Let’s fix vulnerabilities with npm audit fix
아래 링크는 markdown에서 syntax highlighting을 지원하는 language list다.
The link below is the list of languages supported for syntax highlighting in markdown.
Working code link: CodePen
For Exporting JSON to Excel file, SheetJS is useful. SheetJS is complicated to use, but powerful and well maintained. I tried to use vue-json-excel, but on v...
가내수공업적 로그 분석
Cottage-Industry-Style Log Analysis
C#에서 Json.NET의 사용 예제를 정리해보았다. 왜냐면 내가 자꾸 잊어먹기 때문… 계속 업데이트 할 예정이다.
I’ve put together some usage examples for Json.NET in C#. The reason being that I keep forgetting them… I plan to keep updating this.
C#에서 Json.NET의 사용 예제를 정리해보았다. 왜냐면 내가 자꾸 잊어먹기 때문… 계속 업데이트 할 예정이다.
I’ve put together some usage examples for Json.NET in C#. The reason being that I keep forgetting them… I plan to keep updating this.
철기 시대의 무역과 경제 성장
Trade and Economic Growth in the Iron Age
철기 시대의 무역과 경제 성장
Trade and Economic Growth in the Iron Age
철기 시대의 무역과 경제 성장
Trade and Economic Growth in the Iron Age
철기 시대의 무역과 경제 성장
Trade and Economic Growth in the Iron Age
어릴 적 시골의 우리 집 헛간에 눌러 살던 고양이 모녀가 있었다. 마침 방학이라 시간도 많았던지라, 그늘에 앉아 고양이 가족이 노는 모습을 지켜보는게 나의 일과였다. 처음에는 나를 몹시도 경계하던 고양이 가족이었지만, 곧 기묘한 관계가 형성되었다. 고양이 쪽에서 내게 먼저 다가오는...
When I was little, there was a mother cat and her daughter that had settled into the barn at our house in the countryside. It happened to be school vacation,...
HTML textarea로 만들어진 게시판을 TinyMCE로 교체하는 작업을 하던 도중, 개행문자가 DB에 CRLF(\r\n)로 저장되어 귀찮은 일이 생겼다.
While working on replacing an HTML textarea-based board with TinyMCE, I ran into an annoying issue because the newline characters were stored in the DB as CR...
처음 Vuetify를 Add하고 프로젝트를 빌드하면 warning이 많이 뜬다.
When you first add Vuetify and build the project, you’ll see many warning messages.
아래 사진은 인하대학교 우편분류실 입구다.
The photo below is the entrance to the Inha University mail sorting room.
관리가 제대로 되지 않고 있는 리눅스 서버가 하나 있다. 이 서버의 log 파일을 지우기 위해 사용하는 명령어를 사용 순서대로 정리해보았다.
There’s a Linux server that hasn’t been properly managed. I’ve put together, in the order I use them, the commands for deleting that server’s log files.
It works on my Node.js project.
Updated! For new IBM Cloud on 2019.06.24.
몇일 전, 출근길에 분주히 움직이는 한 무리의 일꾼들이 눈에 띄었다. 식당을 철거 중이었다. 영업을 중단한지 한 달 만이었다. 그곳은 내가 즐겨찾던 식당이었다.
A few days ago, on my way to work, I noticed a group of workers bustling about. They were demolishing a restaurant. It had been just a month since the place ...
토이 프로젝트에 크롤링이 필요하여 잡은 책이다. 하지만 프로젝트가 곧 엎어져(?) 버린 탓에 크롤러를 직접 만들 필요는 없었다. 이런 맥빠지는 일을 겪었지만 책을 덮을 수는 없었다. 웹 크롤링의 어려움이라 함은 결국 제대로 만들어지지 않은 웹페이지와의 싸움이다. 그리고 이 책은 바...
This is a book I picked up because I needed crawling for a toy project. But the project soon fell through (?), so I never actually needed to build a crawler ...
이게 아닌 줄 알아도 조직은 굴러간다. 그렇게 스스로 굴러가다 보면, 거기에 취해있다 보면 무엇이 잘못인지조차 잊는다. 끝내는 파멸할테지만, 그렇게 된 다음에라도 깨달을 수 있을까? 무엇이 잘못이었는지.
Even when people know it’s wrong, the organization keeps rolling along. And as it keeps rolling on its own, as people grow intoxicated by it, they forget eve...
프로젝트 시작
Starting the project
북유럽 신화의 신들은 모순적이다. 이들은 내가 평소 생각하던 신의 모습과는 다르다. 모든 것을 알고자 하나 실은 아무 것도 모르는, 혹은 몰랐던 신 오딘. 신이면서도 신이 아니며, 모든 신에게 종말을 내릴 자 로키. 누구보다 강하다지만 그 힘을 어찌 써야할지 무지한 토르. 신보다 ...
The gods of Norse mythology are contradictory. They are different from the image of a god I usually had in mind. Odin, the god who seeks to know everything y...
Environment
Spring Data JPA를 쓰다가 Sorting이 안되는 고통을 겪었다. 평소처럼 Spring Data method명으로 order by를 먹이려는데, 왜인지는 모르겠으나 컬럼명을 발견하지 못하여, 쿼리문이 만들어지지 못하는 오류가 발생했다. 그래서 Sort 객체를 사용한 간단...
While using Spring Data JPA, I went through the pain of sorting not working. As usual, I tried to apply order by through a Spring Data method name, but for s...
Spring Data JPA를 쓰다가 Sorting이 안되는 고통을 겪었다. 평소처럼 Spring Data method명으로 order by를 먹이려는데, 왜인지는 모르겠으나 컬럼명을 발견하지 못하여, 쿼리문이 만들어지지 못하는 오류가 발생했다. 그래서 Sort 객체를 사용한 간단...
While using Spring Data JPA, I went through the pain of sorting not working. As usual, I tried to apply order by through a Spring Data method name, but for s...
오늘은 정말이지 이상한 날이었다. 늘 그렇듯 아주 간단한 개발 요청이 한 건 들어왔고, 나는 몇 분 만에 기능을 구현했다. 아무 문제도 없었다. 하지만 끝이 아니었다. 방금 손을 보았던 그 기능의 바로 옆에 있는 기능이 더이상 정상 동작하지 않았다. 오류 메시지도 없었다. 마치 처...
Today was a truly strange day. As always, a very simple development request came in, and I implemented the feature in just a few minutes. There were no probl...
400년 전의 인천에 이윤생이라는 양반이 살았다. 그 당시 나라는 이미 외국과 한 차례 전쟁을 치뤘고, 다가오는 전쟁을 준비하고 있었다. 이윤생은 활 쏘고 말 달리기를 잘하여 무반 벼슬을 받았다. 이윤생이 정식으로 무과에 급제했는지, 그리고 그가 받은 관직인 중앙군 장교를 정말로 ...
Four hundred years ago, a nobleman named Lee Yoon-saeng lived in Incheon. By that time, the country had already fought one war with a foreign power, and was ...
재미있는 기사가 있어 요약해보았다.
I came across an interesting article and decided to summarize it.
dispatch를 쓰면 된다.
You can use dispatch.
청동기 시대 시리아의 거대 도시 중 하나였던 Qatna의 왕궁 발굴 현장에서 코끼리뼈로 가득찬 방 2개가 발견되었다. 왕궁은 청동기 시대 중기에 건설되어 청동기 시대 말기(1340 B.C)에 파괴된 것으로 보인다. 코끼리 뼈가 있는 방의 높이는 5m 이상이고 가로, 세로 3미터가 ...
At the excavation site of the royal palace in Qatna, one of the great cities of Bronze Age Syria, two rooms filled with elephant bones were discovered. The p...
A Record of Horseback Riding, Written in Bone and Teeth를 읽고 쓴 글
A piece written after reading A Record of Horseback Riding, Written in Bone and Teeth
아일랜드와 영국 제국주의에 관한 재미있는 기사가 있어 소개한다. 이웃한 제국주의 국가로부터 식민 지배를 당한 한국의 입장에서도 생각할 거리가 있다.
I came across an interesting article about Ireland and British imperialism, so I’m sharing it here. For Korea, which was colonized by a neighboring imperiali...
Python의 Requests 모듈로 C#에 json 데이터를 post request로 보낼 때 아래와 같은 500 에러를 맞이할 수 있다.
When you send JSON data to C# as a POST request using Python’s Requests module, you may run into a 500 error like the one below.
회사에서 급히 쿠버네티스를 사용할 일이 생겼다. helm chart를 알게 되었기 때문. 복잡한 운영환경 구축을 아주 쉽게 해준다는 마법같은 약속! 하지만 helm chart 구성을 수정하려고 하니 몹시 당황스러웠다. 그간 내가 쓰던 docker와 docker-compose 지식으...
At work, I suddenly found myself needing to use Kubernetes. That was because I had come across Helm charts. The magical promise of making it incredibly easy ...
A Hitchhiker’s Guide to an Ancient Geomagnetic Disruption
A Hitchhiker’s Guide to an Ancient Geomagnetic Disruption
How the World’s Oldest Wooden Sculpture Is Reshaping Prehistory
How the World’s Oldest Wooden Sculpture Is Reshaping Prehistory
How Many Tyrannosaurus Rexes Ever Lived on Earth? Here’s a New Clue.
How Many Tyrannosaurus Rexes Ever Lived on Earth? Here’s a New Clue.
What Doomed a Sprawling City Near St. Louis 1,000 Years Ago?
What Doomed a Sprawling City Near St. Louis 1,000 Years Ago?
The Flu Vanished During Covid. What Will Its Return Look Like?
The Flu Vanished During Covid. What Will Its Return Look Like?
I’m a Physicist Who Searches for Aliens. U.F.O.s Don’t Impress Me.
I’m a Physicist Who Searches for Aliens. U.F.O.s Don’t Impress Me.
update: 20210811
update: 20210811
node_modules의 구조
The Structure of node_modules
javascript Set 자료형에 object를 element로 넣는다면, 각 element가 unique한지 어떻게 구별하는 기준은 무엇일까? object 안의 property value까지 비교할까?
If you put objects as elements into a JavaScript Set, what is the criterion for deciding whether each element is unique? Does it compare even the property va...
Did the ‘Black Death’ Really Kill Half of Europe? New Research Says No. 요약
A summary of Did the ‘Black Death’ Really Kill Half of Europe? New Research Says No.
HTML video tag의 onTimeUpdate 프로퍼티에 박히는 콜백은 가장 느릴 경우 250ms 마다 1회 동작한다.
The callback attached to the onTimeUpdate property of the HTML video tag fires, at its slowest, once every 250ms.
2023.04.06. v0.151.3 기준으로 Three.js의 버전이 올라가면서 더이상 THREE.RGBFormat API를 사용할 수 없게 되었다.
As of 2023.04.06, with the version bump in Three.js to v0.151.3, the THREE.RGBFormat API can no longer be used.
Vite의 자동 폴리필과 vue-tsc의 타입 체크는 완전히 따로 논다.
Vite’s automatic polyfilling and vue-tsc’s type checking operate completely independently of each other.
문제 HLS로 video를 재생하려는데, 최초 로딩시 너무 많은 네트워크 데이터를 사용한다. 나의 경우에는 최초 로딩시 무려 1분의 buffer를 하느라 60MB 가까운 데이터를 사용했다.
Problem I was trying to play video using HLS, but it consumed too much network data on the initial load. In my case, the initial load buffered a full minute ...
강화 흥왕리 이궁지 발굴조사보고서, 2019, 국립강화문화재연구소 본격적인 발굴이라기보다는 지표조사였다. 오랜 시간이 흘러 남아 있는 것은 드물었다. 담장의 흔적과 기단, 그리고 2개의 건물 뿐이었다. 정말로 이곳은 고려의 궁궐이었을까? 개경 천도 이후에는 어떤 곳이었고, 조선 시...
Excavation Report on the Detached Palace Site at Heungwang-ri, Ganghwa, 2019, Ganghwa National Research Institute of Cultural Heritage Rather than a full-sca...
영산강 유역의 고대고분 정밀분포조사보고서, 2011, 국립나주문화재연구소 엄다 재동 마을의 마한 고분은 오래 전부터 나의 마음을 잡아 끌었다. 이 경치 좋은 언덕에 무덤을 쓴 사람은 누구일까? 누구였기에 2천년에 가까운 시간이 흘렀음에도 우뚝한 무덤을 남긴걸까? 그에 대한 기억은 ...
Detailed Distribution Survey Report on Ancient Tombs in the Yeongsan River Basin, 2011, Naju National Research Institute of Cultural Heritage The Mahan tomb ...
영산강 유역의 고대고분 정밀분포조사보고서, 2011, 국립나주문화재연구소 엄다 재동 마을의 마한 고분은 오래 전부터 나의 마음을 잡아 끌었다. 이 경치 좋은 언덕에 무덤을 쓴 사람은 누구일까? 누구였기에 2천년에 가까운 시간이 흘렀음에도 우뚝한 무덤을 남긴걸까? 그에 대한 기억은 ...
Detailed Distribution Survey Report on Ancient Tombs in the Yeongsan River Basin, 2011, Naju National Research Institute of Cultural Heritage The Mahan tomb ...
영산강 유역의 고대고분 정밀분포조사보고서, 2011, 국립나주문화재연구소 엄다 재동 마을의 마한 고분은 오래 전부터 나의 마음을 잡아 끌었다. 이 경치 좋은 언덕에 무덤을 쓴 사람은 누구일까? 누구였기에 2천년에 가까운 시간이 흘렀음에도 우뚝한 무덤을 남긴걸까? 그에 대한 기억은 ...
Detailed Distribution Survey Report on Ancient Tombs in the Yeongsan River Basin, 2011, Naju National Research Institute of Cultural Heritage The Mahan tomb ...
영산강 유역의 고대고분 정밀분포조사보고서, 2011, 국립나주문화재연구소 엄다 재동 마을의 마한 고분은 오래 전부터 나의 마음을 잡아 끌었다. 이 경치 좋은 언덕에 무덤을 쓴 사람은 누구일까? 누구였기에 2천년에 가까운 시간이 흘렀음에도 우뚝한 무덤을 남긴걸까? 그에 대한 기억은 ...
Detailed Distribution Survey Report on Ancient Tombs in the Yeongsan River Basin, 2011, Naju National Research Institute of Cultural Heritage The Mahan tomb ...
영산강 유역의 고대고분 정밀분포조사보고서, 2011, 국립나주문화재연구소 엄다 재동 마을의 마한 고분은 오래 전부터 나의 마음을 잡아 끌었다. 이 경치 좋은 언덕에 무덤을 쓴 사람은 누구일까? 누구였기에 2천년에 가까운 시간이 흘렀음에도 우뚝한 무덤을 남긴걸까? 그에 대한 기억은 ...
Detailed Distribution Survey Report on Ancient Tombs in the Yeongsan River Basin, 2011, Naju National Research Institute of Cultural Heritage The Mahan tomb ...
목표: 애플 실리콘으로 stable diffusion 2를 돌려보자
Goal: let’s run stable diffusion 2 on Apple Silicon
10년이면 강산도 변한다는 옛말이 있다. 틀린 말이다. 적어도 근대 이후로는 말이다. 지도가 그려진지 100년이 지났으나, 지도를 손가락으로 짚으며 길과 건물을 살피노라면 여전히 100년 전 그 때 그 길을 걷는 것만 같다. 역사의 연구가 과거와 현재의 연결점을 찾는 작업이라면, ...
There is an old saying that even mountains and rivers change over ten years. It is wrong, at least when it comes to the modern era and beyond. A hundred year...
가상 면접 사례로 배우는 대규모 시스템 설계 기초, 2021, 인사이트, 알렉스 쉬, 이병준 역
System Design Interview - An Insider’s Guide, 2021, Insight, Alex Xu, translated by Byungjun Lee
eslint와 prettier의 개발 경험은 불쾌하다. 그 이유는
The developer experience with eslint and prettier is unpleasant. Here’s why.
환경 vite v3.6.0 bun v1.0.26
Environment vite v3.6.0 bun v1.0.26
내가 사는 마을에는 높고 긴 돌계단이 있다. 한 눈에 보기에도 오래된 계단 양측에는 산등성이를 따라 쌓은 집들이 다닥다닥 붙어있어 기묘한 경이감을 자아낸다. 힘겹게 계단을 올라서면 서울 시내가 한 눈에 내려다 보인다. 바로 일제 시대 때 만들어진 경성 야스쿠니 신사의 계단이다. 한...
In the neighborhood where I live, there is a tall, long flight of stone steps. Houses packed tightly along the mountain ridge on both sides of the visibly an...
영화 스타워즈에서는 중요한 순간마다 주인공에게 이미 고인이 된 스승의 목소리가 들린다. “루크, 포스를 믿어라.” 그러면 주인공은 미혹을 버리고 목소리의 가르침을 따른다. 그리고 우주를 구한다. 한낱 영화 속 이야기에 불과하지만, 낯설게 본다면 마냥 그렇지도 않다. 주인공이 들은 ...
In the movie Star Wars, at every crucial moment the hero hears the voice of his master, who has already passed away. “Luke, trust the Force.” And then the he...
즉각적인 반응을 이끌어내는 이야기가 있다. 이런 이야기가 되기 위한 조건은 많지 않다. 강자를 물리치는 약자, 거대한 전쟁, 압도적인 무공, 용기와 희생의 비장미, 일발역전의 계책이다. 무협지의 전형적인 레퍼토리를 말하는건가? 아니다. 고대 그리스-페르시아 전쟁을 다룬 헤로도토스의...
Some stories provoke an immediate response. It doesn’t take much for a story to have that effect: the weak defeating the strong, an enormous war, overwhelmin...
메이지 유신은 실로 빛난다. 역사상 이토록 적은 희생으로 근대화를 이룩한 비서구 국가의 사례가 또 있을까? 저자는 ‘밭두렁 키신저’(내가 만든 표현이다)가 유신이 성공할 수 있었던 원동력이라 본다. 흑선내항 이전에 이미 일본의 민중 사이에서는 다양한 사상이 백가쟁명 중이었다. 흑선...
The Meiji Restoration truly shines. Is there another example in history of a non-Western country achieving modernization at so small a cost? The author sees ...
HTML element의 scroll 이벤트는 어디에서 발생하는가? 햇갈리는 질문이다. 다시 말해보자. 내가 일으킨 scroll 이벤트는 어느 element에서 잡아 채는가? 그래도 햇갈린다. 다시 말해보자. onscroll 이벤트를 어느 element에 설정해야지 내가 원하는대로...
Where does an HTML element’s scroll event fire? It’s a confusing question. Let me put it another way. When I trigger a scroll, which element catches the scro...
내가 lodash와 underscore를 사용한지 어언 10년이 다 되어간다. 함수형 자바스크립트라면 나름 익숙하다고 생각했다. 따로 공부한 적은 없었지만 말이다. 하지만 이 책을 읽고 보니 내가 그간 오만했음을 뒤늦게 깨달았다.
It’s been nearly ten years now since I started using lodash and underscore. I thought I was fairly familiar with functional JavaScript, even though I had nev...
한 달여의 남미 종주는 브라질에서 시작하여 아르헨티나, 칠레, 볼리비아, 페루로 이어진다. 반시계 방향의 여정에서 보이는 남미 대륙의 풍광과 유적은 그야말로 장엄하다. 이과수 폭포, 안데스 산맥과 빙하,유우니 사막과 마추픽추의 거석에 이르기까지 무엇 하나 빼놓을 수 없다. 하지만 ...
A journey of about a month across South America begins in Brazil and continues through Argentina, Chile, Bolivia, and Peru. The landscapes and ruins of the S...
가장 낮은 곳에서 빛나는, 가장 인간적인 감정을 그 자체로 표현하기를 바랐던 사람
A man who, shining from the humblest places, wished to express the most human emotions exactly as they were.
정규식을 10년 넘게 써왔지만, 정규식은 늘 난해하고 가급적 피하고 싶은 방법이다. 디버깅이 너무 힘들기 때문이다! 이번 프로젝트에서는 본의 아니게 정규식을 많이 사용해야 했는데, 다행히 시대가 바뀌어서 AI가 멋진 정규식을 작성해 주었다. 하지만 일이 너무 쉽게 풀리면 오히려 불...
I’ve been using regular expressions for over ten years, but they have always been baffling and something I’d rather avoid. Debugging them is just too painful...
next.js 14의 공식 문서대로 하면 Jest를 설치가 안 된다. 그래서 방법을 정리해 보았다.
If you follow the official Next.js 14 documentation, Jest won’t install. So I put together a working approach.
평화와 질서가 있던 로마 제국 시절, 지중해는 번영의 바다였다. 하지만 제국이 멸망하자 지중해는 해적으로 들끓는다. 그로부터 1300년이 지나서 제국주의 시대가 도래하자 지중해의 해적은 근절되었다. 그동안 남부 유럽에서 500만 명이 납치 당했다고 한다. 물론 정확한 숫자는 아무도...
During the era of the Roman Empire, when peace and order prevailed, the Mediterranean was a sea of prosperity. But once the empire fell, the Mediterranean sw...
Android 앱 개발을 진행하면서 백그라운드에서 Chrome WebView를 실행하는 상황을 마주한 적이 있을 것입니다. 특히, 페이지 내에서 document.visibilityState를 호출했을 때 실제 화면에 웹뷰가 보이지 않음에도 불구하고 “visible”이라는 결과가 반...
While developing an Android app, you may have run into a situation where a Chrome WebView is running in the background. In particular, it can be confusing wh...
변신 미소녀물: 남성향 vs 여성향 애니메이션 비교 (세일러문과 웨딩 피치를 중심으로)
Transforming Magical Girl Anime: Male-Oriented vs. Female-Oriented (Centered on Sailor Moon and Wedding Peach)
tanstack query (구 react-query)의 useQuery 훅을 사용할 때, enabled: false 설정은 초기 쿼리 실행을 막는 옵션입니다. 그런데 refetch()와 함께 사용하면 어떻게 될까요?
When using the useQuery hook from tanstack query (formerly react-query), the enabled: false setting is an option that prevents the initial query execution. B...
환경 yarn 4(monorepo) react 19 tanstack query(react query) 5
Environment yarn 4 (monorepo) react 19 tanstack query (react query) 5
환경 yarn 4(monorepo) react 19 tanstack query(react query) 5
Environment yarn 4 (monorepo) react 19 tanstack query (react query) 5
11키티즈 게임에서 XState를 선택한 이유
Why We Chose XState for the 11Kitties Game
Vitest 환경에서도 .env 환경변수를 쓰고 싶다면?
Want to Use .env Environment Variables in a Vitest Environment Too?
총평 전반적으로 이명박이 외치니 전세계가 고개 숙였다는 기조의 책이다. 버냉키와 가이트너의 회고록과 비교하여 내용에 깊이가 없고, 단편적-단선적이다. 심지어 이명박 정권의 실책에 대해서는 아예 언급조차 하지 않는다. 대통령 재임 시절 그렇게 부지런하게 일했다고 자신하던 그였으나, ...
Overall Assessment By and large, this is a book that runs on the premise that the moment Lee Myung-bak spoke up, the whole world bowed its head. Compared to ...
일본 최초의 농학박사이자 일본 토질학의 창시자이며 탐험가였던 츠네토 노리타카(恒藤規隆)의 조선 탐험기. 당시 대한제국(조선)은 사실상 무법 지대로서 일본인조차 개탄해 마지 않았다. 해외 열강과의 약탈적 조약조차도 일단 그들이 폭력을 동원하여 사실상의 이권을 차지한 후에야 맺어졌다....
An account of the exploration of Joseon by Tsuneto Noritaka (恒藤規隆), Japan’s first doctor of agriculture, the founder of Japanese soil science, and an explore...
Galaxy S21 WebView 동영상 녹색 화면 이슈 디버깅 및 해결
Debugging and Fixing the Galaxy S21 WebView Video Green Screen Issue
청동기 시대의 붕괴와 고대 이탈리아 민족의 형성
The Late Bronze Age Collapse and the Formation of Ancient Italian Peoples
TL;DR 가상 슬라이드(Virtual Slides)를 켠 Swiper.js + React 프로젝트에서 prepend로 아이템을 추가하면서도 사용자가 보고 있던 슬라이드를 유지하는 방법은 Zustand에 “현재 슬라이드 전역 인덱스”를 저장하고, 리...
TL;DR In a Swiper.js + React project with Virtual Slides enabled, the way to prepend items while keeping the slide the user is currently viewing is: ...
11키티즈 개발을 위하여 frontend에서 POC를 수행하고 그 결과를 정리했다(2024년 초 수행).
To develop 11 Kitties, I ran a POC on the frontend and summarized the results (conducted in early 2024).
왜구란 정의할 수 없다. 그 단어는 각 집단 자신의 시각을 반영하며 남용해 온 나머지 무엇인지도 모르게 되어 버렸다. 왜구에 정체에 대한 연구는 한중일 삼국이 현재의 정체성을 완전히 잃어버린 후에나 가능할지도 모르겠다. 그러다보니 왜구를 어떻게 보았는지 자체가 역사인식론의 연구과제...
The wokou cannot be defined. The term has been abused so thoroughly, each group reflecting its own perspective, that we no longer even know what it means. Re...
1줄 요약
One-line summary
해방 이후 농촌의 일본어 생활호칭 잔존 현상 - 전남 함평 엄다리 번동 ‘아라이상’ 사례의 미시사적 고찰
The Persistence of Japanese Everyday Honorifics in Rural Korea After Liberation: A Microhistorical Study of the ‘Arai-san’ Case in Beondong, Eomdari, Hampyeo...
해방 이후 농촌의 일본어 생활호칭 잔존 현상 - 전남 함평 엄다리 번동 ‘아라이상’ 사례의 미시사적 고찰
The Persistence of Japanese Everyday Honorifics in Rural Korea After Liberation: A Microhistorical Study of the ‘Arai-san’ Case in Beondong, Eomdari, Hampyeo...
헨리 키신저의 『세계 질서』를 덮고 나면, 머릿속에는 두 줄의 강철 레일이 남는다. 하나는 베스트팔렌 체제가 닦아 놓은 세력균형의 레일, 다른 하나는 윌슨이 깔아 올린 이상주의의 레일이다. 국제정치는 이 두 선로 위를 동시에 달리는 기차처럼 흔들리고, 때로는 갈라지며, 결국에는 충...
When you close Henry Kissinger’s World Order, two steel rails remain in your mind. One is the rail of the balance of power laid down by the Westphalian syste...
FCM’s device token is same with GCM’s device token because FCM includes GCM. But FCM’s token has more information than GCM’s. So if you want to convert FCM’s...
FCM’s device token is same with GCM’s device token because FCM includes GCM. But FCM’s token has more information than GCM’s. So if you want to convert FCM’s...
I made a game using Vue.js, vuetify, firebase.
I heard a sad lyrics, technicalism love story.
Updated! For new IBM Cloud on 2019.06.24.
Updated! For new IBM Cloud on 2019.06.24.
Updated! For new IBM Cloud on 2019.06.24.
It works on my Node.js project.
There is no side effect. I got 100Gb!
1, !(bang)… very confused even Google are.