Node.jsとの闘いpart2

おはようございます、昨日の続きです

<余談>いきなり余談なんですが、そういえば昔ホテルで配膳のバイトしてる時があって、先輩に挨拶するときはどんな時間帯でも必ずおはようございますという文化があったを思い出しました</余談>

不明点

Mapとpairとmap関数とArrayとsortと…

'use strict';
const fs = require('fs');
const readline = require('readline');
const rs = fs.ReadStream('./popu-pref.csv');
const rl = readline.createInterface({ 'input': rs, 'output': {} });

###マップ(map関数とは異なる)というオブジェクトの作成(まだkeyにもvalueにも値は入っていない)
const map = new Map(); // key: 都道府県 value: 集計データのオブジェクト

rl.on('line', (lineString) => {
const columns = lineString.split(',');
const year = parseInt(columns[0]);
const prefecture = columns[2];
const popu = parseInt(columns[7]);
if (year === 2010 || year === 2015) {

###マップにはまだなんも値が入っていないので、prefectureを入れてもvalueはundefinedとなり、falseな値である。強制的にvalueに、popu10,popu15,changeに以下の値が代入される(ちなみにvalue={popu10:X, popu15:X, change:X}みたいなlist形式(?)の値です)
let value = map.get(prefecture);
if (!value) {
value = {
popu10: 0,
popu15: 0,
change: null
};
}

###もし2010ならvalueのpopu10にpopuが加えられて、もし2015ならpopu15に加えられるコマンド
if (year === 2010) {
value.popu10 += popu;
}
if (year === 2015) {
value.popu15 += popu;
}
map.set(prefecture, value);
}
});

###'close'というイベント(=全ての行が読み込み終わる)が生じたとき() => {}の関数を実行(今回は特に引数は存在しない)
rl.on('close', () => {

###let pair of mapは、今回のmapの構成[キー:値]という構成をpairに代入してくれるコマンド、つまりpair[1]はvauleを表すことがわかる。pairはmapの一単位を表すと考えよう。これをvalueというオブジェクトという定数でおいて(さっきまでのvalueは変数だった)、valueのプロパティを計算させて結果的に生じるmapを表示させている
for (let pair of map) {
const value = pair[1];
value.change = value.popu15 / value.popu10;
}

###Array.from(map)で、連想配列を普通の配列に、arrayのsort関数で順番を並び替える。
順番の並び替え方は、
1.まず引数を二つA,Bと指定する。
2.AB順に並び替えたいときは、{}内の関数の結果がを負になるように書き、BA順に並び替えたいときは{}内の整数が正になるようにかく
const rankingArray = Array.from(map).sort((pair1, pair2) => {
return pair2[1].change - pair1[1].change;
});

###rankingArrayのpair一つ一つに対して、下記のコマンドを行う(ちなみに今rankingArrayの形は{1, pair}={1, key, value}={1, key, popu10, popu15, change})みたいになっていてクッソ複雑です
const rankingStrings = rankingArray.map((pair) => {
return pair[0] + ': ' + pair[1].popu10 + '=>' + pair[1].popu15 + ' 変化率:' + pair[1].change;
});
});

こんな感じになっている、重要なことはドットつなぎになっているのは、そのオブジェクトのプロパティを呼び出して代入しているということ。例えばvalue.change = AだったらvalueのchangeというプロパティにAという値を代入しているということである。

こんなん無限に脳みそ使うしやばいなぁ

(実戦)THW make house arrests default punishment for crimes.

おはようございます

次のディベートの大会までに毎日ディベートブログ、一日一モーションを目指してがんばる予定でしたが、初日に選んだモーションが重すぎて、二日目にしてダウンしました。(ちなみに今日は三日目)まあしゃーない、とりあえず、今日やったモーションの復習をしよう。(1日一モーションはできなかったけど1日目にやったことをちゃんと理解したので満足することにした)

THW make house arrests default punishment for crimes.

ASIAN, GOV, PM

うーん、これ、まじで想像つかない系モーションだよね。
想像つかない系モーション(ban advertisementなど)はちゃんとAPを考えるようにしないとなぁという意識が大事

考えないといけないことチェックリスト

CJSのCriteiraのorder-of-priority, rehabilitationの持つ意味, 家にいる権利(難), Restorative/Retributive justice(難), 刑務所での生活環境とそれの与える害悪

話の流れ

1.model
2.Why it is diffcult for criminals to rehabilitate
3.Why it is the government responsibility to assure rehabilitation to criminals

こんな感じで話したわけだが、早速論理の穴を発見。「SQでrehablititateが難しいこと」と「assure rehabilitationのlegitimacy」が言えたところで、このmotionをとればassure rehablititaionを確立することができるという"""""AP"""""をいっていない。こういう忘れがちなところが一番論点になるんだよね、忘れがちというか表現しにくい感じがあるところで大抵ディベートがおきます

詳しく見ていく

1.model
自宅に軟禁を刑罰のdefaultにする。GPSやSecurityCameraをつけて犯罪者が家から出ていけないようにする。internet使用すること、家族とのcommunicationは認められる。

改善点

自宅軟禁を刑罰のdefaultにするとはどういうことか?たとえば、Minor offenseなら、仕事・学校以外の時間を必ず家にいるようにする門限(curfew)を設ける、felony/serious crimeなら24時間ずっと自宅を離れてはいけないとする(home incarceration)、的な感じで犯罪によって刑罰の重さは異なるけど、defaultとしては自宅軟禁をすることには変わりない。

house arrestはなんのためか

house arrest is a reasonable sanction for certain low-risk offenders who seem likely to profit from not being exposed to other criminals and from maintaining employment and family ties.
これが一番無難でわかりやすい気がしたけど、今回のmotionだと、default punishment for crimesとなっているから、low-risk offendersにだけ適応することを十分に言わないといけない(あくまでdefaultなので例外を作っても全然OK)

2. Why it is diffcult for criminals to rehabilitate in SQ

3つ述べ(ようとし)た

  1. incarcerate(投獄)の時間が長すぎて社会の変容に適応できずrehabilitationができない
  2. prisonには家族はいなく、police officer will give certain orders to criminals without affection or kindness without thinking about that criminalだからcriminalをrebailitateに対してdemotivateする
  3. criminalsは刑務所の中に入って、他のcriminalsとconnectionができるので、それで新たな犯罪(麻薬とか)を起こしてしまい、無限ループ

改善点

1.incarcerateの話は、投獄の時間が長い人に限ってそうなるが、投獄時間の長い人はserious crimeを起こしているのでdefaultのhouse arrestに当てはまらず、この話は無効
2. prisonには家族がいないが、面会のシステムがある。家族からたまにくる手紙より、日常と化した家族関係の方がmotivateする理由を言わないといけないのでは?
3. この議論はよく使われるが、実際にprisonがどんな環境なのかは不明なため、もっと調べる必要がある。

rehabilitateの意味について

CJSのrehabilitateの意味は、多分もともと社会復帰の意味で、これは1出所後の仕事復帰ことを指す場合もあれば、2単にもう犯罪を起こさなくなることを指す場合もある。
この二つのrehabilitationは繋がっている場合もある、というのも、1のrehabilitationができなかった場合に、生きていくすべを失って、もう一度犯罪を起こすという場合がある。まさに2である。この二つは繋がっているので、連続的に説明するのがいいかも。 CJS motionの場合、絶対、retribution, rehabilitation, deterrence, isolationのどれかの衝突になることが多い。今回は主にrehabilitationtとdeterrenceの衝突だったので、deterrenceよりもrehabilitationの方が重要であることを示す。これは、通常の人は、刑務所に入るのがいやで犯罪を犯さないのではなくて、その犯罪がダメなことであるとわかってるから犯罪を犯さない(eg:友達のものを盗まないのは、刑務所に入るからではなくて、直感的に盗むのがよくないとわかるから)、つまり刑務所自体のdeterrenceというのはあまり効果がない。 それに対し、軽犯罪者(窃盗)というのが再犯(recidivism)が多いので rehabilitaionをして犯罪を起こさないようにすることでdeterrenceにもなる。このような点でrehabilitationをpriorityにするべきである

刑務所での生活環境とそれの与える害悪

やばそうな生活環境
prisoners living in "squalid(きったない) conditions", being victimised by the officers, forced to live with other criminals
これによって大したことない罪でmental harm を受けたり、さらにseriousなcrimeに巻き込まれていくからやばいみたいな感じで伝えられるといいかも

3.Why it is the government responsibility to assure rehabilitation to criminals(importance)

  • rehabilitationに失敗した場合の再犯のリスクを減らせる
  • government's failure(rich-poorのgap,minority being offended)によって起こった犯罪でもありresponsibilityがある
  • 基本的人権を守る必要がある、罪に対する罰が大きすぎないようにすることが大事

ここはわかりやすいかもしれない

APをもっというべき

SQの問題点を解決できる、SQの裏返しのような気がしなくもないが、SQの裏返しとだけ考えてしまうとmechanismがかけてしまうことがあるのでちゃんとAPをいうべきである。
今回はAP想像できない形motionだからAPを具体的にいい、なんで自分たちのやり方でrehabilitateできるのか示す必要がある。この時にmodelが役立ち、maintaining employment and family tiesで割と簡単に説明することができる。

まとめ

想像できない系モーションではAPをちゃんとかく。今回であれば、APだと仕事を辞める必要もないし、家族からの信頼を絶望的に失うこともないので再復帰できる。
あとrehabilitationの意味が1仕事復帰2再犯しない、と二つあることに注意してそれを流れで説明すること
あとCJSだなぁと思った時はそれぞれのCriteriaの比較優位を説明するべき。説明の仕方は、AとBというCriteriaがある場合、AというCriteriaは〜なのでBというCriteriaのベースとなっている、〜なのでBというCriteriaも守ることができるみたいな感じで。

あ〜疲れた今日のディベート勉強終了

Node.jsとの闘い

おはようございます、今日はNode.jsについて理解して行きたいと思います。

不明点1

Node.jsとはなんぞや

このページがわかりやすい!
JSはブラウザ上で動くだけでなく、実はサーバー上でも動くという
なんていうかPHPとかJAVAみたいなシステム(?)とかアプリとかを作る時に使われる言語と似たような特性を実は持っているということ(?)
特にNode.jsはリアルタイム性が必要なアプリなどで活躍するらしい.FacebookメッセンジャーやLineなどのチャットはNode.jsでかけるという.
多分Node.jsがよくわからなかった原因はnode.jsをただ単にJSのファイルに見えてしまっていたからだろう。
新たな言語としてNode.jsを捉えればわかりやすい
Node.jsが出てくると絶対出てくるのが、nodebrewというソフトウェア
Node.jsというのは未だ開発中の言語であるため、そのバージョンupが常に必要なのである。そのバージョンupに用いるのがnodebrewというソフト。

不明点2

コマンドライン引数とは

コマンドライン引数の詳しい説明
コマンドラインをコンソール(キーボードだけで打ち込む画面)と考えて、引数を文字通り、プログラムに代入する値とすればわかりやすい
例えば、Aというプログラムに1+1を計算させるとする。この時、コンソールで A {1+1} みたいに書いたとする。
コマンドライン引数はこの{1+1}の部分を指す、難しくない気がする
これもいい!
あるアプリケーションの上にファイルをドラッグドロップしたらそのアプリケーションでそのファイルが開かれるじゃないですか、
その動作をコンソール画面で行なっているという意味ですね!理解理解

そういえば、Node.jsで書く時にもやはり現れる一行目の'use strict'とは一体何だったでしょうか

'use strict'; を追加することで未定義の変数の使用を禁止するなど、より厳格な文法でプログラムを書くことができる
だから基本的にはファイルの記載することが推奨される

話を戻すと、コマンドライン引数を取得するという文が何を意味しているのか考えよう。
例えばさっきの話でドラッグドロップするファイルが複数あるとするじゃないですか、それを一番目からn番目まで順番をふっていくんですよ
この時に、ARGVとかいうコマンドライン引数を格納してくれる特別な配列が存在して、これを用いれば、どんな引数を代入したか参照できるんですよ
例えば、ARGV[0]とすれば一番目の引数を参照できる、こんな感じで引数を参照することをコマンドライン引数の取得というのである。
次にこのサイト
上のサイトを見るに、Node.jsではコマンドライン引数の取得には、process.argv
が使われていて

コード 入っている情報
process.argv[0] 「Node.js」のパス
process.argv[1] 実行されたプログラムのファイルのパス
process.argv[2] 引数1
process.argv[3] 引数2


こんな感じの決まりになっています。だからコマンドライン引数を取得したければまずprocess.argv[2]です。
パスとは、ファイル、フォルダの場所を示した文字列のことです

不明点3

用語でわからないのが突如大量に出現してきたので、表にまとめることにする!

用語 意味
イベント駆動型プログラミング マウスをポチポチしたり、キーボードをカタカタしたり、何か特定のことが起こったら処理をやってね!なプログラムにすること
 Stream 非同期で情報を取り扱うための概念で、情報自体ではなく情報の流れに注目すること。
アイディアとしては、データを一気に処理するのではなく、ある単位(破片)で読み込み、 後工程に回して処理するようにしたこと。「Stream を制するものは Node.jsを制す」と言われているらしい。
CSV(Comma Separated Values) カンマで区切られたデータ形式のファイル
オブジェクト指向 オブジェクト指向は「『モノ(どんな奴でどう動く)』に注目した考え方」です。
オブジェクト指向の話で登場する「オブジェクト」は「モノ」です。
この「モノ」は「属性」と「操作」の要素を持っています。デュエマのカードを想像すると良い
メソッド オブジェクト指向における、操作の部分を表す言葉。そのオブジェクトはどんな効果がを持つか。

不明点4

Node.jsのモジュールが理解不能!

const fs = require('fs');

  • node.jsでファイルアクセスをする場合には、コアライブラリに含まれる「fs」モジュールを利用する必要があります。コアライブラリに含まれるモジュールや、グローバルなモジュールを利用するには、上記のように記述します。これで、「fs」という変数名で「fs」モジュールへアクセスできるようになりました.

 

const readline = require('readline');

  • ファイルを行ごとに読み込むことができるモジュールを呼び出す。これ自体は何を意味しているかというと、readlineというオブジェクトに、readlineという(メソッド)モジュールを設定したみたいなイメージ、デュエマを思い出そう


そういえばライブラリ>モジュール>関数、メソッドの順番を忘れないように。モジュールの読み込みはこのrequireを用いて行われる。

 

const rs = fs.ReadStream('./popu-pref.csv');

  • fsモジュールの中のReadStream関数を用いて、popu-pref.csvのstreamの形にしたファイル'rs'を作成

 

const rl = readline.createInterface({ 'input': rs, 'output': {} });

  • 'rsというsteamをinputしたら{}というsteamをoutputとしてだす'メソッドをもつオブジェクトrlを作成した。

 

ここで大事なことの復習:アロー関数ってなんだっけ
こちらを参考にして答えると、arrow関数は、本来の表記では必要なfucntionを書かなくて済むようにしたもの、書き方は、(引数,...)=>{...関数の本体...}、実際に関数を実行するにはconsole.log(arrow(X))をすればいい(Xは適当に入れる)

rl.on('line', (lineString) => {
console.log(lineString);
});

  • rlのsteamのなかで、'line'というイベントが発生したら(onの部分)、(lineString) => {console.log(lineString);}という無名関数を呼んでくださいという意味。
    このlineStringには、『readlineがもともとファイルを行ごとに読み込むことができるモジュールであり、行を一単位としているので 、』 'line'というイベントが発生した時点での、その行が代入されます。


ちなみにこの'line'というイベントは何かというと、The 'line' event is emitted whenever the input stream receives an end-of-line input (\n, \r, or \r\n). This usually occurs when the user presses the Enter, or Return keys.

 

rl.resume();

  • rlというstream(これはオブジェクトの属性部分の名称)に情報を流し始める処理である、resumeを呼び出している

 

(lineString) => {
const columns = lineString.split(','); //lineStringで与えられた文字列を、カンマ(,)で分割してcolumnという配列にした
const year = parseInt(columns[0]); //columnの配列の1番目を、parseIntで文字列から整数値に変換し、yearという変数に格納した
const prefecture = columns[2];//columnの配列の3番目をprefectureという変数に格納した
const popu = parseInt(columns[7]); columnの配列の8番目を、parseIntで文字列から整数値に変換し、popuという変数に格納した
if (year === 2010 || year === 2015) {
console.log(year);
console.log(prefecture);
console.log(popu);
} }
上記の関数で、無名関数を実装した。これに意味するところをその横に付け足した。全体での意味は、'line'というイベントが発生したら、年と県と人口を表示する。
読み込むファイルは、一行に「集計年,都道府県コード,都道府県名,男女区分,0〜4歳(人),5〜9歳(人),10〜14歳(人),15〜19歳(人)。。。」となっており、これを配列の形にしたのが(多分)columnだろう

もうまじむずい玄界灘

ディベート復帰!

ディベート最近全然やってない件について

大学で英語ディベートをやっていますが、最近全然行っていない。。。
問題なのが、あと一ヶ月後に英語ディベートの国際大会@日本が開かれてそれの参加申し込みをしてしまったこと、、チームメイトに迷惑かけたくないなぁ
ということでこの一ヶ月はディベート復帰宣言。競技プロ、Webプロ、機械学習アプリ制作インターンとかやりたいこと無限にあるので、これが最後の大会になるかもしれないという覚悟一ヶ月突っ走ろう。
<余談>プログラミングの勉強になるのでやはりこのブログもhtmlで書きまする</余談>

ディベートブログの書き方

自分のアウトプットの場としてのブログなので時間をかけすぎないように心がける。
写真とか多めでいこう、ウェブサイトのリンクを貼るときは内容をようやくするように心がける
これくらいかなぁ
順番としては

  1. Transcriptを読んで、趣旨をまとめる(Transcriptにない部分はやらない)
  2. ディベートの技術的側面を考える
  3. 考察(画像多め)

で行きます。では早速

EUDC2008GF

THW ban Nazi and Soviet symbols

PM趣旨

pmだから単刀直入な感じがしてわかりやすい、ハードスタンスを取る

Signpost1: When it is legitmate to ban symbols things just because they are oppressive and only because they are oppressive

これ、実際にスピーチで言っている内容は、When they are oppressive?の方が近いのかな

    1. When there is incitement towards hatred (even if it is not direct)→意味というのを大事にする生き物
    2. When it is bound up in relation with power→権力には抗えない

 

    人々がめっちゃ苦しむからbanに値する
Signpost2: Why these symbols are extremely offensive
    1. Because symbols are also a piece of shared communication
    2. Because those political ideologies are not valid at all

 

    これらのシンボルにuniqueなことを述べている(特に二つ目)

技法

  • Hardstanceをちゃんととる
    we accept that there may be a couple of cases where this line is hard to draw, so we say simply, where it's ambiguous, we're going to ban it. We will not take the risk.
  • 譲歩のやり方
    Because we think that in general and we think the opposition will agree with me that there is a presumption in favouring free speech. We think it's a kind of cool quite a lot of the time. But what we also think is that there's no reason to regard freedom of speech as an overriding good in every circumstance, right?
  • 論理が貫通しているのが見えやすいスピーチ(三段論法)
    シンボルがいつoppressiveなのか(これがSQにどちらかというと近い)←「シンボルがoppressiveである」というよりも説得力あり。
    oppressiveなsimbolはなぜbanに値するのか
  • 繰り返す綺麗なスピーチ(別々な言葉で繰り返すことで説得力を増している)
    1. to intimidate people, to scare people, to make people feel like they cannot go out, to make people feel like they are less, to make people feel like their words do not count the same as other people's words.
    2. these people are scum, these people are worth nothing, these people are less than animals and they deserve to be treated as less than animals,
    3. we must at minimum agree to live together; we must consent to associate as one society.

考察

Will Jones氏のprincipleを理解することで絶対的悪を正当化できる気がした。

we do think that in a pluralist society we like that people disagree about what the good is and how society should be organised. That's fine. //譲歩

But we also think that in order for a society to exist at all, we must at minimum agree to live together; we must consent to associate as one society. //社会を成立させるためなら合意を成立させないといけない

And so we say a basic commitment any ideology that wants to exist in a modern world must be a commitment to the equal concern and respect, which every single citizen deserves, right? //たとえどんな考え方であれ、どんなideologyも、基本的人権は尊重しなければ行けない

We say a genuine pluralism (I think you're out of time), a genuine pluralism is one where you have an overlapping consensus of people who disagree, but no overlapping consensus of reasonable doctrines of the good, right? //価値観の異なる人々の重なり合うコンセンサスはいいが、 despite its deep divisions, achieve stability and social unity by the public recognition of a reasonable political conception of justice.

We say the problem is that these are ideologies which have perpetrated the barbaric slaughter of millions upon millions of people for no better reason than they were enemy of proletariat or they were Jewish or they were gay or they were disabled or they were a gypsy or dozens of other things. We say that if you deny the basic rights of citizens, if you say as an ideology there are people who should be exterminated, you are not of a valid ideology, you are evil. We say, you are not part of a legitimate political discourse, and we are going to expunge you. reasonable political conception of justiceから外れているからこいつらは社会に存在してはいけないideologyであるという考え方、なんていうか最小限は守れ的な、全体的にシンボルを権力と結びつけ、人々に脅威を与えるものと解釈している なんか、比較ってものを出していないように思える。PMだからいいのかな?

OW趣旨

全体的にrebuttalがintegretedしてるから捉えにくい、ハードスタンスをとった相手に対し、行きすぎる可能性があるという定石を攻めている。

Signpost1: What is the power of symbols
  1. It enables us to constitute the wrongness in everyone who knows it is wrong
  2. We can tell people whether we should be afraid of by those symbols which prevents them from getting into positions of power easily
  3. a whole broad stratum of the population can come out and fight against these extremist by identifying them as evil, not by looking
    at the manifesto on their website but seeing that they carry the banner of a man who murdered 6 million Jews
  4. Society can be more resistant, can be more capable of dealing with other fearful symbols if they have to confront it
Signpost2: Why they have the right to express symbols and why it is not upon whether those symbols are right or wrong
  1. Looking at religions, political parties, countries, participation is meaningless if it is divorced from the identity of the individual involved.
    If they can’t use symbols to express their identity, we say that’s a problem. So they do have a right.
    Moreover, if props think that the state can legitimately articulate to individuals what does and does not constitute
    their identity. We think that’s also called oppression
  2. We say it’s because that there are some rights that are fundamental no matter what you say. It’s because there are some rights
    that are fundamental even if you’re wrong. And that because we can’t draw that dividing line, we can’t
    know when this power that they are giving to a state would be abused, that we can’t do it.
Signpost3: How societies do tackle extremism and difficut discourse
  1. When people have to go out on the street and people carrying Nazi flags and say “Down with fascism! Down with racism!”
    We say that is a better way for societies to be cured and preventing them ever having to deal with that problem

技法

    • APを考えて具体化するのがうまい
      もし完全になくなってしまったら。。。?
      • 悪というものを忘れていってしまう
      • 悪が権力を握る恐れがある
      • 社会が新たな脅威に対して脆弱になってしまう
    • 線引きが曖昧なものの決定権は与えない方がいい
      And that because we can’t draw that dividing line, we can’t know when this power that they are giving to a state would be abused, that we can’t do it.

考察

この人のprincipleもわかりやすい。「シンボルを権力と結びつける」という相手のパラダイムに乗っ取った反論だけでなく、「シンボルを人と結びつけている」。
symbolがndivisual identityと繋がっていることを言い、それを表現できないとそれこそ基本的人権を守れていないと言える
同じ過ちを繰り返さないためには、そういう権力との闘いが存在している方が良いという世界観を最後に見せてくれる、とてもいい文章(真似するのは以上に難しい)

明日考察を付け加えます。。。→考察を付け加えた!

まとめ

Simbolは権力と結びついて人々を圧迫しやすいが、同様にそれは人々の生きる指針ともなりうる
pluralismは、diverseなideaを認めるものの、must have recognition of reasonable political justice(human rights)
今後nazi,sovietに似た問題を起らないようにするには、やはりそれに対しての闘いを常にする必要があり、耐性をつける必要がある(忘れるので)

Git Github理解への道

今日は…

GIT! GITHUB! こいつらの使い方をマスターしてやります!
<余談>春休み、もっと効率よくwebの勉強がしたいと思って、インターン申し込みました。面接しなければ…。
そういえば、ブログ三日坊主になりそうな気がしてならないですが、ブログを書くことで理解がより深まることを実感しているのでそんなことにはならないでしょう。失笑</余談>
では早速いきましょう〜!今日は幾つ不明な箇所を克服できるでしょうか?(なんか今日はhtmlのtable tagを使ってみたりしたい)

不明点1

縦棒の役割とは??

shellscriptとかみてると、”|”(縦棒)が登場します。これは一体何を表すのか。
調べてみるとこれは、 縦棒(|)は「パイプ」と呼ばれ、1つめのコマンド(パイプの左側)の「標準出力」を2つ目のコマンドの「標準入力」に渡す働きをします。
(echo "Thank you for your access!") | nc -l 8000
っていうスクリプトが出てきたんですが、これは左側の標準出力は"Thank you for your access"なので、これをnc -l 8000コマンドに受け渡しているという意味です。
nc -l 8000 とはなんでしょうか。
ncはNetCatの略、NetCatとはサーバーとクライアントの情報の送受信に関するコマンドで、特にWebサーバーからの情報の取得や、メールの送信などの様々な機能があるらしいです。
ここでは、8000 というポートを使ってサーバーとして起動し、アクセスがあったら、標準入力の内容("Thank you for your access")を返して終了するという意味になっています。
NetCatと似た感じのコマンドでtelnetっていうのもあるそうです〜こっちはもっと遠隔のコンピューターに接続する方に特化してるっぽい(?)

不明点2

HTTPとは?TCPと何が違うんだろうか

このサイトわかりやすい!
上のサイトから引っ張ってきたんですが、

シーケンス 説明
1 利用者がWebブラウザにURLを入力してEnterキーを押す。
2 Webブラウザは指定したWebサーバにHTTPリクエストを送信して、Webページのデータを要求。
3 Webサーバは、Webブラウザから受信したHTTPリクエストを解析。
4 Webサーバが、Webブラウザに要求されたデータをHTTPレスポンスとして返信。
5 Webブラウザは、受信したデータを解析してWebページとして表示。


的な感じでHTTPは使われているそう。あと"HTTPはTCPプロトコル上で動作しており、Webサーバにアクセスするために使用しているポート番号は80。”
とも書いてありました!TCP( TransmissionControlProtocol)をベースにして接続が行われて、HTTP(HyperTextTransmissionProtocol)でHTML の情報が引き出されるそうです。
HTTPSというのもみますが、HTTPのなかのパスワードなどの個人情報を暗号化して通信するprotocolのことを言います。SはSecureの意味らしいです。
nc nnn.ed.jp 80
というNetCatを使ったコマンドがありますが、これは「 nnn.ed.jp というホスト名で表されるサーバーの 80 番ポートに接続する」を表し、
このホスト名というのはDNS(DomainNameSystem)を用いてIPアドレスに変換可能であるそう。このホスト名をドメインと呼ぶこともあります。
ちなみに、確認するとIPアドレスがサーバーorクライアントのネットワーク上の住所を表し、Portがその家の扉を表ます。
例えば、port番号が80だとすると、80番扉を使用するという意味を持ちます。大抵サーバー側の扉をいつも開いていて、クライアントは接続ごとに閉じるらしいです。
Portとは?
サーバーを自分で立てることもでき、同時にLinuxのportへの通信をmacOSのポートを同期させるようなport forwardっていうのもできます。

不明点3(ようやくGIT/GITHUB)

GITHUBの使い方がいまいちつかめていない…

(GITHUB)FORKとはなんのための機能なのか?

ForkはOriginalの開発に参加する意思を表すもので、Forkするとは自分のアカウントにリモートリポジトリのコピーを作成すること。
ここで用語確認、なんかリポジトリディレクトリ、リダイレクトなど色々混ざってきているけど。。

用語 意味
repository 英語でいう、倉庫・貯蔵庫。eg)nuclear waste repository 核廃棄物貯蔵所
GITHUBでコードが保存される場所をいう。
directory 英語でいう、住所氏名録。eg)directory of main offices and branch offices
パソコン内のファイルの位置を表す。
redirect 直訳は向きを変更すること。eg)redirect economic policy
(コマンド)> (ファイルディレクトリ)でコマンドの標準出力をファイルに記述させる。
(GITHUB)その他の機能

 めっちゃまとまっていた
issueとかwikiとかgistとかあります!wikiとgistはmarkdown方式で書かなければいけないので注意
他の人の作った李リポジトリにissueを残すこともできるし、自分のリポジトリにもissueをかける。
Forkしたリポジトリについては、ForkがもともとOriginalを改善(patch)するための機能なのでissueは自分で設定をいじらないとできないようになっている

不明点4(ようやくGIT/GITHUB)

GITがなんのためのものなのか全然把握してない

GITで何ができるか

GITというソフトウェアをinstallすると、GitHUB上のファイルを自分のマシンでも編集できるようになる。
GITHUB上のファイルを自分のマシンでいじるには、GITHUBにログインしないといけない、そこで使うのがsshである。
ubuntuを使う時も、毎回vagrant sshubuntuにログインしている。そのubuntuでさらに GITHUBにログインすればGITHUBのファイルをGITを用いてubuntuからいじれるのである。理解してきた(楽しい)
ちなみにsshはSecureShellの略称でセキュアな通信を行うためのプロトコルで、HTTPなどと同次元。
もちろんGITHUBssh(ログイン)するためにはユーザー名とパスワードが必要。
ここで、自分のマシン(ローカル)で公開鍵と秘密鍵を生成して、公開鍵をGITHUBに登録し、登録された公開鍵に対応した 秘密鍵を持っているクライアントのみが接続できます。 「パスワード認証」と比べ事前の準備が必要となるが、安全性は高い
sshについて詳しいyo
この次にやらないといけないことは、自分のアカウントのリポジトリ(リモートリポジトリ)と同じものを自分のマシンの内部に作ること(=clone)
cloneとForkは原理的には同じ、違う点は「誰の」ディレクトリを「どこの」ディレクトリに複製するかという点
cd workspace
git clone git@github.com:${あなたのusername}/${ファイル名}.git
のコマンドで自分のマシン内にworkspace/${ファイル名}というディレクトリができている、これはGITHUBに上がっているやつと全く同じ
今後GITHUB上でcommit(ファイルの編集)があった場合、
"""リポジトリとなっているディレクトリにchangeDirectoryしてから"""
git pull origin gh-pages
を使えば、最新の状態にupdateしてくれます。リモートリポジトリの内容をローカルリポジトリに引っ張ってくることをpullと言います。

GITの本来の役割はpushである(?)

自分のマシンでの編集をGITHUBにも適用させるために使うコマンドがpushである
でもpushの前にまず自分のローカルディレクトリと、リモートディレクトリを繋げる操作が必要である。
自分のマシンにディレクトリを作成するところから、それをアップロードするまでを順番に書いていく。

  1. ###Linuxにgit-newを作成
    cd ~/workspace
    mkdir git-new
    cd ~/workspace/git-new
  2. ###gitリポジトリをここに作成(.../git-new/.gitというディレクトリが作成される)
    git init
  3. ###このディレクトリに適当なファイルを作る(git-newのなかにREADME.mdができる)
    echo 初めてのpush | README.md
  4. ###ファイルをGITHUBにあげたいという願望を出すコマンド
    git add README.md
  5. ###このファイルをGITHUBにあげる動作に名前をつける eg.ボタン修正
    git commit -m "これが初めてのpush"
    ちなみにこの”-m”はcommit messageの "m"
  6. ###GITHUBに最初に作ったディレクトリと同じレポジトリを作る
  7. ###…or push an existing repository from the command lineに書いてあるコマンドを用いて、レポジトリにローカルディレクトリ内容を入れる
    • ###ローカルディレクトリ(~/workspace/git-new)のoriginをリモートディレクトリのgit-new.gitに設定
      git remote add origin git@github.com:${あなたのusername}/git-new.git
    • ###今設定したoriginにディレクトリを適応させる
      git push -u origin master

プログラミングってやってて思うけど、最初に覚えることが多いね!疲れます。

まずはWEB programming

目標について

大学は春休みに突入しました。目標はWebServiceを作れるようになることです

僕の勉強方法

N予備校のプログラミングコースというのを月額1000円で使用していきます。はじめの方を体験版でやったですが教材がわかりやすかった!これは安い!!
ちなみにこのブログはN予備校で習ったhtmlで書いています。一応N予備校のWebSiteを貼っておきます。
N予備校のホームページ

このブログは理解の向上ために書いていこうと思っています。プロセスを一つずつ書いていくわけではなく、わからなくなったら整理していくだけです。
早速始めていきましょう

<余談>htmlを自分で書くならjs、cssも自分で描きたいなとか思い始めてwordpress使いてぇってなってるんで、お金ちゃんと稼ぎ始めたらサーバー借りてやり始めることにします。
wordpress、かけるようになりたい!!</余談>

不明点1

シェルプログラミングとはなんぞや

シェルとは
人間が入力したものをコンピューターに伝えるプログラム。
"コンピューターを一つの会社とすると、シェルはその会社の受付のおねーさん"
このサイトを参考にしました
シェルの種類


bashlinuxの標準shellらしいです!でシェルスクリプトにいつもかく
"#!/bin/bash"ってやつはコンピューター内部のどっかにあるbashっていうshellのショートカットキーみたいなノリらしい!
なんとなく理解理解.
プログラムとかはJSと似たもののようなので実際に何に使われるのかだけ整理しましょう
調べてみると、shellスクリプトは自動化される定型処理に用いられているそうです。(抽象的ィ!w だけどこれ以上は深入りしません)

不明点2

TCPってなんぞや

今気づいたけど、プログラムの不明点というより用語の知識欠如による不明点が多く見られる.
TCPとはTransission Control Protocolの略
パケット通信をする際に、相手の通信の状況を把握しながら接続を確立し、データの転送終了とともに接続をきるプロトコル(規約?) らしい
User Datagram Protocol(UDP)ってのもあるらしいんだけど、こっちは接続を確立する前に一方的にデータを送ることで転送効率を重視している
これに比べてTCPは転送の確実性を重視、インターネットでデータの安全性を高めているんだって〜!
この接続の速さを調べるのにpingコマンドってのがあって、相手の応答時間とかがわかります。

不明点3

tmux(ティーマックス)ってなんぞ??

このサイトこのサイトを読んでだいたい理解できました〜
とりあえず、tmuxは複数のterminalを開いている時に作業を効率化したり、自身がsshしてるサーバーがさらに他のサーバーにsshして作業している時とかに、 有能なコマンドっぽいです。