May 13, 2023 • ☕️ 5 min read
사랑니 아프다 🦷
tabindex="1"
(양의 정수)
tabindex="0"
div
, span
tabindex="-1"
(음의 정수)
CSS의 font-size
에는 larger
옵션이 있다. (large
아님)
/* <relative-size> values */
font-size: smaller;
font-size: larger;
CSS font-size의 relative-size(smaller
, larger
)를 사용하면 상위 요소(부모)의 font-size에 비례해서 폰트 사이즈가 조정된다.
window.open(url, target, windowFeatures)
세 번째 인자인 windowFeatures
에는 name-value
쌍의, 콤마로 구분된 이루어진 feature들을 인자로 넘길 수 있다 이 feature들은 윈도우의 기본 사이즈나 위치, 최소한의 팝업을 열 것인지 여부 등을 나타낸다.
ex) popup
, width
, height
, left
, top
, noopener
, noreferrer
Ref https://developer.mozilla.org/en-US/docs/Web/API/Window/open
테스트에서 each()
를 사용하여 파라미터화 테스트를 할 수 있다
import { areAnagrams } from "./";
test.each([
["cat", "bike", false],
["car", "arc", true],
["cat", "dog", false],
["cat", "act", true],
])("areAnagrams(%s, %s) returns %s", (first, second, expected) => {
expect(areAnagrams(first, second)).toBe(expected);
});
Ref https://www.daleseo.com/jest-each/
ts-pattern
import { match, P } from 'ts-pattern';
type Data =
| { type: 'text'; content: string }
| { type: 'img'; src: string };
type Result =
| { type: 'ok'; data: Data }
| { type: 'error'; error: Error };
const result: Result = ...;
const html = match(result)
.with({ type: 'error' }, () => `<p>Oups! An error occured</p>`)
.with({ type: 'ok', data: { type: 'text' } }, (res) => `<p>${res.data.content}</p>`)
.with({ type: 'ok', data: { type: 'img', src: P.select() } }, (src) => `<img src=${src} />`)
.exhaustive();
lodash에 ts-pattern과 비슷한 _.cond()
메서드
pairs
들을 돌며 truthy한 값을 반환하는 첫 번째 예측문에 해당하는 함수를 실행시킨다. 예측문-함수 쌍은 this
바인딩과 생성된 함수의 인자들로 호출된다.var func = _.cond([
[_.matches({ a: 1 }), _.constant("matches A")],
[_.conforms({ b: _.isNumber }), _.constant("matches B")],
[_.stubTrue, _.constant("no match")],
]);
func({ a: 1, b: 2 });
// => 'matches A'
func({ a: 0, b: 1 });
// => 'matches B'
func({ a: "1", b: "2" });
// => 'no match'
Ref
✂️ 왜 가위 규칙일까?? 가위를 사용해서 싹-둑 코드를 자를 수 있을 정도로 변수의 범위를 정확하게 나타낼 수 있기 때문에 그렇게 이름 붙었다. 가위 규칙을 따르면 변수의 범위도 코드 블록을 기준으로 나누어져서, 그 블록 안에서만 접근할 수 있게 된다. (당연히 언어 스펙에 있는 공식 명칭 같은 것은 아니고 그냥 개발자들 쓰는 표현이다.)
객체를 순회하면서 객체의 모든 프로퍼티에 대해서 콜백함수를 실행하는 함수이다.
코드 출처는 챗GPT, 실제 예시는 vanillaExtract의 walkObject
에서 찾아볼 수 있다
function walkObject(obj, callback) {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
var value = obj[key];
if (typeof value === "object") {
walkObject(value, callback);
} else {
callback(value, key, obj);
}
}
}
}
inset
- position: absolute
인 요소의 top
, right
, bottom
, left
프로퍼티구글의 챗봇 AI 서비스인 Bard(바드)가 영어 다음으로 한국어/일본어를 지원하기 시작했다.
구글 CEO에 따르면, 한국과 일본은 기술의 새로운 혁신지이며 한국어 지원하는 과정에서 기존에 영어만 지원하던 포맷에서 발견하지 못한 새로운 포인트들을 발견할 수 있을 것이라고 했다.
“1999년 서울에서 택시 운전자가 휴대전화 3대 이용 기억 강렬”
했다는 인터뷰가 나 또한 강렬하다 ㅋㅋㅋ
대체 어떤 택시 운전사셨길래…
Visual Editing은 CMS(Content Management Systems)를 이용하여 실시간으로 웹사이트의 컨텐츠를 수정하게끔 해준다. 실시간 컨텐츠 시각화로 개발자의 개입 없이 배포 프리뷰 버전을 볼 수 있다.
대단한 기술은 아닌 것 같지만 아이디어만큼은 대박이고 유용할 듯하다 💡
Ref https://vercel.com/docs/workflow-collaboration/visual-editing
처음으로 사랑니를 뽑았다… 턱을 뽑으시는 줄 알았다 😫 얼굴이 땡땡 부어서 웃기다. 근데 이제 좀 가라앉았으면 좋겠다. 못생겨졌다. 이 짓을 세 번이나 더 해야 한다니? 🙀