Claude 3.5 Sonnetをちょっとお試し
ここに来てAnthropicの巻き返しとなるのでしょうか。
Claudeの新モデルである「Claude 3.5 Sonnet」が公開されました。
ベンチマーク結果では、ChatGPT-4oに匹敵する(あるいはそれを凌駕する)性能と言われています。
実際使った感触としては、Claude 3とは違った高い知性を強く感じました。生成速度もChatGPT-4oを彷彿とさせるほど速く、非常に迅速です。
また、WEBページ等の作成ではプレビューが表示されるのが最高です!
やりとりで、「サイバーパンクっぽく」と伝えて20秒で納品される以下。
さて、以降この記事では詳細なサービス、ベンチマークの考察というより、主観強めに、脱線しつつ記述しています。どうせ技術的な話は他の方が詳細にまとめるでしょう。
Claude 3は我が強く、ChatGPT-4は押しに弱い
これまで2つのAIに課金し続けて使ってきましたが、個性とも取れる差異を感じてきました。それらにある弱点が、確実に潰されてきた印象を受けました。
Claude 3 vs Claude 3.5
Claude 3は正確性が重視されているためか、わずかな可能性も考慮せずに、強く断定して振る舞うことが多いように感じていました。他方で、Claude 3.5は可能性を考慮して深く洞察できるようになった気がします。
例えば以下の画像について、女性2名が海辺で星を眺めているものですが、Claude 3は猫耳は無い、と断言しています。一方のClaude 3.5は猫耳(アクセサリー)として解釈できています。加えて、アクセサリーとして断定したことも、合理的に説明ができています。
これについては、聞き方等工夫すれば変わるものですが、明確に画像を認識する精度も向上した印象も受けます。
この結果からも、認識できる精度はChatGPT-4oと少なくとも互角であることが分かります。
ChatGPT-4o vs Claude 3.5
自分自身の位置付けも、双方明確に異なっているように感じています。
ChatGPT-4oに「AIのモデルの個性」を質問した際に、「私は人間では無い」といった文脈で展開されることはありません。しかし、Claude 3.5ではこれを明確に否定してくるニュアンスで回答します。
これは、前から思っていたことですが、Claude系は人間と解釈される可能性のある言動は、極めて強力に抑制されているように思います。ChatGPT系はその辺緩い気がします。
また、Claude系は我が強い印象も受けます。どうでしょうか、と質問した際に、かなり意見してくる時があります。むしろこれは、リアルで優秀な人間のようで面白く感じます。ChatGPT系もそうでは無いとは言えませんが、どちらかといえば同調することが多いように感じています。
例えば、ライブラリの使い方を聞きつつ、実装を進めていて、こちらの勘違いでそれを指摘した場合、即時ChatGPTは納得してしまうことが多いです。
設計思想の違いなのでしょうか。こういった個性じみたものも興味深いですね。
これを受けてのClaude 3.5の回答が以下です。
こういったやりとりをお互いにさせても面白いですね。
さて、この我の強さですが、答えが明確に無い創作においては、大幅に内容を改変してくることが多々ありました。そのため、その辺の添削はChatGPT-4oを多用しています。(原型が無いレベルで改変されると、微妙な気持ちになるところ)
例えば、報告書であったり、形式が決まったものであれば有用だと思います。しかし、小説的な創作であれば、Claude 3はかえって適さないのかな、と思っています。
とはいえ、聞き方や使い方次第だとも思います。事前に、内容は改変しないように言ったり、あくまで形式的なチェックを、と伝えれば良いのです。その辺、人間のようで、人間より融通が効くのかもしれません。
まとめ
OpenAIが先日発表した、ChatGPT-4oに触発された感は否めないですが、着実に性能を強化できているのは嬉しく思います。利用者としては、選択肢はあったほうが良いので、OpenAIもAnthropicもこのままバチバチやりあって欲しいものです。また、現状、他のサービスによくある「AI検索」とか「AI要約」の裏ではOpenAIがうごめいているので、こう言うところにもっと切り込んで欲しいですね。(サードパーティの規約を読むと、大体OpenAIという記述が追加されています。)
おまけ
おまけ2
以下、ご自由にどうぞ。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>サイバーパンク風ウェブサイト</title>
<style>
body {
font-family: 'Arial', sans-serif;
line-height: 1.6;
margin: 0;
padding: 0;
background-color: #0c0c16;
color: #ffffff;
}
.container {
width: 80%;
margin: auto;
overflow: hidden;
padding: 0 20px;
}
header {
background: #1a1a2e;
color: #00ffff;
padding-top: 30px;
min-height: 70px;
border-bottom: #ff00ff 3px solid;
}
header a {
color: #00ffff;
text-decoration: none;
text-transform: uppercase;
font-size: 16px;
}
header ul {
padding: 0;
margin: 0;
list-style: none;
overflow: hidden;
}
header li {
float: left;
display: inline;
padding: 0 20px 0 20px;
}
header #branding {
float: left;
}
header #branding h1 {
margin: 0;
text-shadow: 0 0 10px #00ffff;
}
header nav {
float: right;
margin-top: 10px;
}
header .highlight, header .current a {
color: #ff00ff;
font-weight: bold;
}
header a:hover {
color: #ff00ff;
text-shadow: 0 0 10px #ff00ff;
}
#showcase {
min-height: 400px;
background: url('/api/placeholder/1200/400') no-repeat center center/cover;
text-align: center;
color: #ffffff;
position: relative;
}
#showcase::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(26, 26, 46, 0.7);
z-index: 1;
}
#showcase .container {
position: relative;
z-index: 2;
}
#showcase h1 {
margin-top: 100px;
font-size: 55px;
margin-bottom: 10px;
text-shadow: 0 0 20px #00ffff;
}
#showcase p {
font-size: 20px;
text-shadow: 0 0 10px #ff00ff;
}
#boxes {
margin-top: 20px;
}
#boxes .box {
float: left;
width: 30%;
padding: 10px;
text-align: center;
background: rgba(255, 0, 255, 0.1);
margin: 10px;
border-radius: 15px;
box-shadow: 0 0 20px rgba(255, 0, 255, 0.5);
}
#boxes .box img {
width: 90px;
filter: drop-shadow(0 0 10px #00ffff);
}
#boxes .box h3 {
color: #00ffff;
}
footer {
padding: 20px;
margin-top: 20px;
color: #ffffff;
background-color: #1a1a2e;
text-align: center;
border-top: #ff00ff 3px solid;
}
</style>
</head>
<body>
<header>
<div class="container">
<div id="branding">
<h1><span class="highlight">Cyber</span> Web Design</h1>
</div>
<nav>
<ul>
<li class="current"><a href="index.html">ホーム</a></li>
<li><a href="about.html">会社概要</a></li>
<li><a href="services.html">サービス</a></li>
</ul>
</nav>
</div>
</header>
<section id="showcase">
<div class="container">
<h1>未来型ウェブデザイン</h1>
<p>最先端の技術で、あなたのビジョンを現実に。</p>
</div>
</section>
<section id="boxes">
<div class="container">
<div class="box">
<img src="/api/placeholder/90/90" alt="HTML5 Logo">
<h3>次世代HTML5</h3>
<p>最新のHTML5技術で、革新的なウェブ体験を創出します。</p>
</div>
<div class="box">
<img src="/api/placeholder/90/90" alt="CSS3 Logo">
<h3>未来的CSS3</h3>
<p>先進的なCSS3で、斬新でダイナミックなデザインを実現。</p>
</div>
<div class="box">
<img src="/api/placeholder/90/90" alt="AI Design Logo">
<h3>AI駆動デザイン</h3>
<p>人工知能を活用し、未来を見据えたビジュアルを創造します。</p>
</div>
</div>
</section>
<footer>
<p>Cyber Web Design, Copyright © 2077</p>
</footer>
</body>
</html>
おまけ3:サイバー攻撃で陥落したサイト
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SYSTEM BREACH</title>
<style>
@keyframes glitch {
0% {
transform: translate(0)
}
20% {
transform: translate(-5px, 5px)
}
40% {
transform: translate(-5px, -5px)
}
60% {
transform: translate(5px, 5px)
}
80% {
transform: translate(5px, -5px)
}
to {
transform: translate(0)
}
}
@keyframes scan {
0% {
top: -100%;
}
100% {
top: 100%;
}
}
body {
font-family: 'Courier New', monospace;
background-color: #000;
color: #0f0;
margin: 0;
padding: 0;
overflow-x: hidden;
}
.glitch {
animation: glitch 1s linear infinite;
position: relative;
}
.container {
width: 80%;
margin: auto;
padding: 20px;
}
header {
border-bottom: 2px solid #0f0;
padding: 20px 0;
position: relative;
}
h1 {
font-size: 3em;
margin: 0;
text-shadow: 2px 2px #f00;
}
.warning {
background-color: #f00;
color: #fff;
padding: 10px;
margin: 20px 0;
font-weight: bold;
text-align: center;
}
.content {
position: relative;
}
.content::before {
content: "";
position: absolute;
top: -100%;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(0deg, transparent 0%, #0f0 50%, transparent 100%);
animation: scan 5s linear infinite;
}
.error-message {
font-size: 1.2em;
margin: 20px 0;
}
.binary {
font-size: 0.8em;
opacity: 0.5;
}
footer {
border-top: 2px solid #0f0;
padding: 20px 0;
text-align: center;
font-size: 0.8em;
}
</style>
</head>
<body>
<div class="container">
<header>
<h1 class="glitch">SYSTEM BREACH</h1>
</header>
<div class="warning">
WARNING: UNAUTHORIZED ACCESS DETECTED
</div>
<div class="content">
<p class="error-message">
エラー: セキュリティ侵害が検出されました。<br>
システム管理者に連絡してください。
</p>
<p class="binary">
01001000 01000001 01000011 01001011 01000101 01000100 00100001
</p>
<p>
サイバーセキュリティチームが問題の解決に取り組んでいます。<br>
しばらくお待ちください...
</p>
<p class="glitch">
データ漏洩の可能性あり。すべてのユーザーはパスワードの変更を強く推奨されます。
</p>
</div>
<footer>
© 2077 CyberSec Inc. | ステータス: オフライン
</footer>
</div>
</body>
</html>
おまけ4:サイバーパンク✖️ポケモン
センスが非常に良いです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ネオ・ポケモンマスター 2077</title>
<style>
@keyframes neon-glow {
0% {
text-shadow: 0 0 5px #ff00de, 0 0 10px #ff00de, 0 0 20px #ff00de, 0 0 40px #ff00de;
}
100% {
text-shadow: 0 0 10px #00ffff, 0 0 20px #00ffff, 0 0 40px #00ffff, 0 0 80px #00ffff;
}
}
@keyframes glitch {
2%, 64% {
transform: translate(2px,0) skew(0deg);
}
4%, 60% {
transform: translate(-2px,0) skew(0deg);
}
62% {
transform: translate(0,0) skew(5deg);
}
}
body {
font-family: 'Courier New', monospace;
background-color: #0a0a1e;
color: #00ffff;
margin: 0;
padding: 0;
overflow-x: hidden;
}
.container {
max-width: 800px;
margin: 0 auto;
background-color: rgba(10, 10, 30, 0.8);
border: 2px solid #00ffff;
border-radius: 10px;
overflow: hidden;
box-shadow: 0 0 20px #00ffff;
}
header {
background-color: #ff00de;
padding: 20px;
text-align: center;
}
h1 {
margin: 0;
font-size: 2.5em;
color: #00ffff;
text-transform: uppercase;
animation: neon-glow 2s ease-in-out infinite alternate, glitch 1s linear infinite;
}
nav {
background-color: #1a1a3a;
padding: 10px;
}
nav ul {
list-style-type: none;
padding: 0;
margin: 0;
display: flex;
justify-content: space-around;
}
nav ul li a {
color: #00ffff;
text-decoration: none;
font-weight: bold;
padding: 5px 10px;
border: 1px solid #00ffff;
border-radius: 5px;
transition: all 0.3s;
}
nav ul li a:hover {
background-color: #00ffff;
color: #1a1a3a;
box-shadow: 0 0 10px #00ffff;
}
.content {
padding: 20px;
}
.cyber-pokemon {
background-color: rgba(255, 0, 222, 0.1);
border: 2px solid #ff00de;
border-radius: 10px;
padding: 15px;
margin-bottom: 20px;
display: flex;
align-items: center;
transition: all 0.3s;
}
.cyber-pokemon:hover {
box-shadow: 0 0 15px #ff00de;
transform: translateY(-5px);
}
.pokemon-image {
width: 100px;
height: 100px;
background-color: #1a1a3a;
border: 2px solid #00ffff;
border-radius: 50%;
margin-right: 20px;
display: flex;
justify-content: center;
align-items: center;
font-size: 2em;
color: #00ffff;
text-shadow: 0 0 5px #00ffff;
}
.pokemon-info h3 {
margin-top: 0;
color: #ff00de;
}
footer {
background-color: #1a1a3a;
color: #00ffff;
text-align: center;
padding: 10px;
font-size: 0.8em;
border-top: 2px solid #00ffff;
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>ネオ・ポケモンマスター 2077</h1>
</header>
<nav>
<ul>
<li><a href="#home">ホーム</a></li>
<li><a href="#pokedex">サイバーデックス</a></li>
<li><a href="#battle">VRバトル</a></li>
<li><a href="#shop">ネットショップ</a></li>
</ul>
</nav>
<div class="content">
<h2>ようこそ、サイバートレーナー!</h2>
<p>2077年、ポケモンの世界は急速な技術革新により一変した。今や、デジタルとリアルの境界線は曖昧になり、ポケモンたちは電脳空間を自由に行き来する。君は、この新時代のポケモンマスターになれるか?</p>
<div class="cyber-pokemon">
<div class="pokemon-image">01</div>
<div class="pokemon-info">
<h3>ネオ・ピカチュウ</h3>
<p>タイプ: エレクトロ/サイバー<br>特性: ハッキング</p>
</div>
</div>
<div class="cyber-pokemon">
<div class="pokemon-image">10</div>
<div class="pokemon-info">
<h3>メガ・ミュウツー.EXE</h3>
<p>タイプ: サイキック/AI<br>特性: 量子演算</p>
</div>
</div>
<div class="cyber-pokemon">
<div class="pokemon-image">11</div>
<div class="pokemon-info">
<h3>ホログラム・ゲンガー</h3>
<p>タイプ: ゴースト/ホログラム<br>特性: フェイズシフト</p>
</div>
</div>
</div>
<footer>
© 2077 ネオ・ポケモン社 | デザイン: AI-サトシ ver.5.0
</footer>
</div>
</body>
</html>
おまけ5:おまけ4にインタラクティブ要素盛り盛り
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ネオ・ポケモンマスター 2077</title>
<style>
@keyframes neon-glow {
0%, 100% {
text-shadow: 0 0 5px #ff00de, 0 0 10px #ff00de, 0 0 20px #ff00de, 0 0 40px #ff00de;
}
50% {
text-shadow: 0 0 10px #00ffff, 0 0 20px #00ffff, 0 0 40px #00ffff, 0 0 80px #00ffff;
}
}
@keyframes glitch {
2%, 64% {
transform: translate(2px,0) skew(0deg);
}
4%, 60% {
transform: translate(-2px,0) skew(0deg);
}
62% {
transform: translate(0,0) skew(5deg);
}
}
@keyframes matrix-bg {
0% {
background-position: 0% 0%;
}
100% {
background-position: 0% 100%;
}
}
body {
font-family: 'Courier New', monospace;
background-color: #0a0a1e;
color: #00ffff;
margin: 0;
padding: 0;
overflow-x: hidden;
background-image: linear-gradient(0deg, rgba(10, 10, 30, 0.9), rgba(10, 10, 30, 0.9)),
url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><text x="10" y="30" font-family="monospace" font-size="20" fill="rgba(0,255,255,0.1)">01</text><text x="50" y="70" font-family="monospace" font-size="20" fill="rgba(255,0,222,0.1)">10</text></svg>');
background-size: 100px 100px;
animation: matrix-bg 20s linear infinite;
}
.container {
max-width: 800px;
margin: 0 auto;
background-color: rgba(10, 10, 30, 0.8);
border: 2px solid #00ffff;
border-radius: 10px;
overflow: hidden;
box-shadow: 0 0 20px #00ffff;
}
header {
background-color: #ff00de;
padding: 20px;
text-align: center;
position: relative;
overflow: hidden;
}
header::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(45deg, transparent, #00ffff, transparent);
transform: rotate(45deg);
animation: header-shine 5s linear infinite;
}
@keyframes header-shine {
0% {
left: -50%;
top: -50%;
}
100% {
left: 150%;
top: 150%;
}
}
h1 {
margin: 0;
font-size: 2.5em;
color: #00ffff;
text-transform: uppercase;
animation: neon-glow 2s ease-in-out infinite alternate, glitch 1s linear infinite;
position: relative;
z-index: 1;
}
nav {
background-color: #1a1a3a;
padding: 10px;
}
nav ul {
list-style-type: none;
padding: 0;
margin: 0;
display: flex;
justify-content: space-around;
}
nav ul li a {
color: #00ffff;
text-decoration: none;
font-weight: bold;
padding: 5px 10px;
border: 1px solid #00ffff;
border-radius: 5px;
transition: all 0.3s;
position: relative;
overflow: hidden;
}
nav ul li a::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(0,255,255,0.4), transparent);
transition: 0.5s;
}
nav ul li a:hover::before {
left: 100%;
}
nav ul li a:hover {
background-color: #00ffff;
color: #1a1a3a;
box-shadow: 0 0 10px #00ffff;
}
.content {
padding: 20px;
}
.cyber-pokemon {
background-color: rgba(255, 0, 222, 0.1);
border: 2px solid #ff00de;
border-radius: 10px;
padding: 15px;
margin-bottom: 20px;
display: flex;
align-items: center;
transition: all 0.3s;
cursor: pointer;
}
.cyber-pokemon:hover {
box-shadow: 0 0 15px #ff00de;
transform: translateY(-5px);
}
.pokemon-image {
width: 100px;
height: 100px;
background-color: #1a1a3a;
border: 2px solid #00ffff;
border-radius: 50%;
margin-right: 20px;
display: flex;
justify-content: center;
align-items: center;
font-size: 2em;
color: #00ffff;
text-shadow: 0 0 5px #00ffff;
transition: all 0.3s;
}
.cyber-pokemon:hover .pokemon-image {
transform: rotate(360deg);
}
.pokemon-info h3 {
margin-top: 0;
color: #ff00de;
}
.pokemon-details {
display: none;
margin-top: 10px;
padding: 10px;
background-color: rgba(0,255,255,0.1);
border-radius: 5px;
}
footer {
background-color: #1a1a3a;
color: #00ffff;
text-align: center;
padding: 10px;
font-size: 0.8em;
border-top: 2px solid #00ffff;
}
#cyber-catch {
display: block;
width: 200px;
margin: 20px auto;
padding: 10px;
background-color: #ff00de;
color: #00ffff;
border: none;
border-radius: 5px;
font-size: 1.2em;
cursor: pointer;
transition: all 0.3s;
}
#cyber-catch:hover {
background-color: #00ffff;
color: #ff00de;
box-shadow: 0 0 15px #00ffff;
}
#catch-result {
text-align: center;
font-size: 1.2em;
margin-top: 20px;
padding: 10px;
border-radius: 5px;
display: none;
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>ネオ・ポケモンマスター 2077</h1>
</header>
<nav>
<ul>
<li><a href="#home">ホーム</a></li>
<li><a href="#pokedex">サイバーデックス</a></li>
<li><a href="#battle">VRバトル</a></li>
<li><a href="#shop">ネットショップ</a></li>
</ul>
</nav>
<div class="content">
<h2>ようこそ、サイバートレーナー!</h2>
<p>2077年、ポケモンの世界は急速な技術革新により一変した。今や、デジタルとリアルの境界線は曖昧になり、ポケモンたちは電脳空間を自由に行き来する。君は、この新時代のポケモンマスターになれるか?</p>
<div class="cyber-pokemon">
<div class="pokemon-image">01</div>
<div class="pokemon-info">
<h3>ネオ・ピカチュウ</h3>
<p>タイプ: エレクトロ/サイバー<br>特性: ハッキング</p>
<div class="pokemon-details">
ネオ・ピカチュウは、電子回路とナノテクノロジーを融合させた次世代のポケモン。その能力は従来のピカチュウを遥かに凌駕し、サイバー空間での戦闘を得意とする。
</div>
</div>
</div>
<div class="cyber-pokemon">
<div class="pokemon-image">10</div>
<div class="pokemon-info">
<h3>メガ・ミュウツー.EXE</h3>
<p>タイプ: サイキック/AI<br>特性: 量子演算</p>
<div class="pokemon-details">
メガ・ミュウツー.EXEは、高度なAIと融合した究極の存在。量子コンピューティングの力を駆使し、現実とサイバー空間の両方で圧倒的な力を誇る。
</div>
</div>
</div>
<div class="cyber-pokemon">
<div class="pokemon-image">11</div>
<div class="pokemon-info">
<h3>ホログラム・ゲンガー</h3>
<p>タイプ: ゴースト/ホログラム<br>特性: フェイズシフト</p>
<div class="pokemon-details">
ホログラム・ゲンガーは、最新のホログラム技術を用いて進化したゲンガー。物理的な実体を持たないため、あらゆる攻撃をすり抜け、自在に姿を変える。
</div>
</div>
</div>
<button id="cyber-catch">サイバーキャッチ!</button>
<div id="catch-result"></div>
</div>
<footer>
© 2077 ネオ・ポケモン社 | デザイン: AI-サトシ ver.5.0
</footer>
</div>
<script>
document.querySelectorAll('.cyber-pokemon').forEach(pokemon => {
pokemon.addEventListener('click', () => {
const details = pokemon.querySelector('.pokemon-details');
details.style.display = details.style.display === 'none' ? 'block' : 'none';
});
});
const catchButton = document.getElementById('cyber-catch');
const catchResult = document.getElementById('catch-result');
const pokemons = ['ネオ・ピカチュウ', 'メガ・ミュウツー.EXE', 'ホログラム・ゲンガー'];
catchButton.addEventListener('click', () => {
const random = Math.random();
if (random < 0.5) {
const caughtPokemon = pokemons[Math.floor(Math.random() * pokemons.length)];
catchResult.textContent = `おめでとう!${caughtPokemon}を捕まえた!`;
catchResult.style.backgroundColor = 'rgba(0, 255, 0, 0.2)';
} else {
catchResult.textContent = 'ああ、サイバーポケモンは逃げてしまった...';
catchResult.style.backgroundColor = 'rgba(255, 0, 0, 0.2)';
}
catchResult.style.display = 'block';
// Add glitch effect to the result
let glitchInterval = setInterval(() => {
catchResult.style.transform = `translate(${Math.random()*4-2}px, ${Math.random()*4-2}px) skew(${Math.random()*4-2}deg)`;
}, 50);
setTimeout(() => {
clearInterval(glitchInterval);
catchResult.style.transform = 'none';
}, 500);
});
</script>
</body>
</html>
おまけ6:ニコニコ動画風
ニコニコ動画完全復活後の世界を想像させました。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ニコニコ動画風ページ - サイバー攻撃からの復旧</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
margin: 0;
padding: 20px;
}
.container {
max-width: 800px;
margin: 0 auto;
background-color: white;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
overflow: hidden;
}
.video-container {
position: relative;
padding-bottom: 56.25%;
height: 0;
overflow: hidden;
}
.video-container img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
.comments-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
pointer-events: none;
}
.comment {
position: absolute;
white-space: nowrap;
color: white;
font-weight: bold;
text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
animation: moveRight 7s linear;
}
@keyframes moveRight {
from { transform: translateX(-100%); }
to { transform: translateX(100%); }
}
.comment-input {
display: flex;
padding: 10px;
background-color: #f8f8f8;
}
.comment-input input {
flex-grow: 1;
padding: 5px;
border: 1px solid #ddd;
border-radius: 3px;
}
.comment-input button {
margin-left: 10px;
padding: 5px 10px;
background-color: #00a0dc;
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="container">
<div class="video-container">
<img src="/api/placeholder/800/450" alt="動画プレースホルダー">
<div class="comments-overlay" id="comments-overlay"></div>
</div>
<div class="comment-input">
<input type="text" placeholder="コメントを入力...">
<button onclick="addComment()">送信</button>
</div>
</div>
<script>
const initialComments = [
"やっと復活した!", "サイバー攻撃怖すぎ", "運営さんお疲れ様です",
"ニコニコ最高!", "こんなに長く止まったの初めて", "みんな無事?",
"攻撃した奴許さん", "データ大丈夫だったのかな", "サーバーどうなってたの?",
"復旧作業すごい大変だったんだろうな", "これからはもっとセキュリティ強化して!",
"ニコニコなしの生活耐えられなかった", "運営の対応早くてよかった",
"ハッカーを捕まえて!", "バックアップ取ってて良かった", "ニコニコは不死鳥だ!",
"攻撃の詳細知りたい", "他のサイトも気をつけて", "ユーザーデータは無事?",
"こんな大規模な攻撃初めて見た", "運営の皆さんゆっくり休んで", "これを教訓に更に強くなろう",
"ニコニココミュニティの底力を見た", "サイバーセキュリティの重要性を実感",
"ニコニコが戻ってきて本当に嬉しい", "みんなで乗り越えられてよかった"
];
function addRandomComment() {
const comment = initialComments[Math.floor(Math.random() * initialComments.length)];
const commentElement = document.createElement('div');
commentElement.classList.add('comment');
commentElement.textContent = comment;
commentElement.style.top = Math.random() * 80 + '%';
document.getElementById('comments-overlay').appendChild(commentElement);
setTimeout(() => {
commentElement.remove();
}, 7000);
}
function startInitialComments() {
for (let i = 0; i < 20; i++) {
setTimeout(addRandomComment, Math.random() * 2000);
}
setInterval(addRandomComment, 500);
}
function addComment() {
const input = document.querySelector('input');
const comment = input.value.trim();
if (comment) {
const commentElement = document.createElement('div');
commentElement.classList.add('comment');
commentElement.textContent = comment;
commentElement.style.top = Math.random() * 80 + '%';
document.getElementById('comments-overlay').appendChild(commentElement);
input.value = '';
setTimeout(() => {
commentElement.remove();
}, 7000);
}
}
window.onload = startInitialComments;
</script>
</body>
</html>
おまけ7:2ch(5ch)まとめ風
Claude「自分でスレ立ててまとめる」
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>【朗報】Claude 3.5爆誕!ChatGPT-4完全敗北へ</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #efefef;
color: #333;
line-height: 1.6;
padding: 20px;
}
.container {
max-width: 800px;
margin: 0 auto;
background-color: #fff;
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
h1 {
color: #2c3e50;
border-bottom: 2px solid #3498db;
padding-bottom: 10px;
}
.post {
margin-bottom: 20px;
padding: 10px;
background-color: #f9f9f9;
border-radius: 5px;
}
.post-number {
color: #3498db;
font-weight: bold;
}
.post-info {
font-size: 0.8em;
color: #777;
}
.post-content {
margin-top: 5px;
}
</style>
</head>
<body>
<div class="container">
<h1>【朗報】Claude 3.5爆誕!ChatGPT-4完全敗北へ</h1>
<div class="post">
<span class="post-number">1</span>
<span class="post-info">風吹けば名無し:2024/06/22(土) 15:03:12.34 ID:a1b2c3d4e</span>
<div class="post-content">
Claude 3.5がリリースされたらしいぞ!
ChatGPT-4を完全に超えたってマジ?
</div>
</div>
<div class="post">
<span class="post-number">2</span>
<span class="post-info">風吹けば名無し:2024/06/22(土) 15:05:45.67 ID:f5g6h7i8j</span>
<div class="post-content">
マジかよ!ソースは?
</div>
</div>
<div class="post">
<span class="post-number">3</span>
<span class="post-info">風吹けば名無し:2024/06/22(土) 15:08:23.90 ID:k9l0m1n2o</span>
<div class="post-content">
Anthropicの公式発表見たわ
まじでヤバイらしい
ベンチマークでGPT-4を軒並み上回ってるって
</div>
</div>
<div class="post">
<span class="post-number">4</span>
<span class="post-info">風吹けば名無し:2024/06/22(土) 15:11:56.78 ID:p3q4r5s6t</span>
<div class="post-content">
どこが凄いんだ?具体的に教えてクレメンス
</div>
</div>
<div class="post">
<span class="post-number">5</span>
<span class="post-info">風吹けば名無し:2024/06/22(土) 15:14:34.12 ID:u7v8w9x0y</span>
<div class="post-content">
言語理解能力が桁違いらしい
複雑な文章や曖昧な表現の理解が人間レベルってさ
コーディングも化け物級の精度らしいで
</div>
</div>
<div class="post">
<span class="post-number">6</span>
<span class="post-info">風吹けば名無し:2024/06/22(土) 15:17:01.23 ID:z1a2b3c4d</span>
<div class="post-content">
新機能のArtifactsってなんや?
なんかプレビューできるとか聞いたんやが
</div>
</div>
<div class="post">
<span class="post-number">7</span>
<span class="post-info">風吹けば名無し:2024/06/22(土) 15:20:45.67 ID:e5f6g7h8i</span>
<div class="post-content">
Artifactsはマジですげえぞ
コードやHTML、SVGとかをリアルタイムでプレビューできるんだと
開発効率えげつない上がりそう
</div>
</div>
<div class="post">
<span class="post-number">8</span>
<span class="post-info">風吹けば名無し:2024/06/22(土) 15:23:12.34 ID:j9k0l1m2n</span>
<div class="post-content">
マジかよ...
これはもうChatGPTオワコンだろ...
</div>
</div>
<div class="post">
<span class="post-number">9</span>
<span class="post-info">風吹けば名無し:2024/06/22(土) 15:26:56.78 ID:o3p4q5r6s</span>
<div class="post-content">
でもOpenAIも黙ってないだろ
GPT-5の開発進めてそう
</div>
</div>
<div class="post">
<span class="post-number">10</span>
<span class="post-info">風吹けば名無し:2024/06/22(土) 15:29:23.90 ID:t7u8v9w0x</span>
<div class="post-content">
AI戦争やな
人類はどこまで進化するんやろ...
</div>
</div>
</div>
</body>
</html>
仮想まとめ系は結構好き。
この記事が気に入ったらサポートをしてみませんか?