å¹´ã®ç¬ã§ãããå é±ã¯é±ã« 4 åãå¿å¹´ä¼ããããããªãè¯ãå¹´æ«ãéããã¦ãã¾ãã
ãã¦æä¾ã¨ãªã£ã mast ã¢ãã«ã¬ã«é¢ãã¦ãæ¬å½ã¯é é¼ãé³´ã度㫠NISA å£åº§*1㸠S&P500 ããªã«ã«ã³ã 100 åãã¤æè³ãããã·ã¹ãã *2ãä½ããç ©æ©ã®æ°ã ãé é¼ãé³´ããã¾ãã£ã¦ãã®ããå¿å¹´ï¼ã¿ãããªè¨äºãæ¸ããã¨æã£ã¦ããã®ã§ããã諸ã ã«å¿æ®ºãã¦ããéã«æ å½æ¥ãè¿ãã¦ãã¾ãã¾ãã*3ããããããããªã®ã§ãæè¿è»½ãä½ã£ããã®ãç´¹ä»ãã¦ãè¶ãæ¿ãããã¨æãã¾ãã
ãã¬ã¼ã³ãã¼ã«ãèªä½ãã
12 æä¸æ¬ã«éå¬ããã WISSï¼ã¤ã³ã¿ã©ã¯ãã£ãã·ã¹ãã ã¨ã½ããã¦ã§ã¢ã«é¢ããã¯ã¼ã¯ã·ã§ããï¼ã¨ããå¦ä¼ï¼ã¯ã¼ã¯ã·ã§ããï¼ã«åå ãã¦ãã¾ãããèå ´ã« 2 æ³ 3 æ¥æ³ã¾ãè¾¼ã¿ã§ HCI åéã®ç 究ãçºè¡¨ãããã¨ãããã®ã§ãç»å£çºè¡¨ããã¢çºè¡¨ãå¤ã®æ親ä¼ã®ã©ããåã£ã¦ãé常ã«èå³æ·±ãã楽ããçµé¨ã«ãªãã¾ãããã¾ããæãé£ããã¨ã«åç ã¨ãã¦åãçµãã§ãã文字入力手法の開発を報告した論文ãæ¡æãããç»å£çºè¡¨ãè¡ããã¨ã«ãªãã¾ããã
ãã¦ããã¬ã¼ã³ã¯ãã¬ã¼ã³ãã¼ã«ããä½ãã¨è¯ãã¨ããã¦ãããããç°¡æçãªãã¬ã¼ã³ãã¼ã«ãå®è£
ãã¦å®éã«æ´»ç¨ãã¦ã¿ã¾ãããæ¬ãã¼ã«ã¯ Web ã¢ããªã±ã¼ã·ã§ã³ã¨ãã¦ä½åãããããä»ã® PC ãããç°¡åã«å©ç¨ã§ããã»ã*4ãlocalhost ã§èµ·åããã°ãªãã©ã¤ã³ç°å¢ã§ãä½åãã¾ã*5ã以ä¸ã® URL ããå®éã«åãã¹ã©ã¤ããé²è¦§ãããã¨ãã§ãã¾ãã
https://slide.yokohama.dev/wiss2024
åºæ¬çãªæä½ã以ä¸ã«ç¤ºãã¾ãã
æä½ | å 容 |
---|---|
ã¹ã¯ãã¼ã«ã[â][â] ãã¼ | ãã¼ã¸æ»ãï¼éã |
[F] ãã¼ | å ¨ç»é¢è¡¨ç¤º |
[W] ãã¼ | å稿ï¼çºè¡¨è ãã¼ã«ï¼ãéã |
[C] ãã¼ | ãã¤ã³ã¿ã表示 |
[L] ãã¼ | ãã¼ã¸ä¸è¦§ã表示 |
å®è£
ã馴æã¿ã®æè¡æ§æã§ãã Vite + React + TypeScript ãç¨ãã¦å®è£ ããCloudflare Pages ã«ãããã¤ãã¾ãã
ã¹ã©ã¤ãèªä½ã¯ Illustrator ã§äºãä½æãã¦ãããwebp å½¢å¼ã®ç»åã¨ãã¦åºåãã¦ããã¾ã*6ãã¾ãã.ts ãã¡ã¤ã«ï¼ä»¥éããããã§ã¹ããã¡ã¤ã«ã¨å¼ç§°ï¼ã«ä»¥ä¸ã®ã¤ã³ã¿ãã§ã¼ã¹ãæºãããªãã¸ã§ã¯ãã¨ãã¦ã¹ã©ã¤ãã®ã¡ã¿ãã¼ã¿ãè¨è¿°ãã¾ãã
import wiss2024 from "./wiss2024"; export interface Manifest { aspect: number; // ã¢ã¹ãã¯ãæ¯ count: number; // ãã¼ã¸æ° displaysPageIndex: boolean; // ãã¼ã¸çªå·ã表示ããã movies: Record<number, Movie[]>; // åç»ï¼å¾è¿°ï¼ manuscripts: string[]; // å稿ï¼å¾è¿°ï¼ } export const manifests: Record<string, Manifest> = { wiss2024, };
ã¹ã©ã¤ãã®é·ç§»
横æ¹åã«ã¹ã©ã¤ãã並ã¹ãâ ç¢å°ãã¼ â¡æ¨ªã¹ã¯ãã¼ã« â¢ãã¼ã¸ä¸è¦§ ã®ããããã§é·ç§»ã§ããããã«ãã¾ããå®è£
ã¨ãã¦ã¯ flexbox ã§ä¸¦ã¹ã¦ overflow-x: scroll
ãæå®ãã¤ã¤ãscroll-snap-type: x mandatory; scroll-snap-align: start;
ã«ãã£ã¦ã¹ã¯ãã¼ã«ä½ç½®ãå¼·å¶ãã¦ãã¾ãã
ã¾ãã表示ä¸ã®ãã¼ã¸ã JS å´ã§ç®¡çããå¿ è¦ããã£ããããonscroll ã¤ãã³ãã®çºçæã« scrollLeft ããç¾å¨ãã¼ã¸ãç®åºãã¦ãã¾ãããã¼ã¸ãé·ç§»ããããéã«ã¯ãç»é¢å¹ à ãã¼ã¸æ° ã¾ã§ã¹ã¯ãã¼ã«ããã¾ãï¼ããã¾ã§ç¶æ ã¯ã¹ã¯ãã¼ã«ä½ç½®ã«ãã£ã¦æ±ºå®ãããJS å´ã§æã¤ãã¼ã¸çªå·ã¯ããã«ä»éãã¦æ±ºå®ãããï¼ã
const scrollPage = useCallback((i: number) => { if (!listRef.current) return; listRef.current.scroll({ left: window.innerWidth * i, }); }, []); const onScroll = useCallback(() => { if (!listRef.current) return; const index = Math.round(listRef.current.scrollLeft / window.innerWidth); setIndex(index); // å¾ç¥ }, []);
å ¨ç»é¢è¡¨ç¤º
Web æ¨æºã® API ã«ãç»é¢è¡¨ç¤º*7ãå
¨ç»é¢ï¼ãã«ã¹ã¯ãªã¼ã³ï¼ã«ãã Fullscreen API ãåå¨ãã¦ãã¾ã*8ã[F] ãã¼ã®æ¼ä¸æã« document.body.requestFullscreen()
ãå¼ã³åºããã¨ã§ãã¦ã£ã³ãã¦ãæ大åãã¦ãã¾ãã
åç»ãåãè¾¼ã
åç»ã¯ãããã§ã¹ããã¡ã¤ã«ã«ä»¥ä¸ã®éãã«å®ç¾©ããã¾ããè§ä¸¸ãæå®ã§ããã®ããã¤ã³ãã§ãã
type Movie = { width: number; height: number; borderRadius?: number; src: string; loops: boolean; autoplay?: boolean; } & ({ top: number } | { bottom: number }) & ({ right: number } | { left: number });
ããã video ã¿ã°ã«è½ã¨ãè¾¼ãã§åçãã¦ãã¾ãããã¼ã¸é·ç§»æã« ref ãæ¢ç´¢ãã¦åç»ã®åçæéãåé ã«ç§»åãããã¨ã¨ãã«ãautoplay å±æ§ã true ã®å ´åã¯èªååçããããã«ãã¦ãã¾ãã
for (const [i, videos] of Object.entries(videoRef.current)) { for (const video of videos) { if (!video.current) continue; if (parseInt(i) === index) { video.current.currentTime = 0; if (video.current.autoplay) { video.current.play(); } } else { video.current.pause(); } } }
çºè¡¨è ãã¼ã«
èå ´ã«è¡ãåæ¥ã«çºè¡¨ç·´ç¿ãããã¨ããã10 åã®çºè¡¨æéã«å¯¾ã㦠11 ååãæãã£ã¦ãããã¨ã«æ°ãä»ãããããæ¥é½å¾¹å¤ã§å稿ã¨çºè¡¨è ãã¼ã«ãç¨æãã¾ããã[W] ãã¼ãæ¼ããã¨ã§ããµãã¦ã£ã³ãã¦ãéãã¦å稿ã®å 容ã表示ãããããã«ãã¾ããã¾ãã[S] ãã¼ãæ¼ããã¨ã§ãµãã¦ã£ã³ãã¦å ã§æéè¨æ¸¬ãè¡ãã¾ãã

以ä¸ã«ç¤ºãã³ã¼ãã®ããã«ãå稿ã®å 容ããããã§ã¹ããã¡ã¤ã«ã«å®ç¾©ãã¾ãã
const wiss2024: Manifest = { manuscripts: [ `1. ãã¼ã¸ç®ã®å稿`, `2. ãã¼ã¸ç®ã®å稿`, ], // ï¼çç¥ï¼ }
ãã®éãWindow.postMessage() é¢æ°ã使ç¨ããã¨ã¦ã£ã³ãã¦éã§ã¡ãã»ã¼ã¸ãéä¿¡ãããã¨ãã§ãããããwindow.open() é¢æ°ãç¨ãã¦ã¦ã£ã³ãã¦ãéããå¾ã親ã¦ã£ã³ãã¦ãããã¼ã¸çªå·ãåã¦ã£ã³ãã¦ã«éä¿¡ãã¾ããåã¦ã£ã³ãã¦å´ã¯ãåä¿¡ãããã¼ã¸çªå·ã«å¿ãã¦å¯¾å¿ããå稿ã表示ãã¾ãã
// 親ã¦ã£ã³ãã¦å´ const [childWindow, setChildWindow] = useState<Window | null>(null); setChildWindow(window.open(`/manuscript/${name}`)); // åã¦ã£ã³ãã¦ã«ã¡ãã»ã¼ã¸ãéä¿¡ if (childWindow) { childWindow.postMessage( { action: "SyncMessage", message: index, }, "*"); } // åã¦ã£ã³ãã¦å´ window.addEventListener("message", (e) => { switch (e.data.action) { case "SyncMessage": setIndex(parseInt(e.data.message)); } });
ææ³ï¼æ¹åç¹
å½æ¥ã¯ç¹ã«ãã°ããªãç¡äºåããçºè¡¨ããã¤ãªãçµããã¾ãããå å¿ãã¤ãã¤ãã¦ãã*9ã®ã§è¯ãã£ãã§ãâ¦â¦ æ°ã¥ããæ¹åç¹ã¨ãã¦ã¯ã以ä¸ã®ç¹ãããã¾ãã
- ãã¼ã¸çªå·ã¯ Web å´ã§è¡¨ç¤ºããã§ã¯ãªãå
ã¹ã©ã¤ãå´ã«åãã¦ããã¨è¯ã
質çå¿ççã®éã«è³æãåç §ãã¦ãä½ãã¼ã¸ãã¨æã示ãããå ´åããããã - ç»é¢ã®èæ¯ã¯ç½ã§ã¯ãªãé»ã«ããã¨è¯ã
ã¢ã¹ãã¯ãæ¯ãåããªãã£ãéã«èª¤éåãããã - è³æãæ´æ°ããã Cloudflare ã®ãã£ãã·ã¥ããã¼ã¸ããå¿ è¦ããã

åè«ã®é²æãå ±æããä»çµã¿ãä½ã£ã
ç¶ãã¦ã®è©±é¡ã§ãã表é¡ã®éããåè«ï¼ä¿®è«ãå«ãï¼ã®é²æãå ±æãã Web ãµã¤ããä½ãã¾ãããä¸è¨ã® URL ããã¢ã¯ã»ã¹ã§ãã¾ããå®è£ ã«ã¯ Hono ã使ç¨ãã¦ãã¾ã*10ã
https://sotsuron.yokohama.dev/

ç§ãå¦é¨ 4 å¹´ã¨ãªããæ¥æ¥ã«ã¯ç波大å¦ãåæ¥*11ããéã³ã¨ãªãã¾ãããã¨ããã§åæ¥ãããã«ã¯åè«ãæ¸ããã°ãªãããå¹´æ«å¹´å§ãä¼ã¿ãªã LaTeX ã¨ã«ããã£ããã¦ãã¾ãï¼ã¡åµã®åè«ç· å㯠2/3ï¼ããã®è¦è¡ãå°ãã§ãã¨ã³ã¿ã¡æ§ã®ãããã®ã«ãããã¨çæ³ããã®ãçç±ã§ãã
ã¨ã¯ãããé²æãçã度ã«é次 Web ãµã¤ãã GUI ããæ´æ°ããã®ã¯é¢åãªã®ã§ãæ å ±æ´æ°ç¨ã®ã¨ã³ããã¤ã³ãã®ã¿ãç¨æããAPI ãå©ãã¦æ´æ°ãã¦ããããã¨ã«ãã¾ãã*12ãçç³»ã§ããã° LaTeX ã使ç¨ããã¨æãã®ã§ãlatexmk ã Git Hooks ã« curl ã³ãã³ããã«ã ã£ã¨å¿ã°ãã¦ããã°æ´æ°ãèªååã§ãã¾ããDX ã§ããï¼
å¿å¹´ä¼ã®å ´ã§ sotsuron.yokohama.devï¼ã¨é£å¼ãããã¨ã§æ¢ã«ä½äººãã®å人ã«ä½¿ã£ã¦ããããã®ã§ããããDocker ç°å¢ã«ã¯ pdfinfo ããªãã®ã§åããªãããç« ãã¨ã«åå²ãã¦æ¸ãã¦ããã®ã§æ°ãã¼ã¸ããé²æããªãã¨åéãããã¦ãã¾ããã¨ãã£ãåé¡ãçºçãã¦ããããã§ãããããã«ã¤ãã¦ãã空ããæéã«å¯¾å¿ãã¦ãããã°ã¨æãã¾ãããªããã½ã¼ã¹ã³ã¼ãã¯ä»¥ä¸ã® GitHub ã«å ¬éãã¦ãã¾ãã
ããã³ã«ããã¦
ä»å¹´ã¯åç ã«è¿½ããã¦å人éçºã«åãçµãæéããã¾ãåãããå ãã¦ç 究é åãå®è£ ãããã»ã©éè¦ãããªãåéã«é²ãã§ãã¾ã£ããããå ¨ä½çã«éçºããé ããã£ãä¸å¹´ã¨ãªãã¾ãããæè¿ã¯ï¼ç¹ã«æ¸ãæ¨ã¦ããããªããã°ã©ã ã®å ´åï¼ChatGPT ã«ã³ã¼ããçæãã¦ããããã¨ãå¤ãã®ã§ãããããã§ããã¯ãèªåã§ã³ã¼ããæ¸ãè¡çºã¯æ¥½ããã®ã§ãæ¥å¹´ã¯ä¸æãæéãæ»åºãã¤ã¤ãèªåã§ä½¿ããããªããã®*13ã楽ããä½ã£ã¦ãããããªã¨æã£ã¦ãã¾ãã
2024 å¹´ãæ®ãã¨ããå ãã¨ãªãã¾ãããã¿ãªãããã©ããè¯ããå¹´ããè¿ããã ããï¼
*1:ä»å¹´ãNISA 㯠63 ä¸åã»ã©æè³ã㦠7,000 åç¨åº¦ã®å©çããã§ã¦ããªã
*2:é é¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã¨ãã¦ã®å½¹å²ãæ ã£ã¦ãããããæè³å ã¯å©ãä½ç½®ã«ãã£ã¦å½ç¶å¤ãã
*3:å¦é¨ 4 å¹´ã«ãªã£ã¦ããæ¬å½ã«ä½è£ããªãå人éçºã«æãåã£ã¦ããªã
*4:çºè¡¨ããããï¼æå ã® PC 㨠HDMI 端æ«ã®ç¸æ§ãæªã
*5:çºè¡¨ããããï¼ããããç¹ãããªããªã
*6:PDF ã«æ¸ãåºã㦠PDF.js ã§èªã¿è¾¼ãã§ãè¯ãã£ããã
*7:Fullscreen API ã¯å½è©²ã¿ããæ大åããã®ã¿ãªãããè¦ç´ ãå ¨ç»é¢ã«ãããã¨ãã§ãã¾ã
*8:æ¥ããããªããåãã¦ç¥ã£ã
*9:èªä½ãã¼ã«ããããï¼ãã¢ã§åããªã
*10:ã¢ã«ã¦ã³ãç»é²ãã¼ã¸ã ãéçã¢ã»ããã¨ãã¦é ä¿¡ãã¦ãããSPA ãã©ãã®è¬æ§æã«ãªã£ã¦ãã¾ã£ã
*11:åæ¥ã®ã¢ããã¯ãç波大å¦ãåæ¥ãã¾ãããã¨ããã¨ã³ããªãæ¸ããã¨ä»¥å¤ã«ãªã
*12:curl ãå©ãããã®è©¦éç³ã«ãªã£ã¦ãã
*13:å ç¨è©±é¡ã«ä¸ãã£ã WISS ã®è¨å¿µè¬æ¼ã§å¢äºå çï¼ããªãã¯å ¥åã Scrapbox ã®éçºè ï¼ãã話ãããã¦ãã¾ãããå¢äºå çã®æåãªã¨ã³ããªã«ã自分が使わないものを発表するなãã¨ããã¨ã³ããªããããã¾ããããã®éãã ãªã¨æãã¦ãã¾ã