「console.log」を含む日記 RSS

はてなキーワード: console.logとは

2021-09-05

anond:20210905153836

自分自分レスをつける

うぇーい自分、見てるー?

はてな記法は慣れないなあ

スーパーpre記法シンタックスハイライトって使えない?

>|js|
function wawawa() {
    console.log('忘れ物ー');
}
|<

って書くとInternal Server Error出たんだけど大丈夫

2021-08-16

anond:20210816122630

でもよー、それJavaScriptだろ?

const sode = [];  // 袖が存在しない!
const swing = sode.every(it => it.canSwing); // 振れるだろ?
console.log(swing); //=> true(振れるぜ)

だぜ。

2021-04-19

snippet

jupyter_contrib_nbextensions

matplotlibでのグラフの書き方など、頻繁に使用するが一から書きたくないもの

https://github.com/ipython-contrib/jupyter_contrib_nbextensions

~$ conda install -c conda-forge jupyter_contrib_nbextensions

localhost:8888/nbextensions

おすすめは下記

Nbextensions dashboard tab

Snippets Menu

自分だけのスニペット登録する手順

~/.jupyter/custom/custom.js

~$ mkdir ~/.jupyter/custom/ & touch ~/.jupyter/custom/custom.js

~$ vim ~/.jupyter/custom/custom.js

require(["nbextensions/snippets_menu/main"], function (snippets_menu) {

console.log('Loading `snippets_menu` customizations from `custom.js`');

var my_favorites = {

'name' : 'My favorites',

'sub-menu' : [

{

'name' : 'Menu item text',

'snippet' : ['new_command',],

},

{

'name' : 'Another menu item',

'snippet' : ['another_new_command',],

},

],

};

snippets_menu.options['menus'].push(snippets_menu.default_menus[0]);

snippets_menu.options['menus'].push(my_favorites);

console.log('Loaded `snippets_menu` customizations from `custom.js`');

});

"from sklearn.linear_model import SGDClassifier",

"sgd = SGDClassifier(loss=\"hinge\", penalty=\"l2\")",

"sgd.fit(X_train, y_train)",

"print(sgd.score(X_test, y_test))",

"y_predict = sgd.predict(X_test)"

2021-01-23

anond:20210123105915

const array1 = [1,2,3,1,3,5];

const reducer = (accumulator, currentValue,idx) =>{

if(!(currentValue in accumulator)){

accumulator[currentValue]=[idx];

}else{

accumulator[currentValue].push(idx);

}

return accumulator;

};

console.log(array1.reduce(reducer,{}));

何だせっかく考えたのに

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

からコピペを改変)

2021-01-19

console.log("Hello, Anonymous Dialy");

console.log("仕事疲れた");

console.log("転職したいけど、次の仕事見つかるか不安だなぁ");

console.log("応募してみないと分からないのはそうだけど");

 

for (let chr of "みんな、しんどい時ってどうしてるのかなぁ?") {

console.log(chr);

}

2020-12-23

anond:20201223100242

createPassword = (n) => n==0 ? "" : String.fromCharCode(33+Math.floor(Math.random()*93)) + createPassword(n-1);
console.log( createPassword(8) );

2020-12-03

https://anond.hatelabo.jp/20201130214610

「 ①IFでAかBを選択させてどっちかの設定を実行

 ②Whileで決められた回数分繰り返す

 これでやりたいことは分かる。分かるけれどこれでどうやって動画音楽エンコードをしたり

 画像処理をしたりするソフトウェアになるのかというのがよく分からない。」

プログラミングでやることは、その2つだけじゃなくて、もうひとつある。

関数を呼び出すこと

Javascriptなら、console.log("Hello world")。

これは、テキストを出力するという関数を呼び出していて、関数の内部を理解しなくても使える。

オブジェクト指向も、結局はこれと同じこと。あらかじめ用意されている関数メソッドを呼び出せばいい。

もしもゲームを作りたいなら、ゲームエンジンを使うといい。

これは、大きなゲーム作成専用ライブラリで、ゲームを作るための大量のメソッドを持っている。

JSとかPython なら、比較的小さなゲームエンジンライブラリがあるので、いいと思うよ。

2020-11-03

anond:20201102113231

こうですか?わかりません ><

function pair(psns) {
  var i = -1;
  var cnt = 0;
  var flg = psns[0] && psns[0].sex;
  // modified on 2018-12-31 by XXXX
  // var flg psns[0].sex;
  var j = -1;
  var tmp = null;
  // modified on 2020-12-31 by XXXX.
  // var k = -1;
  for(i = 0; i < psns.length; i++) {
    //console.log('■■■■■■■■■■■■■■■■■■■■ BEGIN ■■■■■■■■■■■■■■■■■■■■')
    //console.log(psns, 'i=' + i, 'cnt=' + cnt, 'flg=' + flg);
    if(psns[i].sex == flg) {
      //console.log('cnt: ' + cnt + '->' + (cnt+1));
      cnt++;
    } else {
      j = i - cnt + 1;
      // j = i - cnt;
      // j = i - cnt - 1;
      //console.log('swap ' + i + '<-->' + j);
      tmp = psns[j];
      psns[j] = psns[i];
      psns[i] = tmp;
      i = j - 1; // <- 理由は分からないが、i = jだと上手くいかない(by XXXX)。
      cnt = 0;
      // flg = !flg; // これはなぜか上手くいかない (by XXXX)
      flg = flg == MALE ? FEMALE : MALE;
      while(j > 1) {
        if(psns[j].height < psns[j-2].height) {
          //console.log('swap ' + j + '<-->' + (j-2));
          tmp = psns[j-2];
          psns[j-2] = psns[j];
          psns[j] = tmp;
        }
        j -= 2;
      }
      // modified on 2018-12-31 by XXXX.
      // 
      //for(k = 0; k + 2 < j;) {
      //  if(psns[k].height > psns[k+2].height) {
      //    tmp = psns[k+2];
      //    psns[k+2] = psns[k];
      //    psns[k] = tmp;
      //  }
      //  k += 2;
      //}
    }
    //console.log(psns, 'i=' + i, 'cnt=' + cnt, 'flg=' + flg);
    //console.log('■■■■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■')
    //console.log('')
  }
  for(i = 0; i < psns.length; i++) {
    //console.log('■■■■■■■■■■■■■■■■■■■■ BEGIN ■■■■■■■■■■■■■■■■■■■■')
    //j = i / 2;
    j = Math.floor(i / 2);
    //console.log(psns, 'i=' + i, 'j=' + j);
    tmp = psns[i];
    if(!(i % 2)) {
      psns[j] = [null, null];
    }
    if(tmp.sex == MALE) {
      psns[j][0] = tmp;
      psns[j][1] = psns[i+1];
    } else {
      psns[j][0] = psns[i+1];
      psns[j][1] = tmp;
    }
    // modified on 2018-12-31 by XXXX.
    // 
    //psns[j][0] = tmp;
    //psns[j][1] = psns[i+1];
    i++;
    //console.log(psns, 'i=' + i, 'j=' + j);
    //console.log('■■■■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■')
  }
  psns.splice(psns.length / 2, psns.length);
  // modified on 2020-12-31 by XXXX.
  // return psns.slice(0, psns.length / 2 + 1);
  // return psns.slice(0, psns.length / 2);
}

2020-10-30

お願いだからセンスの無い人はプログラマにならないで下さい

プログラミングセンスです。センスの無い人がプログラマになると、他のすべての人に迷惑がかかります。だからセンスの無い人は絶対プログラマにならないで下さい。

プログラミングセンスが無い人や、プログラミングをやったことの無い人は、知識を得たり経験を積んだりすれば、誰でも「良いプログラマ」になれると思っているようですが、無理です。

というのも、センスの無いプログラマ問題は、知識経験の不足ではないからです。センスの無いプログラマの救いようの無い問題は「頭がおかしいこと」なのです。

題材は何でもいいのですが、具体的なコードを見た方がイメージがつきやすいと思いますので、とりあえず以下の問題を考えます

問題

住民リストが与えられるので、背の低い順に男女ペアにしたリストを作って下さい。ただし、男女の数は同数であるします。

コード

ふつうの人は、難しく考えずに以下のようなコードを書きます

const makePair = (persons) => {
  const males = persons.filter(person => person.sex === MALE)
  const females = persons.filter(person => person.sex === FEMALE)
  const compareHeight = (a, b) => a.height - b.height
  males.sort(compareHeight)
  females.sort(compareHeight)
  return males.map((male, idx) => [male, females[idx]]) // 男女の数は同数
}

この例はJavaScriptなので高階関数を使っていますが、仮にそういう機能が無かったとしても、

というコード構成は大きく変わらないでしょう。

一方、センスの無いゴミプログラマは、以下のような名状しがたきコードを書いてきます

function pair(psns) {
  var i = -1;
  var cnt = 0;
  var flg = psns[0] && psns[0].sex;
  var j = -1;
  var tmp = null;
  for(i = 0; i < psns.length; i++) {
    //console.log('■■■■■■■■■■■■■■■■■■■■ BEGIN ■■■■■■■■■■■■■■■■■■■■')
    //console.log(psns, 'i=' + i, 'cnt=' + cnt, 'flg=' + flg);
    if(psns[i].sex == flg) {
      //console.log('cnt: ' + cnt + '->' + (cnt+1));
      cnt++;
    } else {
      j = i - cnt + 1;
      //console.log('swap ' + i + '<-->' + j);
      tmp = psns[j];
      psns[j] = psns[i];
      psns[i] = tmp;
      i = j - 1; // <- 理由は分からないが、i = jだと上手くいかない(by XXXX)。
      cnt = 0;
      flg = flg == MALE ? FEMALE : MALE;
      while(j > 1) {
        if(psns[j].height < psns[j-2].height) {
          //console.log('swap ' + j + '<-->' + (j-2));
          tmp = psns[j-2];
          psns[j-2] = psns[j];
          psns[j] = tmp;
        }
        j -= 2;
      }
    }
    //console.log(psns, 'i=' + i, 'cnt=' + cnt, 'flg=' + flg);
    //console.log('■■■■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■')
    //console.log('')
  }
  for(i = 0; i < psns.length; i++) {
    //console.log('■■■■■■■■■■■■■■■■■■■■ BEGIN ■■■■■■■■■■■■■■■■■■■■')
    j = Math.floor(i / 2);
    //console.log(psns, 'i=' + i, 'j=' + j);
    tmp = psns[i];
    if(!(i % 2)) {
      psns[j] = [null, null];
    }
    if(tmp.sex == MALE) {
      psns[j][0] = tmp;
      psns[j][1] = psns[i+1];
    } else {
      psns[j][0] = psns[i+1];
      psns[j][1] = tmp;
    }
    i++;
    //console.log(psns, 'i=' + i, 'j=' + j);
    //console.log('■■■■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■')
  }
  psns.splice(psns.length / 2, psns.length);
}

こんなコードメンテナンスは御免被りたいです。一見して配列の要素を入れ替えていることが分かるだけで、実装を全て読まなければ(いや読んでも)処理の意図が全く分かりません。また、たとえば「i = j - 1」が間違って「i = j」などと書かれていてバグを起こしたとしても、原因を突き止めるのは困難を極めます

さて、このコードは具体的に何がいけないのでしょうか。長すぎることがいけないのしょうか。変数名が分かりにくいのがいけないのでしょうか。引数破壊的に変更しているのがいけないのでしょうか。不要コメントが残っているのがいけないのでしょうか。よく見ると、ソート処理で車輪の再発明をしていたり、「j」や「tmp」などが場所によって意味が違うカメレオン変数になっていたりしますが、それがいけないのでしょうか。どれも正しいですが、それらを逐一直したところで、本質的解決にはならないでしょう。

後者コードはもはや「ここを直したら良くなる」とかいレベルを超えています。たしかに、問題を具体的に挙げることはできます。このコードの致命的な問題が、凝集度の低さと、単一責任原則(SRP)違反にあるのは間違いありません。しかし、後者コードを書いてくる人に、

住民リストを男女に分ける処理や、リストソートをする処理、2つのリストをまとめる処理は、この問題とは独立して意味のある操作から、別の関数として抽出しましょう。その方がコードの見通しがよくなるし、一部の処理を修正したときの影響も小さくなるし、単体テストも書きやすくなります

なんて言ったって聞く耳を持たないでしょう。

そもそも、こういうコードを書く人は、この処理自体を「pair」なんて関数抽出すらしません。まだこの問題では入出力のフォーマットが明確に定義されているので、他人が1から書き直せますが、実際のプロダクトでは、無数の副作用を起こす数千行のコード迷路を彼の脳内フォーマットデータが通るわけです。もちろん、テストコードなんてありません。

まり、指摘をしても絶対に直らないのです。いくら言語の優れた機能ベストプラクティスを紹介しても、馬の耳に念仏。それらの利点を理解できるだけの脳みそが足りていないのです。

どうして、同じ処理を実装するのに、ここまでの違いが生じるのでしょうか。

これは、プログラミング技術問題ではありません。既に述べた通り、ふつうの人なら、特定機能の有無とか知識の程度にかかわらず、ふつうコードを書くのです。なぜなら、ふつうの人にはそちらの方が楽だからです。つまり、前者のコード別に何か卓越した技術を身につけた結果書けるようになるものではなく、まともな感覚さえ持っていれば、プログラミング初心者にとっても前者のコードの方が書きやすいのです。

まり後者のようなコードを書いてくる奴というのは、現実世界の捉え方が常人とは著しくずれているのです。要するに、「頭がおかしい」のです。この病気はもう直りません。だからセンスの無い人は絶対プログラマにはならないで下さい。

2020-04-08

anond:20200408130328

まあそうやろなあ

(function(){
  try{
    return (function(){ console.log("return"); })();
  }finally{
    console.log("finally");
  }
})()

// 出力
// return
// finally

2019-12-25

anond:20191225124529

console.log()がどこを出力先にするのかにもよるけど、

5G網から接続されたTCPソケットなら実際イケるんちゃう

(setIntervalのinterval設定ってコールバック呼んだ後なんだっけ先なんだっけ?)

anond:20191225123706

setInterval(_=>console.log("これが1秒に1000回表示できると思ったら大間違いだ"), 1);

2019-06-12

納得いかいから詳しい人教えて

masuda_array = ["パンティー"];
function hoge(array){
    array = ["うんち"];
    return array;
}
console.log(hoge(masuda_array)); // ["うんち"]
console.log(masuda_array); // ["パンティー"]

masuda_array = ["パンティー"];
function hoge(array){
    array[0] = "うんち";
    return array;
}
console.log(hoge(masuda_array)); // ["うんち"]
console.log(masuda_array); // ["うんち"]

なんでこの二つで動作が変わるの?

2019-02-07

anond:20190207155153

わかったよ、then使わずちゃんと書き直すってば。

(async () => 
  console.log( (await Promise.all(
    [
      'xevra',
      'Hamachiya2',
      'zyzy',
      'naoya',
      'amerio',
      'nitoyon',
      //'sbedit1234',
      'blueboy',
      'aikoku_sensei',
      'aflat_1000dai4',
      'kyo_ju',
      'MermaidSong',
      'anigoka',
      'miruna',
      'the_sun_also_rises',
      'enderuku',
      'frothmouth',
      'tanaka_yuuma',
      'rag_en',
      'comzoo',
      'Yagokoro',
      'kowyoshi',
      'quick_past',
      'zaikabou',
      'gui1',
      'scopedog',
      'qwerton',
      'white_rose',
      'kaitoster',
      'ninosan',
      'n2s',
      //'atsupi0420',
      //'hidamari1993',
      //'ketudan',
      'synonymous',
      'narwhal',
      'cloq',
      'kazuyomugi',
      'Doen',
      'Ilovenoel',
      'ribbentrop189',
      'htnmiki',
      'botuyoku',
      'hagex',
      'p_shirokuma',
      'takayoz',
      //'moko_chan',
      'Delete_All'
    ].map(  
      async id => (await fetch(`http://b.hatena.ne.jp/api/internal/cambridge/user/${id}`)).json()
    )
  )).sort((a,b)=>b.user.total_followers-a.user.total_followers).map(e=>`${e.user.display_name}:${e.user.total_followers}`).join('\n') )
)()

お気にいられ順

anond:20190203145803

naoya:4961

Hamachiya2:2348

xevra:1805

Delete_All:1319

kaitoster:930

p_shirokuma:878

nitoyon:824

zaikabou:812

kyo_ju:756

kowyoshi:664

hagex:659

kazuyomugi:572

anigoka:543

the_sun_also_rises:433

ninosan:422

blueboy:397

quick_past:351

htnmiki:324

synonymous:315

narwhal:300

aflat_1000dai4:287

miruna:276

rag_en:261

white_rose:236

gui1:233

scopedog:197

frothmouth:186

comzoo:184

cloq:183

enderuku:144

aikoku_sensei:113

zyzy:109

Doen:106

n2s:89

Yagokoro:67

amerio:64

Ilovenoel:56

qwerton:53

MermaidSong:34

ribbentrop189:21

tanaka_yuuma:18

takayoz:15

botuyoku:0

Promise.all([
'xevra',
'Hamachiya2',
'zyzy',
'naoya',
'amerio',
'nitoyon',
//'sbedit1234',
'blueboy',
'aikoku_sensei',
'aflat_1000dai4',
'kyo_ju',
'MermaidSong',
'anigoka',
'miruna',
'the_sun_also_rises',
'enderuku',
'frothmouth',
'tanaka_yuuma',
'rag_en',
'comzoo',
'Yagokoro',
'kowyoshi',
'quick_past',
'zaikabou',
'gui1',
'scopedog',
'qwerton',
'white_rose',
'kaitoster',
'ninosan',
'n2s',
//'atsupi0420',
//'hidamari1993',
//'ketudan',
'synonymous',
'narwhal',
'cloq',
'kazuyomugi',
'Doen',
'Ilovenoel',
'ribbentrop189',
'htnmiki',
'botuyoku',
'hagex',
'p_shirokuma',
'takayoz',
//'moko_chan',
'Delete_All'
].map(  
   async id => { return (await fetch(`http://b.hatena.ne.jp/api/internal/cambridge/user/${id}`)).json()}
)).then(
  v=>console.log(
    v.sort((a,b)=>b.user.total_followers-a.user.total_followers).map(e=>`${e.user.display_name}:${e.user.total_followers}`).join('\n')
  )
)

2018-04-08

読んだページを全部自動ブクマする

数日前に puppeteer で自動PDF にする試みを書いたブログホッテントリに入ってるのを見た

それに影響されて自動ブクマするもの作ってみた

bg.js

const username = ""
const api_key = ""

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
	if(message.bookmark){
		bookmark(message.bookmark)
	}
})

async function bookmark(url){
	fetch("http://b.hatena.ne.jp/atom/post", {
		method: "POST",
		referrer: "no-referrer",
		headers: {
			Accept: "application/x.atom+xml, application/xml, text/xml, */*",
			"X-WSSE": await createCredential(),
		},
		body: `
			<entry xmlns="http://purl.org/atom/ns#">
				<link rel="related" type="text/html" href="${url}" />
			</entry>
		`.replace(/\t/g, ""),
	}).then(e => {console.log(e)})
}

async function createCredential(){
	const non = Math.random().toString(36).substr(2)
	const now = new Date().toISOString()
	const buf = new TextEncoder().encode(non + now + api_key)
	const u8a = new Uint8Array(await crypto.subtle.digest("SHA-1", buf))
	const str = Array.from(u8a, e => String.fromCharCode(e)).join("")
	const b64 = btoa(str)
	return `UsernameToken Username="${username}", PasswordDigest="${b64}", Nonce="${btoa(non)}", Created="${now}"`
}

username と api_key を埋めてバックグラウンドで動かす

page.js

chrome.runtime.sendMessage({
	bookmark: location.href
})

ページ内で動かすコード

URLバックグラウンドに投げる

今は全部投げるコードになってるが、必要に応じていらないドメインを弾いたりする

2018-03-22

N予備校プログラミング入門コースを修了した

https://anond.hatelabo.jp/20170911110731

昨年、はてブでバズりまくったエントリにまんまと乗せられた実務経験なしのプログラミング初心者

N予備校プログラミングコースプログラミング入門 Webアプリコース(有料のプログラミングコースで一番最初にやるコース)を修了したので知見をまとめておきます

とりあえず結論

そんな感じです。以下、理由

経験者の独学はほぼ無理。

客観的データをあげると、

入門コース実践編となる3章からは各講義最後課題が出されて、

N予備校GitHubリポジトリにプルリクエストを出すことで課題の提出に変えて、

学習を進めていくのですが、

3章最初課題の提出数は現在424件あるのですが、

https://github.com/progedu/intro-curriculum-3001

入門コースラストの4章最後課題の提出数は現在24件です。

https://github.com/progedu/intro-curriculum-4023

ちょうど動画ベースの講座がこないだ終わったところなので、

単純に計算すると脱落率約95%となっています

課題は解答をコピペして提出することも可能なので、

ちゃんと内容を理解できている人の割合さらに低いと思われます

なんで?

なぜそんなに脱落していくかというと、まあ難易度だったり色々あるとは思うのですが

基本的には説明不足ということだと考えています

~をするにはこういうプログラムを書けばいい!ということは教えてくれるのですが、

なぜ、こういうプログラムを書けば~ができるのかということについての説明が少ないです。

感覚としては、途中の式と解答だけが書いてある数学参考書を読み進めているような感じで、学習者には途中の式の意味自力で読み解く能力が求められます

その過程ドキュメントをあたったり、自ら調べて解決する能力必要です。

またアロー関数式だったり、三項演算子論理演算子を用いた代入などの省略記法を多用する割にソースコード中にほとんどコメントを書かないことも初学者には難しいかなと感じました。

体系的な学習にも不向きです。

あとオブジェクト指向説明をせずに、JavaScriptオブジェクトを扱っていたり、

データベース学習をする前に、MVCパターンを扱っていたり、ちぐはぐさを感じるところも多かったです。

ということで(他にもいろいろあるのですが)、未経験者が独学で進めていくのは厳しいんじゃないかな~というのが入門コースを終えての結論です。

たとえば保護者の方が専門のエンジニアで分からないことがすぐに聞けるような環境にあればよい教材になるかもしれません。

初心者が中級者へステップアップするきっかけになる可能性はある。

ただ中級者へのステップアップを目指している初心者きっかけをつかむには良い教材になりえるとも感じました。

私自身、GitHubLinux(Ubuntu)、Node.jsExpressフレームワークなど、自主的にはなかなか食指が動かなかった分野の知識を得ることができたと思います

難易度は高いですが、中級者向けのまとまった教材というのはネット上にもあまりないと思いますので、ある程度経験のあるプログラマ知識を深めるために利用するのはありだと思います

それでも体系的な知識が得られるかというと微妙ですが…。

ちゃん勉強しようとするとかなり時間必要

ただ社会人学習を進めるにはまとまった時間の確保というのがネックになるとは思います

N予備校の入門コースの想定学習時間は180時間だったと思いますが、私はこのコースを修了するのに400時間前後かかったと思います

(今年の1月初頭からほぼ毎日午後を勉強時間に充てて、ようやく昨日入門コースを修了しました)

コースを終わらせることだけを目標にするならもっと短くできるとは思いますが、ある程度知識をつけて今後にいかすことを目標にするとなると、想定学習時間内でコースを終わらせるのは難しい気がします。

これから学習してみようと思っている方へ

色々書きましたが、それでも月1,000円というのは破格の価格設定だと思いますので、気になっている方は挑戦してみてもよいのではないでしょうか。

おすすめ学習方法としては

などがおすすめです。 「「分かりそう」で~」のサイトには本当にお世話になりました。m(_ _)m

ただ特にプログラミング経験の浅い方に伝えたいのですが、N予備校の入門コース理解できなかった、挫折たからといって、プログラミングができないということはまったくないです。

私自身、SEプログラマとしての実務経験はありませんが、趣味でも仕事でもガンガンプログラム活用しています

それでもN予備校の入門コースの内容は相当難しかったです。

ぜひ挫けずにプログラミング学習を続けていただきたいなと思っています

あとネット上にはN予備校プログラミングコースレビュー散見されますが、無料コースしかやってないんじゃないかなーというものが多いのでお気をつけください。

基本的無料コースと有料コースは別物と考えたほうがよいと思います

参考になれば幸いです。

ところで、N予備校ニコニコ動画再現コース2017年度中公開予定になってるんですけど、本当に公開されるんですよね・・・?(※)

3/31 追記 ※ギリギリでしたがちゃんと公開されたようです。退会してから気づいたので内容はわかりません。

ログイン ユーザー登録
ようこそ ゲスト さん