diff --git a/contents/projects/festival/kf73/code-vs-code/index.md b/contents/projects/festival/kf73/code-vs-code/index.md new file mode 100644 index 00000000..54a8dd8d --- /dev/null +++ b/contents/projects/festival/kf73/code-vs-code/index.md @@ -0,0 +1,17 @@ +--- +app: + name: "Code vs Code" + url: https://code-vs-code.utcode.net/ + description: | + ブロックをならべて、つなげて、自分だけのパイロットAIをプログラムしよう! + 作ったプログラムで、企画に参加してくださった他の皆さんと対戦できます。 + 最強AIの座を手にするのは一体誰だ!? + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2022-11-21 +social: + github: https://github.com/ut-code/code-vs-code +--- diff --git a/contents/projects/festival/kf73/first-programming/index.md b/contents/projects/festival/kf73/first-programming/index.md new file mode 100644 index 00000000..4f79d04d --- /dev/null +++ b/contents/projects/festival/kf73/first-programming/index.md @@ -0,0 +1,19 @@ +--- +app: + name: "はじめてのプログラミング教室" + # url: https://festival.utcode.net + description: | + 「はじめてのプログラミング教室」は ut.code(); がこれまでの学園祭でも提供してきた、自慢のコンテンツです。 + ブロックを並べて、積み木感覚で、誰でも簡単にプログラミングに触れることができます。 + でも最適化するとなると大人でも大変……。ぜひ挑戦していってください! + platform: [web] + domain: [learn] + +date: 2022-11-21 +kind: festival +status: finished +thumbnail: + src: ./thumbnail.jpg +social: + github: https://github.com/ut-code/school-festival +--- diff --git a/contents/projects/festival/kf73/first-programming/thumbnail.jpg b/contents/projects/festival/kf73/first-programming/thumbnail.jpg new file mode 100644 index 00000000..cc74ae5e Binary files /dev/null and b/contents/projects/festival/kf73/first-programming/thumbnail.jpg differ diff --git a/contents/projects/festival/kf73/neutreeko/index.md b/contents/projects/festival/kf73/neutreeko/index.md new file mode 100644 index 00000000..71a29c9f --- /dev/null +++ b/contents/projects/festival/kf73/neutreeko/index.md @@ -0,0 +1,17 @@ +--- +app: + name: "強化学習AIと『ニュートリーコ』で対戦!" + url: https://neutreeko.herokuapp.com/ + description: | + 『ニュートリーコ』は三目並べを面白くしたボードゲームです。AIに挑戦してみてください。 + AIは強化学習という、AI同士を戦わせることで育てました。 + ルールは簡単なので、ぜひ挑戦してみてください! + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2022-11-21 +social: + github: https://github.com/ut-code/vs-AI-exhibition +--- diff --git a/contents/projects/festival/kf73/pl-workshop/index.md b/contents/projects/festival/kf73/pl-workshop/index.md new file mode 100644 index 00000000..c0450d2c --- /dev/null +++ b/contents/projects/festival/kf73/pl-workshop/index.md @@ -0,0 +1,18 @@ +--- +app: + name: "PL Workshop" + url: https://pl-workshop.github.io/pl-workshop-text/ + description: | + プログラミングをやったことがある人でも、プログラミング言語を使ったことがある人は少ないのではないでしょうか? + JavaScriptのライブラリ、PEG.jsを使って四則演算や変数、条件分岐、関数が使える簡単なプログラミング言語を作ってみましょう! + platform: [web] + domain: [learn] + +kind: festival +status: finished +date: 2022-11-21 +thumbnail: + src: ./thumbnail.jpg +social: + github: https://github.com/pl-workshop +--- diff --git a/contents/projects/festival/kf73/pl-workshop/thumbnail.jpg b/contents/projects/festival/kf73/pl-workshop/thumbnail.jpg new file mode 100644 index 00000000..bee3567b Binary files /dev/null and b/contents/projects/festival/kf73/pl-workshop/thumbnail.jpg differ diff --git a/contents/projects/festival/kf73/pwa-maker/index.md b/contents/projects/festival/kf73/pwa-maker/index.md new file mode 100644 index 00000000..2ea2a0c5 --- /dev/null +++ b/contents/projects/festival/kf73/pwa-maker/index.md @@ -0,0 +1,16 @@ +--- +app: + name: "あなたのスマホで動く! ウェブアプリをつくろう" + url: https://pwa-maker.onrender.com/ + description: | + アプリ、作ってみませんか? + 簡単な操作で誰でも簡単に、まずは自分だけのアプリを作ってみましょう! + platform: [web] + domain: [tool] + +kind: festival +status: finished +date: 2022-11-21 +social: + github: https://github.com/ut-code/pwa-maker +--- diff --git a/contents/projects/festival/kf73/reversi-6x6/index.md b/contents/projects/festival/kf73/reversi-6x6/index.md new file mode 100644 index 00000000..dd0c795a --- /dev/null +++ b/contents/projects/festival/kf73/reversi-6x6/index.md @@ -0,0 +1,17 @@ +--- +app: + name: "強化学習AIと『6x6リバーシ』で対戦!" + url: https://reversi-6x6.herokuapp.com/ + description: | + 強化学習を使って、『6x6リバーシ』(いわゆる「オセロ」の小さい版)のゲームAIも作ってみました。 + オセロを知っていれば、誰でもお楽しみいただけます。でも、意外と強くて苦戦するかも……? + ぜひ挑戦してみてください! + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2022-11-21 +social: + github: https://github.com/ut-code/vs-AI-exhibition +--- diff --git a/contents/projects/festival/kf73/typing/index.md b/contents/projects/festival/kf73/typing/index.md new file mode 100644 index 00000000..ae7145bb --- /dev/null +++ b/contents/projects/festival/kf73/typing/index.md @@ -0,0 +1,24 @@ +--- +app: + name: "タイピングゲーム" + # kf73: + # url: https://typing-game.onrender.com/ + # mf96, kf74: + url: https://typing.utcode.net/ + description: | + タイピングは、プログラマーはもちろん、多くの大学生にとって必須のスキルです。 + 友達と遊びながら鍛えたい、そう思ったメンバーがゲームを作っちゃいました! + さらに、キーボード配列をカスタマイズすることも可能! + 親子・友達同士で対戦してみませんか? + 東大生に挑戦していきませんか? + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2022-11-21 +thumbnail: + src: ./thumbnail.jpg +social: + github: https://github.com/ut-code/typing-game +--- diff --git a/contents/projects/festival/kf73/typing/thumbnail.jpg b/contents/projects/festival/kf73/typing/thumbnail.jpg new file mode 100644 index 00000000..0a634f03 Binary files /dev/null and b/contents/projects/festival/kf73/typing/thumbnail.jpg differ diff --git a/contents/projects/festival/kf74/create-cpu/index.md b/contents/projects/festival/kf74/create-cpu/index.md new file mode 100644 index 00000000..9a50d5ed --- /dev/null +++ b/contents/projects/festival/kf74/create-cpu/index.md @@ -0,0 +1,16 @@ +--- +app: + name: "CreateCPU" + url: https://kf74.utcode.net/create-cpu + description: | + 皆さんの持つパソコンやスマートフォンは、私たちが手で計算するよりもずっと高速に計算を行うことができます。 + これは、私たちの脳に相当する CPU と呼ばれる部品が、計算を高速に行っているからです。 + 高速な CPU を製造するには高度な技術が必要ですが、CPU の理論的背景自体は、実はとてもシンプルです。 + 足し算を行う論理回路を作りながら、CPU の仕組みを学んでいきましょう。 + platform: [web] + domain: [learn] + +kind: festival +status: finished +date: 2023-11-24 +--- diff --git a/contents/projects/festival/kf74/crypto/index.md b/contents/projects/festival/kf74/crypto/index.md new file mode 100644 index 00000000..ac50e0f9 --- /dev/null +++ b/contents/projects/festival/kf74/crypto/index.md @@ -0,0 +1,15 @@ +--- +app: + name: "暗号技術について学ぼう!" + url: https://kf74.utcode.net/crypto/ + description: | + 暗号技術は、現代社会において欠かせないものとなっています。 + ここでは、エニグマという第二次世界大戦で実際に使われていた暗号のしくみと、 + 現代の暗号技術の基礎である RSA 暗号を学びます。 + platform: [web] + domain: [learn] + +kind: festival +status: finished +date: 2023-11-24 +--- diff --git a/contents/projects/festival/kf74/security/index.md b/contents/projects/festival/kf74/security/index.md new file mode 100644 index 00000000..8fc99c77 --- /dev/null +++ b/contents/projects/festival/kf74/security/index.md @@ -0,0 +1,17 @@ +--- +app: + name: "ハッカーになろう" + url: https://kf74.utcode.net/security + description: | + 悪用厳禁!Web サービスを攻撃して、隠された秘密のデータを盗み出そう! + 実際に使われたことのあるサイバー攻撃手法を習得して、あなたもついにハッカーデビュー!? + インターネット上の詐記から身を守る方法も学べます。 + platform: [web] + domain: [learn] + +kind: festival +status: finished +date: 2023-11-24 +thumbnail: + src: ./thumbnail.png +--- diff --git a/contents/projects/festival/kf74/security/thumbnail.png b/contents/projects/festival/kf74/security/thumbnail.png new file mode 100644 index 00000000..498d48b1 Binary files /dev/null and b/contents/projects/festival/kf74/security/thumbnail.png differ diff --git a/contents/projects/festival/kf75/blosite/index.md b/contents/projects/festival/kf75/blosite/index.md new file mode 100644 index 00000000..6e5204ac --- /dev/null +++ b/contents/projects/festival/kf75/blosite/index.md @@ -0,0 +1,21 @@ +--- +app: + name: "Blosite" + url: https://blosite.utcode.net + description: | + ブロックプログラミングで自分だけのウェブサイトを作りましょう! + 豊富なチュートリアルがあるので、プログラミングが初めての方でも楽しめます。 + 作ったサイトはBlosite内で共有することもできます! + 他の人に作ったウェブサイトを自慢しちゃいましょう〜 + platform: [web] + domain: [tool] + +kind: festival +status: finished +date: 2024-11-22 + +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/blosite +--- diff --git a/contents/projects/festival/kf75/blosite/thumbnail.png b/contents/projects/festival/kf75/blosite/thumbnail.png new file mode 100644 index 00000000..566a210b Binary files /dev/null and b/contents/projects/festival/kf75/blosite/thumbnail.png differ diff --git a/contents/projects/festival/kf75/hitori-mahjong/index.md b/contents/projects/festival/kf75/hitori-mahjong/index.md new file mode 100644 index 00000000..79c1d8b0 --- /dev/null +++ b/contents/projects/festival/kf75/hitori-mahjong/index.md @@ -0,0 +1,21 @@ +--- +app: + name: "ひとり麻雀" + url: https://mahjong.utcode.net/ + description: | + 麻雀はハマると抜け出せなくなるくらい面白いにもかかわらず、鳴きや点数計算、 + 押し引きといったように様々な要素があるため、始めるハードルが上がってしまっています。 + そこで、「ひとり麻雀」では平面の牌効率だけのパズルとしてもっと簡単に遊べるようにしました。 + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2024-11-22 + +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/hitori-mahjong +--- + diff --git a/contents/projects/festival/kf75/hitori-mahjong/thumbnail.png b/contents/projects/festival/kf75/hitori-mahjong/thumbnail.png new file mode 100644 index 00000000..8ac50398 Binary files /dev/null and b/contents/projects/festival/kf75/hitori-mahjong/thumbnail.png differ diff --git a/contents/projects/festival/kf75/horse/index.md b/contents/projects/festival/kf75/horse/index.md new file mode 100644 index 00000000..bcafedfe --- /dev/null +++ b/contents/projects/festival/kf75/horse/index.md @@ -0,0 +1,22 @@ +--- +app: + name: "競馬AI" + url: https://keiba.utcode.net/ + description: | + 競馬をAIで予測しようというのがこのプロジェクトが発足した理由です。 + そしてこのサイトではそのAIと対戦をしたり、AIの学習に使われたデータについて閲覧することが出来ます。 + AIとの対戦ではランダムで出てくる過去データをもとに順位の予想勝負をしてもらいます。 + ハイスコアを出すとランキングボードに乗ることが出来るのでぜひ頑張ってください。 + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2024-11-22 + +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/uma_project_next +--- + diff --git a/contents/projects/festival/kf75/horse/thumbnail.png b/contents/projects/festival/kf75/horse/thumbnail.png new file mode 100644 index 00000000..837c3acc Binary files /dev/null and b/contents/projects/festival/kf75/horse/thumbnail.png differ diff --git a/contents/projects/festival/kf75/maze/index.md b/contents/projects/festival/kf75/maze/index.md new file mode 100644 index 00000000..9e012aa4 --- /dev/null +++ b/contents/projects/festival/kf75/maze/index.md @@ -0,0 +1,22 @@ +--- +app: + name: "はじめてのプログラミング 迷路" + url: https://maze.utcode.net/ + description: | + ut.code(); がこれまでの学園祭でも提供してきた、一番人気のコンテンツ! + ブロックプログラミングを通して迷路のゴールまで到達し、プログラミングの基礎を体験してみましょう。 + 最終的にはどのような迷路でもゴールできるアルゴリズムを作れるようになります! + 大人でも苦戦するかも!? + platform: [web] + domain: [learn] + +kind: festival +status: finished +date: 2024-11-22 + +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/first-programming +--- + diff --git a/contents/projects/festival/kf75/maze/thumbnail.png b/contents/projects/festival/kf75/maze/thumbnail.png new file mode 100644 index 00000000..f263f0d7 Binary files /dev/null and b/contents/projects/festival/kf75/maze/thumbnail.png differ diff --git a/contents/projects/festival/kf75/othello/index.md b/contents/projects/festival/kf75/othello/index.md new file mode 100644 index 00000000..c548adb8 --- /dev/null +++ b/contents/projects/festival/kf75/othello/index.md @@ -0,0 +1,23 @@ +--- +app: + name: "AIとオセロ" + # url: https://othello.utcode.net/ + url: https://boardgame.utcode.net/ + description: | + 6 × 6マスのちょっと小さいオセロで、AIと対戦してみましょう!勝つのはちょっと難しいかも!? + オセロを通じて「AIと対戦する楽しさ」や「AIがどのようなものかを理解するきっかけ」にもなります。 + さあ、あなたの戦略でAIを打ち負かしてみませんか? + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2024-11-22 + +thumbnail: + src: ./thumbnail.png +social: + # https://github.com/ut-code/othello ? + # https://github.com/ut-code/ai-othello ? + github: https://github.com/ut-code/othello-revamp +--- diff --git a/contents/projects/festival/kf75/othello/thumbnail.png b/contents/projects/festival/kf75/othello/thumbnail.png new file mode 100644 index 00000000..1ffc703c Binary files /dev/null and b/contents/projects/festival/kf75/othello/thumbnail.png differ diff --git a/contents/projects/festival/kf76/browser-hack/index.md b/contents/projects/festival/kf76/browser-hack/index.md new file mode 100644 index 00000000..ddb16d1d --- /dev/null +++ b/contents/projects/festival/kf76/browser-hack/index.md @@ -0,0 +1,19 @@ +--- +app: + name: "ブラウザハック入門" + url: https://browser-hack.utcode.net/ + description: | + 普段見ているWebサイトには、実は「裏側」がある。Chromeに標準搭載された開発者ツールを使えば、誰でもその秘密を覗ける。コードを読み解き、仕組みを暴く——初心者でも楽しめる4つのハックミッションで、Webの世界の扉を開けよう。 + platform: [web] + domain: [learn] + +kind: festival +status: finished +date: 2025-11-21 + +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/browser-hack +--- + diff --git a/contents/projects/festival/kf76/browser-hack/thumbnail.png b/contents/projects/festival/kf76/browser-hack/thumbnail.png new file mode 100644 index 00000000..f04e3e94 Binary files /dev/null and b/contents/projects/festival/kf76/browser-hack/thumbnail.png differ diff --git a/contents/projects/festival/kf76/hack-shooter/index.md b/contents/projects/festival/kf76/hack-shooter/index.md new file mode 100644 index 00000000..237e31a4 --- /dev/null +++ b/contents/projects/festival/kf76/hack-shooter/index.md @@ -0,0 +1,18 @@ +--- +app: + name: "Hack-shooter" + url: https://github.com/ut-code/HackShooter/releases + description: | + シューティングゲームの裏側をプログラミングすることによって、より簡単に、よりスマートにゲームを攻略しよう! + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2025-11-21 + +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/HackShooter +--- \ No newline at end of file diff --git a/contents/projects/festival/kf76/hack-shooter/thumbnail.png b/contents/projects/festival/kf76/hack-shooter/thumbnail.png new file mode 100644 index 00000000..4d5030cb Binary files /dev/null and b/contents/projects/festival/kf76/hack-shooter/thumbnail.png differ diff --git a/contents/projects/festival/kf76/life-code/index.md b/contents/projects/festival/kf76/life-code/index.md new file mode 100644 index 00000000..29bce874 --- /dev/null +++ b/contents/projects/festival/kf76/life-code/index.md @@ -0,0 +1,20 @@ +--- +app: + name: "Life Code" + url: https://life-code.utcode.net/ + description: | + Life Codeは、自分でルールを変えながら遊べるライフゲームです。 + コードを書きかえるとマスの中の「いのち」の動きが変わります。 + プログラミングで実験しながら、ふしぎな世界を作り出せるゲームです。 + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2025-11-21 + +thumbnail: + src: ./thumbnail.gif +social: + github: https://github.com/ut-code/life-code +--- diff --git a/contents/projects/festival/kf76/life-code/thumbnail.gif b/contents/projects/festival/kf76/life-code/thumbnail.gif new file mode 100644 index 00000000..35ccf852 Binary files /dev/null and b/contents/projects/festival/kf76/life-code/thumbnail.gif differ diff --git a/contents/projects/festival/kf76/page8/index.md b/contents/projects/festival/kf76/page8/index.md new file mode 100644 index 00000000..11ed3385 --- /dev/null +++ b/contents/projects/festival/kf76/page8/index.md @@ -0,0 +1,23 @@ +--- +app: + name: "8番ページ" + url: https://page8.utcode.net + description: | + 『8番ページ』は、あなたを奇妙なループに閉じ込める、 + “Web上の 8 番出口”をモチーフにしたゲームです。 + 何度も繰り返されるページの中で、 + ほんのわずかな異変を見つけてください。 + あなたは、このループから抜け出せますか? + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2025-11-21 + +thumbnail: + src: ./thumbnail.jpeg +social: + github: https://github.com/ut-code/page8 +--- + diff --git a/contents/projects/festival/kf76/page8/thumbnail.jpeg b/contents/projects/festival/kf76/page8/thumbnail.jpeg new file mode 100644 index 00000000..8320f198 Binary files /dev/null and b/contents/projects/festival/kf76/page8/thumbnail.jpeg differ diff --git a/contents/projects/festival/kf76/plus-operator/index.md b/contents/projects/festival/kf76/plus-operator/index.md new file mode 100644 index 00000000..c8243b91 --- /dev/null +++ b/contents/projects/festival/kf76/plus-operator/index.md @@ -0,0 +1,21 @@ +--- +app: + name: "プラス演算子ゲーム" + url: https://plusoperatorgame.onrender.com + description: | + 「プラス演算子ゲーム」へようこそ!このゲームは、数字が書かれたカードと様々な効果を持つ「演算子」カードを駆使して、場に並べられたすべての数字を「1」にすることを目指す、戦略的パズルゲームです。ひらめきと論理的思考を武器に、最短手数でのクリアを目指しましょう! + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2025-11-21 + +# renderの起動待ちでfavicon自動取得は時間がかかる & favicon存在しない +favicon: null +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/PlusOperatorGame +--- + diff --git a/contents/projects/festival/kf76/plus-operator/thumbnail.png b/contents/projects/festival/kf76/plus-operator/thumbnail.png new file mode 100644 index 00000000..fe7aa6b3 Binary files /dev/null and b/contents/projects/festival/kf76/plus-operator/thumbnail.png differ diff --git a/contents/projects/festival/mf96/cobuilder/index.md b/contents/projects/festival/mf96/cobuilder/index.md new file mode 100644 index 00000000..d2898614 --- /dev/null +++ b/contents/projects/festival/mf96/cobuilder/index.md @@ -0,0 +1,22 @@ +--- +app: + name: "cobuilder" + url: https://cobuilder.pages.dev/ + description: | + 最近巷でメタバースなるものが話題になっています。 + 「メタバース内ではあたかも現実世界と同じようなリアリティがある」というのがうたい文句になっています。 + しかし、仮想空間の本来の良さとは非現実であるからこそできることがあることではないでしょうか。 + + cobuilder 空間では、参加者全員で空間を作り上げます。草木を生み出し、豪邸を立て、地形すら変えて現実世界ではありえない理想の世界を作り上げます。 + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2023-05-13 + +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/cobuilder +--- diff --git a/contents/projects/festival/mf96/cobuilder/thumbnail.png b/contents/projects/festival/mf96/cobuilder/thumbnail.png new file mode 100644 index 00000000..e80b26f6 Binary files /dev/null and b/contents/projects/festival/mf96/cobuilder/thumbnail.png differ diff --git a/contents/projects/festival/mf96/first-web-game-maker/index.md b/contents/projects/festival/mf96/first-web-game-maker/index.md new file mode 100644 index 00000000..cfc151b9 --- /dev/null +++ b/contents/projects/festival/mf96/first-web-game-maker/index.md @@ -0,0 +1,20 @@ +--- +app: + name: "First Web Game Maker" + description: | + First Web Game Maker は、ボタンを押すだけでプログラミング言語を記述し、ウェブ上で動くゲームを制作できるツールです。 + このツールを用いて、自分だけのゲームを制作してみませんか? + First Web Game Maker では、ボタンを押すと実際にテキストエディタ上に HTML / CSS / JavaScript といった言語が記述されます。 + そのため、ゲームを制作する過程で具体的なコードとその意味との対応を学ぶことができるうえ、テキストエディタを用いた本格的な開発への移行も容易です。 + platform: [web] + domain: [tool] + +kind: festival +status: finished +date: 2023-05-13 + +thumbnail: + src: ./thumbnail.jpg +social: + github: https://github.com/ut-code/first-web-game-maker +--- diff --git a/contents/projects/festival/mf96/first-web-game-maker/thumbnail.jpg b/contents/projects/festival/mf96/first-web-game-maker/thumbnail.jpg new file mode 100644 index 00000000..fd1120e8 Binary files /dev/null and b/contents/projects/festival/mf96/first-web-game-maker/thumbnail.jpg differ diff --git a/contents/projects/festival/mf96/ml-workshop/index.md b/contents/projects/festival/mf96/ml-workshop/index.md new file mode 100644 index 00000000..68290db3 --- /dev/null +++ b/contents/projects/festival/mf96/ml-workshop/index.md @@ -0,0 +1,18 @@ +--- +app: + name: "ML Workshop" + # url: https://festival.utcode.net/kmeans + description: | + 「はじめてのプログラミング教室」に ML (Machine Learning: 機械学習) 編が登場! + プログラミング言語は用いず、マウスでブロックを組み合わせていくだけで機械学習のアルゴリズムを実装することができます。 + どの項目でも、自分が組んだアルゴリズムの動きがアニメーションで可視化されるようになっており、楽しく視覚的に機械学習の仕組みを理解することができます。 + platform: [web] + domain: [learn] + +kind: festival +status: finished +date: 2023-05-13 + +thumbnail: + src: ./thumbnail.jpg +--- diff --git a/contents/projects/festival/mf96/ml-workshop/thumbnail.jpg b/contents/projects/festival/mf96/ml-workshop/thumbnail.jpg new file mode 100644 index 00000000..ce136589 Binary files /dev/null and b/contents/projects/festival/mf96/ml-workshop/thumbnail.jpg differ diff --git a/contents/projects/festival/mf97/draw/index.md b/contents/projects/festival/mf97/draw/index.md new file mode 100644 index 00000000..94528adb --- /dev/null +++ b/contents/projects/festival/mf97/draw/index.md @@ -0,0 +1,23 @@ +--- +app: + name: "CodeYourArt" + url: https://utcode-draw.onrender.com/ + description: | + あなただけのアート作品を「プログラム」しよう! + ブロックプログラミングで絵を描きながら、直感的にプログラムの基本構造に触れることができます。 + 作った作品はスマートフォンに保存して友達や家族に自慢しよう! + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2024-05-18 + +# renderの起動待ちでfavicon自動取得は時間がかかる & favicon存在しない +favicon: null +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/draw +--- + diff --git a/contents/projects/festival/mf97/draw/thumbnail.png b/contents/projects/festival/mf97/draw/thumbnail.png new file mode 100644 index 00000000..1d4a52e6 Binary files /dev/null and b/contents/projects/festival/mf97/draw/thumbnail.png differ diff --git a/contents/projects/festival/mf97/qrcode/index.md b/contents/projects/festival/mf97/qrcode/index.md new file mode 100644 index 00000000..d12d455a --- /dev/null +++ b/contents/projects/festival/mf97/qrcode/index.md @@ -0,0 +1,21 @@ +--- +app: + name: "QRコードを体験してみよう!" + url: https://ut-code.github.io/qrcode/ + description: | + 生活のあらゆる場面で見かけるQRコード。その仕組みを学びながら、自分の手でQRコードを作成しましょう! + また、その過程でバーコードの仕組みについても学ぶことができます! + (QRコードは株式会社デンソーウェーブの登録商標です) + platform: [web] + domain: [learn] + +kind: festival +status: finished +date: 2024-05-18 + +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/qrcode +--- + diff --git a/contents/projects/festival/mf97/qrcode/thumbnail.png b/contents/projects/festival/mf97/qrcode/thumbnail.png new file mode 100644 index 00000000..9151f3d8 Binary files /dev/null and b/contents/projects/festival/mf97/qrcode/thumbnail.png differ diff --git a/contents/projects/festival/mf97/u-place/index.md b/contents/projects/festival/mf97/u-place/index.md new file mode 100644 index 00000000..24546484 --- /dev/null +++ b/contents/projects/festival/mf97/u-place/index.md @@ -0,0 +1,21 @@ +--- +app: + name: "u/place" + url: https://u-place.onrender.com/ + description: | + 大きなキャンバスに絵を描きましょう!やり方は簡単。セルを塗り潰すだけ! + みんなと同じキャンバスなので、他の人と協力するもよし。競うもよし。ただし、一つ塗ったら10秒待たなければいけません… + 思い通りの絵ができるように頑張りましょう! + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2024-05-18 + +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/uplace +--- + diff --git a/contents/projects/festival/mf97/u-place/thumbnail.png b/contents/projects/festival/mf97/u-place/thumbnail.png new file mode 100644 index 00000000..70179439 Binary files /dev/null and b/contents/projects/festival/mf97/u-place/thumbnail.png differ diff --git a/contents/projects/festival/mf98/shortcut/index.md b/contents/projects/festival/mf98/shortcut/index.md new file mode 100644 index 00000000..b0e7138c --- /dev/null +++ b/contents/projects/festival/mf98/shortcut/index.md @@ -0,0 +1,19 @@ +--- +app: + name: "Shortcut Puzzle" + url: https://shortcut-game.utcode.net/ + description: | + あなたは普段ショートカットキーを使ってますか?いつも多用している方も初めて聞いた方も、ショートカットを魔法のように操りましょう!2Dアクションパズルゲームの「Shortcut Puzzle」をぜひ遊んでみてください! + platform: [web] + domain: [game] + +kind: festival +status: finished +date: 2025-05-17 + +thumbnail: + src: ./thumbnail.png +social: + github: https://github.com/ut-code/shortcut-game +--- + diff --git a/contents/projects/festival/mf98/shortcut/thumbnail.png b/contents/projects/festival/mf98/shortcut/thumbnail.png new file mode 100644 index 00000000..9cc45a70 Binary files /dev/null and b/contents/projects/festival/mf98/shortcut/thumbnail.png differ diff --git a/docs/contents/projects.md b/docs/contents/projects.md index bd0bf804..7cd6d6eb 100644 --- a/docs/contents/projects.md +++ b/docs/contents/projects.md @@ -14,27 +14,27 @@ ## frontmatter -| キー | 必須 | 型 | 説明 | -| ----------------- | ---- | ------------- | ----------------------------------------------------------------------------------------------------- | -| `app.name` | ✅ | string | プロジェクト名 | -| `app.description` | ✅ | string | プロジェクトの短い説明。 | -| `app.url` | | string->url | アプリにアクセスできる URL。 | -| `app.platform` | ✅ | string[] | ソフトウェアの配布プラットフォーム。`web`, `mobile`, `desktop`, `cli`。 | -| `app.domain` | ✅ | string[] | ソフトウェアの種別 (クソ雑ドキュメント)。 `app`, `game`, `tool`, `site`, `learn` (教材), `lib` など。 | -| `order` | | number? | 表示順。指定されなかった場合は `date` 降順でソートされます。 | -| `date` | ✅ | date | 記事の初回執筆日。ソートのみで利用しています。 | -| `kind` | ✅ | string | アプリケーションの開発体系。`long-term`, `festival`, `hackathon` の 3 つ。 | -| `status` | ✅ | string | プロジェクトの現状。詳細は `src/schema.ts` を参照。 | -| `members` | | string[]? | プロジェクトのメンバー。まだメンバーページを作ってなくても問題ないです。 | -| `tags` | | string[]? | 使用されている技術。タグごとのフィルタリング機能等は提供していません。 | -| `thumbnail.src` | ✅ | string->path | イメージファイルへの markdown からの相対パス。 | -| `thumbnail.fit` | | string? | イメージのクロップ方法。 default = "cover"。 | -| `thumbnail.bg` | | string? | イメージの背景色。ロード中と `crop` = "contain" のときの背景に使われています。 | -| `favicon` | | string->path? | 強制的に使わせる Favicon。指定しない場合は、アプリの URL から自動で引っ張ってきます。 | -| `social.github` | | string->url? | プロジェクトの GitHub 上での URL。 | -| `social.website` | | string->url? | プロジェクトのウェブサイトの URL。(`app.url` と別で広報用などの Website がある場合) | -| `social.youtube` | | string->url? | プロジェクトの YouTube 上での URL。 | -| `social.twitter` | | string->url? | プロジェクトのツイッター (現 X) の URL。 | +| キー | 必須 | 型 | 説明 | +| ----------------- | ---- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `app.name` | ✅ | string | プロジェクト名 | +| `app.description` | ✅ | string | プロジェクトの短い説明。 | +| `app.url` | | string->url | アプリにアクセスできる URL。 | +| `app.platform` | ✅ | string[] | ソフトウェアの配布プラットフォーム。`web`, `mobile`, `desktop`, `cli`。 | +| `app.domain` | ✅ | string[] | ソフトウェアの種別 (クソ雑ドキュメント)。 `app`, `game`, `tool`, `site`, `learn` (教材), `lib` など。 | +| `order` | | number? | 表示順。指定されなかった場合は `date` 降順でソートされます。 | +| `date` | ✅ | date | 記事の初回執筆日。ソートのみで利用しています。 | +| `kind` | ✅ | string | アプリケーションの開発体系。`long-term`, `festival`, `hackathon` の 3 つ。 | +| `status` | ✅ | string | プロジェクトの現状。詳細は `src/schema.ts` を参照。 | +| `members` | | string[]? | プロジェクトのメンバー。まだメンバーページを作ってなくても問題ないです。 | +| `tags` | | string[]? | 使用されている技術。タグごとのフィルタリング機能等は提供していません。 | +| `thumbnail.src` | | string->path | イメージファイルへの markdown からの相対パス。 | +| `thumbnail.fit` | | string? | イメージのクロップ方法。 default = "cover"。 | +| `thumbnail.bg` | | string? | イメージの背景色。ロード中と `crop` = "contain" のときの背景に使われています。 | +| `favicon` | | string->path? \| null | 強制的に使わせる Favicon。指定しない場合は、アプリの URL から自動で引っ張ってきます。 `null` を指定した場合は、Faviconは存在しないものとみなしアプリのURLを自動でfetchしません。 | +| `social.github` | | string->url? | プロジェクトの GitHub 上での URL。 | +| `social.website` | | string->url? | プロジェクトのウェブサイトの URL。(`app.url` と別で広報用などの Website がある場合) | +| `social.youtube` | | string->url? | プロジェクトの YouTube 上での URL。 | +| `social.twitter` | | string->url? | プロジェクトのツイッター (現 X) の URL。 | ## body について diff --git a/src/components/common/ProjectList.astro b/src/components/common/ProjectList.astro index 041a2efa..ccaa465d 100644 --- a/src/components/common/ProjectList.astro +++ b/src/components/common/ProjectList.astro @@ -21,22 +21,26 @@ const { projects, variant = "full" } = props; class="overflow-clip rounded-xl border border-gray-200 bg-gray-50 hover:brightness-95" href={`/projects/${project.id}`} > - + {project.data.thumbnail ? ( + + ) : ( +
+ )}

{project.data.app.name} diff --git a/src/lib/fetch-favicon.ts b/src/lib/fetch-favicon.ts index 0c9436d2..c7af3200 100644 --- a/src/lib/fetch-favicon.ts +++ b/src/lib/fetch-favicon.ts @@ -17,56 +17,60 @@ export async function fetchFavicon( const cacheKey = `fetch-favicon:${getDomain(siteBaseURL)}`; return await cache(cacheKey, z.string().optional(), async () => { - const websiteRes = await fetch(siteBaseURL); - if (!websiteRes.ok) { - return undefined; - } + try { + const websiteRes = await fetch(siteBaseURL); + if (!websiteRes.ok) { + return undefined; + } + + // fetch link[rel="icon"].href + { + const html = await websiteRes.text(); + const querySelector = cheerioLoad(html); + const iconHref = querySelector( + "link[rel='icon'], link[rel='shortcut icon']", + )[0]?.attribs.href; + if (iconHref) { + const iconUrl = new URL(iconHref, siteBaseURL); + const iconRes = await fetch(iconUrl); + const contentType = iconRes.headers.get("content-type"); + if (!contentType) + console.warn( + `header "Content-Type" not found while fetching ${iconUrl.toString()}`, + ); + if (iconRes.ok) { + return base64DataURL( + contentType, + Buffer.from(await iconRes.arrayBuffer()), + ); + } + } + } - // fetch link[rel="icon"].href - { - const html = await websiteRes.text(); - const querySelector = cheerioLoad(html); - const iconHref = querySelector( - "link[rel='icon'], link[rel='shortcut icon']", - )[0]?.attribs.href; - if (iconHref) { - const iconUrl = new URL(iconHref, siteBaseURL); - const iconRes = await fetch(iconUrl); - const contentType = iconRes.headers.get("content-type"); + // fetch /favicon.ico + { + const faviconUrl = `${new URL(siteBaseURL).origin}/favicon.ico`; + const faviconRes = await fetch(faviconUrl); + const contentType = faviconRes.headers.get("content-type"); if (!contentType) console.warn( - `header "Content-Type" not found while fetching ${iconUrl.toString()}`, + `header "Content-Type" not found while fetching ${faviconUrl}`, ); - if (iconRes.ok) { + if ( + faviconRes.ok && + (contentType == null || !contentType.startsWith("text/")) + ) { return base64DataURL( contentType, - Buffer.from(await iconRes.arrayBuffer()), + Buffer.from(await faviconRes.arrayBuffer()), ); } } - } - // fetch /favicon.ico - { - const faviconUrl = `${new URL(siteBaseURL).origin}/favicon.ico`; - const faviconRes = await fetch(faviconUrl); - const contentType = faviconRes.headers.get("content-type"); - if (!contentType) - console.warn( - `header "Content-Type" not found while fetching ${faviconUrl}`, - ); - if ( - faviconRes.ok && - (contentType == null || !contentType.startsWith("text/")) - ) { - return base64DataURL( - contentType, - Buffer.from(await faviconRes.arrayBuffer()), - ); - } + return undefined; + } catch { + return undefined; } - - return undefined; }); } diff --git a/src/pages/projects/[...id].astro b/src/pages/projects/[...id].astro index bb8f0d67..b015af62 100644 --- a/src/pages/projects/[...id].astro +++ b/src/pages/projects/[...id].astro @@ -22,12 +22,17 @@ const { Content } = await render(project); let iconSrc: string | undefined; if (project.data.status !== "dead") { - if (project.data.favicon) iconSrc = project.data.favicon.src; - if (!iconSrc && project.data.app.url) { - iconSrc = await fetchFavicon(project.data.app.url); - } - if (!iconSrc && project.data.social?.website) { - iconSrc = await fetchFavicon(project.data.social.website); + if (project.data.favicon === null) { + iconSrc = undefined; + } else if (project.data.favicon) { + iconSrc = project.data.favicon.src; + } else { + if (!iconSrc && project.data.app.url) { + iconSrc = await fetchFavicon(project.data.app.url); + } + if (!iconSrc && project.data.social?.website) { + iconSrc = await fetchFavicon(project.data.social.website); + } } } --- @@ -36,30 +41,36 @@ if (project.data.status !== "dead") { title={project.data.app.name} description={project.data.app.description} focus={Focus.projects} - image={project.data.thumbnail.src} + image={project.data.thumbnail?.src ?? null} >
- + { + project.data.thumbnail ? ( + + ) : ( +
+ ) + }

diff --git a/src/pages/projects/[...kind].astro b/src/pages/projects/[...kind].astro index 6bbf0325..5a54ddaa 100644 --- a/src/pages/projects/[...kind].astro +++ b/src/pages/projects/[...kind].astro @@ -27,22 +27,17 @@ const projects = await getProjects(kind.frontmatter);

{kind.title}

{ - kinds - .filter( - (kind) => - kind.path !== "festival" /* TODO: migrate festival projects */, - ) - .map((tab) => ( - - - {tab.tabTitle} - + kinds.map((tab) => ( + + + {tab.tabTitle} - )) + + )) }
{ diff --git a/src/schema.ts b/src/schema.ts index ece95d2e..26fdb3a1 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -73,8 +73,8 @@ export const CreateProjectSchema = ({ image }: { image: ImageFunction }) => ]), order: z.number().optional(), date: z.date(), - thumbnail: Thumbnail({ image }), - favicon: image().optional(), + thumbnail: Thumbnail({ image }).optional(), + favicon: image().nullable().optional(), tags: z.array(z.string()).optional().default([]), social: z .object({