はてなキーワード: console.logとは
console.log("仕事に疲れた");
console.log("転職したいけど、次の仕事見つかるか不安だなぁ");
console.log("応募してみないと分からないのはそうだけど");
for (let chr of "みんな、しんどい時ってどうしてるのかなぁ?") {
console.log(chr);
}
createPassword = (n) => n==0 ? "" : String.fromCharCode(33+Math.floor(Math.random()*93)) + createPassword(n-1); console.log( createPassword(8) );
「 ①IFでAかBを選択させてどっちかの設定を実行
②Whileで決められた回数分繰り返す
これでやりたいことは分かる。分かるけれどこれでどうやって動画や音楽のエンコードをしたり
画像処理をしたりするソフトウェアになるのかというのがよく分からない。」
プログラミングでやることは、その2つだけじゃなくて、もうひとつある。
③関数を呼び出すこと
Javascriptなら、console.log("Hello world")。
これは、テキストを出力するという関数を呼び出していて、関数の内部を理解しなくても使える。
オブジェクト指向も、結局はこれと同じこと。あらかじめ用意されている関数・メソッドを呼び出せばいい。
function pair(psns) { var i = -1; var cnt = 0; var flg = psns[0] &amp;&amp; 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); }
プログラミングはセンスです。センスの無い人がプログラマになると、他のすべての人に迷惑がかかります。だから、センスの無い人は絶対にプログラマにならないで下さい。
プログラミングのセンスが無い人や、プログラミングをやったことの無い人は、知識を得たり経験を積んだりすれば、誰でも「良いプログラマ」になれると思っているようですが、無理です。
というのも、センスの無いプログラマの問題は、知識や経験の不足ではないからです。センスの無いプログラマの救いようの無い問題は「頭がおかしいこと」なのです。
題材は何でもいいのですが、具体的なコードを見た方がイメージがつきやすいと思いますので、とりあえず以下の問題を考えます。
住民のリストが与えられるので、背の低い順に男女ペアにしたリストを作って下さい。ただし、男女の数は同数であるとします。
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] &amp;&amp; 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から書き直せますが、実際のプロダクトでは、無数の副作用を起こす数千行のコードの迷路を彼の脳内フォーマットのデータが通るわけです。もちろん、テストコードなんてありません。
つまり、指摘をしても絶対に直らないのです。いくら言語の優れた機能やベストプラクティスを紹介しても、馬の耳に念仏。それらの利点を理解できるだけの脳みそが足りていないのです。
どうして、同じ処理を実装するのに、ここまでの違いが生じるのでしょうか。
これは、プログラミングの技術の問題ではありません。既に述べた通り、ふつうの人なら、特定の機能の有無とか知識の程度にかかわらず、ふつうのコードを書くのです。なぜなら、ふつうの人にはそちらの方が楽だからです。つまり、前者のコードは別に何か卓越した技術を身につけた結果書けるようになるものではなく、まともな感覚さえ持っていれば、プログラミング初心者にとっても前者のコードの方が書きやすいのです。
つまり、後者のようなコードを書いてくる奴というのは、現実世界の捉え方が常人とは著しくずれているのです。要するに、「頭がおかしい」のです。この病気はもう直りません。だから、センスの無い人は絶対にプログラマにはならないで下さい。
console.log(0.30000000000000002 - 0.300000000000000004);
console.log(0.1 + 0.2 == 0.30000000000000004);
まあそうやろなあ
(function(){ try{ return (function(){ console.log("return"); })(); }finally{ console.log("finally"); } })() // 出力 // return // finally
console.log()がどこを出力先にするのかにもよるけど、
(setIntervalのinterval設定ってコールバック呼んだ後なんだっけ先なんだっけ?)
setInterval(_=>console.log("これが1秒に1000回表示できると思ったら大間違いだ"), 1);
まずf12を押してconsole.log()をします
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); // ["うんち"]
なんでこの二つで動作が変わるの?
(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') ) )()
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') ) )
printとconsole.logどっちが好き?
数日前に 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 })
ページ内で動かすコード
https://anond.hatelabo.jp/20170911110731
昨年、はてブでバズりまくったエントリにまんまと乗せられた実務経験なしのプログラミング初心者が
N予備校プログラミングコースのプログラミング入門 Webアプリコース(有料のプログラミングコースで一番最初にやるコース)を修了したので知見をまとめておきます。
そんな感じです。以下、理由。
入門コースの実践編となる3章からは各講義の最後に課題が出されて、
N予備校のGitHubリポジトリにプルリクエストを出すことで課題の提出に変えて、
学習を進めていくのですが、
https://github.com/progedu/intro-curriculum-3001
https://github.com/progedu/intro-curriculum-4023
ちゃんと内容を理解できている人の割合はさらに低いと思われます。
なぜそんなに脱落していくかというと、まあ難易度だったり色々あるとは思うのですが
~をするにはこういうプログラムを書けばいい!ということは教えてくれるのですが、
なぜ、こういうプログラムを書けば~ができるのかということについての説明が少ないです。
感覚としては、途中の式と解答だけが書いてある数学の参考書を読み進めているような感じで、学習者には途中の式の意味を自力で読み解く能力が求められます。
その過程でドキュメントをあたったり、自ら調べて解決する能力が必要です。
またアロー関数式だったり、三項演算子や論理演算子を用いた代入などの省略記法を多用する割にソースコード中にほとんどコメントを書かないことも初学者には難しいかなと感じました。
体系的な学習にも不向きです。
あとオブジェクト指向の説明をせずに、JavaScriptのオブジェクトを扱っていたり、
データベースの学習をする前に、MVCパターンを扱っていたり、ちぐはぐさを感じるところも多かったです。
ということで(他にもいろいろあるのですが)、未経験者が独学で進めていくのは厳しいんじゃないかな~というのが入門コースを終えての結論です。
たとえば保護者の方が専門のエンジニアで分からないことがすぐに聞けるような環境にあればよい教材になるかもしれません。
ただ中級者へのステップアップを目指している初心者がきっかけをつかむには良い教材になりえるとも感じました。
私自身、GitHub、Linux(Ubuntu)、Node.js、Expressフレームワークなど、自主的にはなかなか食指が動かなかった分野の知識を得ることができたと思います。
難易度は高いですが、中級者向けのまとまった教材というのはネット上にもあまりないと思いますので、ある程度経験のあるプログラマが知識を深めるために利用するのはありだと思います。
ただ社会人が学習を進めるにはまとまった時間の確保というのがネックになるとは思います。
N予備校の入門コースの想定学習時間は180時間だったと思いますが、私はこのコースを修了するのに400時間前後かかったと思います。
(今年の1月初頭からほぼ毎日午後を勉強時間に充てて、ようやく昨日入門コースを修了しました)
コースを終わらせることだけを目標にするならもっと短くできるとは思いますが、ある程度知識をつけて今後にいかすことを目標にするとなると、想定学習時間内でコースを終わらせるのは難しい気がします。
色々書きましたが、それでも月1,000円というのは破格の価格設定だと思いますので、気になっている方は挑戦してみてもよいのではないでしょうか。
などがおすすめです。 「「分かりそう」で~」のサイトには本当にお世話になりました。m(_ _)m
ただ特にプログラミング経験の浅い方に伝えたいのですが、N予備校の入門コースが理解できなかった、挫折したからといって、プログラミングができないということはまったくないです。
私自身、SEやプログラマとしての実務経験はありませんが、趣味でも仕事でもガンガンプログラムを活用しています。
ぜひ挫けずにプログラミングの学習を続けていただきたいなと思っています。
あとネット上にはN予備校のプログラミングコースのレビューも散見されますが、無料コースしかやってないんじゃないかなーというものが多いのでお気をつけください。
基本的に無料コースと有料コースは別物と考えたほうがよいと思います。
参考になれば幸いです。
ところで、N予備校のニコニコ動画再現コースが2017年度中公開予定になってるんですけど、本当に公開されるんですよね・・・?(※)
var hatenadfp = hatenadfp || {};
hatenadfp._startTime = new Date().getTime();
hatenadfp.adUnits = hatenadfp.adUnits || [];
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
hatenadfp.debug = hatenadfp.debug || false;
hatenadfp.isNGContent = typeof hatenadfp.isNGContent !== 'undefined' ? hatenadfp.isNGContent : function () {
return false;
};
hatenadfp.enableSingleRequest = hatenadfp.enableSingleRequest || false;
hatenadfp.slotRenderEndedCallback = hatenadfp.slotRenderEndedCallback || function (event) {
if (hatenadfp.debug || window.location.search.match('hatena_dfp_debug=1')) {
console.log( 'Slot ' + event.slot.getAdUnitPath() + ' has been rendered in '
+ (new Date().getTime() - hatenadfp._startTime) + ' msec, with' +
' size: ' + event.size,
' creativeID: ' + event.creativeId +
' isEmpty: ' + event.isEmpty +
' lineItemId: ' + event.lineItemId +
' serviceName: ' + event.serviceName );
}
};
http://anond.hatelabo.jp/20170509183828
を書いた増田です。
こんなにたくさん反応があると思っていませんでした。
開発に対してモチベーションが保てずに、愚痴まとめてスッキリしようとか、そういう気持ちで殴り書いたものだったので。
本当にありがとうございます。
「俺、こんなんドン・キホーテと一緒やん」みたいな気持ちでやってたことが、少し報われました。
自分発信のものに反応もらえるってこんなに嬉しいんですね。(何しろ二年くらいそういうのないもので。)
はてブ、ツイッターでの反応は全部読んでます。ありがとうございます。(二年なかったので許してください。気持ち悪がらないでください。)
どうせお前のスキル不足だろ!!!バカが!!!働け!!!死ね!!!みたいなの予想してたので、9割くらいの人に同調されてるのに少しびっくりしています。
と同時に、そんなんやっぱりどっか根本的におかしいよね、なんて思ったりもしています。大きい問題すぎてどうにもできないですが。ちなみにスキル不足はあっています。
いくつかちょっと返したいコメントあったので、ざっくり返信します。
ーーーーーーーーーーーーーーーーーーーーーー
一応お給料はいただいてます。少ないですが。僕は業務委託なので、会社が大丈夫かどうかはあまり興味がないのでよくわかりません。潰れたら次に行くだけです。
あんまり詳しいことは言えませんしわかりませんが、受託開発みたいなことをしているようなので裏で黒いことをしていない限りは、そこで得た収入をつぎ込んでいるのだと思います。今の体制を維持していくだけなら会社的にはそんなに負担になっていないのかもしれません。プロっぽい人が一人もいないので、実験的な意味合いもあるのかなあと勝手に思っています。
・「辞めればいいのに」
おっしゃる通り。だけど僕が抜けたらもうこのサービス動かなくなってしまいます。一回やるって言って、お金もらっている以上は続けたいじゃないですか、できるだけ。一応愛着も二ミリくらいあります。でも、お給料出なくなったら秒でやめますよ。
・「仕様決めには入らないの?」
この話聞きます?
~~~~~~~~~~
ディ「やっぱり仕様決めるのに作る人がいないと進まないよね!」
僕「そうですね。」
ディ「まず、今回はこういう機能を入れたくて、この機能が狙っている効果としてはね・・・」(クソでかいビジョンの説明。Google行け。)
僕「なんとなく伝わりました。で、どういうの作りたいんですか?」
ディ「こうこうこんな感じで、〇〇(ちょっと話題のスタートアップのサービス)みたいな、ユーザーが楽しんで使ってくれる機能がいいね!」
僕「なるほど。まず、それもう別サービスでやったほうがよくないですか?今までの方向性から変わりすぎなような。あんまり詰め込むとユーザーわかんないですよ。」
ディ「大丈夫!後から説明する!もうストーリーはできてるから!そしてそれはデザイン次第だから!」
僕「わかりました。後ここ、なんか聞いてたビジョンとずれてるようなんですけど。」
ディ「そこはねーこうこうこういう理由でね、こうなってこう、さっきの説明もしちゃうけど、ここからこうなるストーリーを狙ってるんだよ」(ユーザーにその説明する気なのかな?)
僕「なるほどですね。じゃあ、全体的にこういう仕様にしたほうがよくないですか?そんなにビジョンからずれてもないですし。」
ディ「うーん・・・それだとなあ、なんか違うんだよな。」
僕「こっちの方が技術的なこういう問題も解消できますよ。ちょっと初めのだとすぐ実装思い浮かばないですし、バグも出やすそうです。」
ディ「じゃあ、こっちでいこう!!!!」
僕「わかりました。」
ディ「で、どれくらいでできるかな?」
僕「え、まだ方向性だけで、何にも決まってないのと同じなので見積もりはできないですよ。」
ディ「そのために呼んだのに!!!!!」
~~~~~数時間後~~~~~
僕「ここはどうするつもりですか?僕はA案の方がいいと思いますけど。B案ちょっと影響大きすぎますし。」
ディ「でもB案もなあ・・・B案じゃないとストーリーがなあ・・・」(この仕様会議中にもう五回はそのストーリー外れてるよね?)
僕「(こうなると進まないので)じゃあB案で。」
ディ「お願い!!!!」
~~~~~数時間後~~~~~
僕「なるほど、でもこの機能、ユーザーいないと楽しめないですよね?こうこうこうしたら、いいんじゃないですかね?」
僕「いや、というか、ストーリー自体ユーザーいないと途中でこけて、ケアできてないこといっぱいあると思うので、コアならなおさらちょっと考え直した方が。」
ディ「・・・・・・・・(キレ気味に)じゃあどうするの?全部無駄になるよ?」(ご愛顧ありがとうございましたってhtmlならすぐ書けるよ?)
~~~~~~~~~~
こんな感じですぐスリーパーホールドで固められちゃうんで、無駄なんです。
・「今どきPDFで納品とかあるの?」
僕も驚いています。何度か無理って突き返したんですけど、他のツールでも手間があんまり変わらなかった(すごい話し合うくせに実際見て大幅に手直しがある。)
ので、もうPDFで仮組みした方が早いと思って諦めてます。紙出身なんじゃないの?って意見見て、なるほど、と納得しました。
ーーーーーーーーーーーーーーーーーーーーーー
なんかいっぱい書きたいことあったんですが、忘れちゃいました。
辻褄があってない部分は、本当のこと書きすぎてて、ちょこちょこ誇張入れたり省いたり、言えないことをごまかしたり、分かりにくいなとおもったところを直したりしたためです。単純にミスってるとかもあるかもなので、雰囲気で読んで下さい。ミスを錯乱に変える高等テクニックだと思って褒めてくれてもこちらとしては何の問題もありません。褒めて。
ちなみにディレクターは二人居ますが、もう片方はほとんど言いなりなので、ここに書いているやり取りは、一人のディレクターしか出てきていません。
こんなうだつの上がらないエンジニアの戯言、何の先の展開力もない、ただの文字だけのコンテンツが、2日で600はてブ以上取って、ほんとうにインターネットすごい。
もっと正直に話すと、最近鬱手前っぽい症状が出ていて(一回なったことがあるので)、ちょっとやばいと思ったので、書きました。
本当に激務でもなく、パワハラもない、これ以外のストレスはないホワイトな現場なんですが、こういうことでも積み重ねていくと滅入っていくんだ、と自分でもちょっとびっくりしています。
また溜まったり、状況が変わったら(転職とか転職とか転職とか)書きます。本当は漫画にしたいと思っていたのですが、下手すぎて文章にしました。誰か漫画にしてください(強欲)。
console.log("thank you for reading!!");
~~~~~追記~~~~~
続編も思ったより伸びてしまいました。20はてブくらいで尻すぼむだろうと思っていたので。
本当にありがとうございます。
そしてみなさんご心配ありがとうございます。
・ねる
・やすむ
・てきとうなことをいう
・むしする
と、危ない時には四つの技を覚えましたので、戦闘では全く使えませんが、自己防衛にはまあまあ長けたポケモンになっていますので心配いりません。
文読みやすいとかうまいとか、言われ慣れてないので困惑しています。ありがとうございます。
書くこと自体は割と好きな方なので、これくらいの脊髄反射みたいなものでよければ、シリーズ化とまではいきませんが、書き続けたいなと思っています。
増田として書くのも気楽で楽しいんですが、別サービスへの移行も考え中です。まとめるとき楽そうなので。でも、こういうのって増田だからいいんですかね?
あまりブログなど続いた覚えがないので、まだ思案中ですし、もう書けることも仕事系統だと同じテイストになっちゃうので、読み飽きるかなあとも思っています。
ではでは、もしかしたら増田としてはこれが最後かもしれません。
人には言えないドン引きされるような性の話が書きたくなったらまた来るかもしれません。
console.log("see you later!!!");
var a =[];
a[0] = 10;
a["1"] = 100;
a["a"] = 20;
console.log(a);
:echo 1 / 0 :echo 0 / 0
2147483647 -2147483648
きっしょwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
他の言語もチェックしてみるか
package main import "fmt" func main() { fmt.Println(1 / 0) fmt.Println(0 / 0) }
echo 1 / 0; echo 0 / 0;
PHP Warning: Division by zero。
print 1 / 0 print 0 / 0
ZeroDivisionError: integer division or modulo by zero
print(1 / 0) print(0 / 0)
ZeroDivisionError: division by zero
nodejsだと1/0と0/0で異なるメッセージが表示された。
console.log(1 / 0);
Infinity
console.log(0 / 0);
luajitだとnodejsで表示されたメッセージの短縮形で表示された
print(1 / 0)
print(0 / 0)
main = do print(1 / 0)
Infinity
main = do print(0 / 0)
public class Test { public static void main(String[] args) { System.out.println(1 / 0); } }
public class Test { public static void main(String[] args) { System.out.println(0 / 0); } }
Exception in thread "main" java.lang.ArithmeticException: / by zero at Test.main(Test.java:3)
#!/bin/bash echo $((1 / 0)) echo $((0 / 0))
test.bash: 行 4: 1 / 0: 0 による除算です (エラーのあるトークンは "0") test.bash: 行 5: 0 / 0: 0 による除算です (エラーのあるトークンは "0")
haskellとnodejsとluajitはエラーにならないけどまあいい。
Vimはやべえよ。
for(var i = 0; i < list.length; i++){ }
にしておいた。Windowsにjsファイルでスクリプトを食わせたら動いたけど、XulRunnerよ、Array.forEachは使えないんだなきっと。ふざけやがって。計6時間消費、Array.forEachを何とかつかってやろうと思っていたが。
Mozilla が Microsoftなどに負けたのは、ふつうに使える開発ツールが無さすぎなんだよ。傾斜生産方式を見習えっての。
少し直してはアドオンパッケージングして、ロードさせてアプリ再起動させて実行、また直してはアドオンパッケージングして、ロードさせてアプリ再起動させて実行で、たかが1文字間違えていただけで見つけるのに数十分もかけさせられてたら萎えるわ。alertも使えないし、console.log とかいうのも ctrl+shift+J で出る画面になにも表示されないし。
Visual Studioはサイコーだね!!Java なんて手を出さなくて助かったわ。重くてすぐオチる Eplicse なんて使っていたらストレスたまるし。