å¹´ã®ç€¬ã§ã™ã。先週ã¯é€±ã« 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 ã®é–‹ç™ºè€…)ãŒãŠè©±ã‚’ã•ã‚Œã¦ã„ã¾ã—ãŸã€‚増井先生ã®æœ‰åãªã‚¨ãƒ³ãƒˆãƒªã«ã€Œ自分が使わないものを発表するなã€ã¨ã„ã†ã‚¨ãƒ³ãƒˆãƒªãŒã‚ã‚Šã€ã¾ã•ã—ããã®é€šã‚Šã ãªã¨æ„Ÿã˜ã¦ã„ã¾ã™