SINGEKI no OJISAN

エンジニアになると決めたのだ

ネットワークの基礎知識

コンピューターネットワークとは

人で言えば人脈の様なもので、生活する上で周りとのコミュニケーションなどがあると思います。 コンピューターネットワークは、コンピューター同志の繋がりの事を言います。 お互いの送受信などなど・・・。 コンピューターネットワークのメリット データやリソースの共有ができ、遠距離でも、多数に対して素早く低コストで情報を発信、受信できます。 例えば、データなどの共有や、リソースの共有、情報の送受信など、今の私たちの身近のあるsnsなど、様々な場面で使われています。

LANとWAN

LAN(Local Area Network)は、建物内、敷地内などで、狭い範囲のネットワークです。自前で構築できます。

WAN(Wide Area Network)は地理的に離れたLANとLANを結びつけることで構築する広い範囲のネットワークです。電気通信事業者(キャリア)がサービスを提供しています。

インターネット

インターネットはWANの一種です。インターネットはプロバイダ(ISP : Internet Service Provider)と呼ばれる通信事業者を介して構築されている世界規模のネットワークです。世界中のネットワークをTCP/IPという技術で相互接続しています。 インターネットの技術(TCP/IP)を用いて作られた社内ネットワークをイントラネットと言います。使用を限定しているアプリケーションや情報を共有できます。インターネットとさほど変わらないですが、組織内(大学など)で使うインターネットをイントラネットと呼びます。

イントラネットイントラネットを結んだものをエクストラネットと言います。簡単に説明すると、A社とB社で社内の情報を共有したいときなどに使う大きいイントラネットです。

サーバーとクライアント

ある機能を持ったソフトウェアのことをアプリケーションと言います。 自身が保有するアプリのサービス他に提供するコンピューターをサーバーと言います。 他が保有するアプリのサービスを利用する側のコンピューターをクライアントと言います。 例えば、みなさんが使っているGoogleのシステムがサーバーで、そのGoogleのサービスを使うPCやコンピューター端末がクライアントです。 サービスをする側がサーバーで受ける側がクライアントです。

ネットワークユーザーアプリケーション

ネットワークを利用したアプリケーションをネットワークユーザーアプリケーションと言います。 日頃私たちが使っているLINEやGoogleなどが、ネットワークユーザーアプリケーションです。 ネットワークユーザーアプリケーションの中にも種類があります。 ユーザの実行や予め設定されたタイミングで自動実行や終了するものをバッチアプリケーションと言います。 例えば更新プログラムなどボタンを押したら勝手に更新される様なものです。 次に、クライアントとサーバーでデータ通信が発生するものをインタラクティブアプリケーションと言います。 これは、ブラウザでのゲームや動画サイト、ネットサーフィンをするものなどは大体インタラクティブアプリケーションです。 次に、クライアントとクライアントでデータ通信が発生するものをリアルタイムアプリケーションと言います。 これは、ビデオチャットや音声通話などです。

データが送られる仕組み

PCはどんな情報2進数データ(0と1を組み合わせた数値のデータ)に変換して扱います。 私たちは日本語、英語など様々な言語を使いますがPCの世界では0と1しかありません。 例えば、LINEでHelloと相手に送るとその文字を1000000100100010101001このように0と1に変換します。 この変換された2進数データをバイナリデータとも言います。 この変換されたバイナリデータを電気信号に変換し、送りたい相手の元でまた、バイナリデータに変換され、画面上にHelloと表示されるわけです。 順を追って説明すると 人間にわかる情報→2進数データ(バイナリデータ)→電気信号→2進数データ(バイナリデータ)→人間にわかる情報 この様に伝達されていきます。 また、情報を二進数データに変換することを符号化(エンコード)、逆に戻すことを復号化(デコード)と言います。 世に存在する様々な文字に対する番号を文字コードと言います。 文字コードは、一文字一文字に対するバイナリデータが書かれたメモ帳みたいなイメージです。 例えば、

「すき」と送信する時
「す」と「き」を文字データの中から探す。。。
す→1000001010110111
き→1000001010111100

これを、バイナリデータとして送るというイメージです。 受信する時も同じイメージになります。

文字コードは、世界中で統一されているわけではなく、EUC,Shift_JIS,Unicodeなど様々な様式があるため種類ごとに存在します。 これでよくあるのが、文字化けです。文字化けは対応している文字コード以外の文字を送受信すると、決められた文字コードが見つからずに文字化けという現象が起きているわけです。

バイナリデータが電気信号に変換されるとどのように電気信号で送っているかを簡単にこんなイメージぐらいで説明します。 厳密ではないので、イメージ程度で見てください。 バイナリデータを送信すると、「0」が電気off、「1」が電気onに見立てた電気信号に変換されます。 電気信号が、モールス信号の様に送られていく感じです。

帯域幅

帯域幅とは、1秒間にどれだけの情報を送ることができるかを表す言葉です。bandwidthとも言います。 (電気物理本来の意味は取り得る周波数の最大←→最小の差分) 帯域幅の広さに比例して1秒間に送ることのできるデータ量が増える為通信速度と同じ意味合いで使われる様になり、 1秒間に何bit送ることができるかを表すbps(bits per second)という単位で表します。 帯域幅は1秒間にどれだけ送ることができるかと言いましたが、 1秒間に5bpsと1秒間に13bpsだとしたら、1秒間に13bpsの方が多くの情報を送っているので、つまりは通信速度が速いということです。 ちなみに、bitとは、pcでの01の世界における1文字分を1bit、同様に2文字分を2bitとなり、8bitになると8bit=1バイトとなります。 バイトはデータの重さを表す単位になります。

通信障害

輻輳(ふくそう)

輻輳とは、大量データ通信などが原因でネットワークが混雑し、データ通信が困難になることを言います。 イメージとしては、狭い一本の道路に多方面から車が入ってきて入り口で混雑する感じです。

ジッタ(jitter)

信号を想定より早く、または遅く宛先に到着することがあります。 ジッタはデータの変質・劣化を引き起こし、音声や映像の乱れなどを引き起こします。 物理的な面では同線にに傷がついていたり、妨害電波があったりと、何かしらの原因でデータにズレが生じて起こります

ネットワークの構成

ノードとリンク

ノードはネットワークにおける機器のことで、コンピュータ、プリンタ、ルーターなどがあります。 リンクはノードとノードの間のデータの通り道のことで、ケーブルや電話回線などです。

トポロジー

トポロジーとは、ノードの繋ぎ方のことです。 コストを抑えたい、耐障害性を強めたいなど用途に合わせてバス型トポロジー、スター型トポロジー、リング型トポロジー、メッシュ型トポロジー と、どのトポロジーを選ぶべきか変わってきます。 一つ一つ説明していきます。

バス型トポロジー

バスと呼ばれる1本の同軸ケーブルに複数のノードを接続するトポロジーをバス型トポロジーと言います。 バスの終端には電気信号の反射によるノイズを防ぐターミネータ(終端抵抗)が取り付けられています。 一箇所でも断線すると全体が機能しなくなり、拡張性も低いため現在はあまり使われていません。

スター型トポロジー

一つの集線装置(ハブ)を中心にノードを接続するトポロジーをスター型トポロジーと言います。 扱いやすく耐障害や拡張性に優れていて、LAN構築で最も使用されているトポロジーです。 大量ノードに対応するためハブ同士を接続して、スター型トポロジーを拡張させることもあり。これを拡張スター型トポロジーと言います。

リング型トポロジー

ノード同士を輪のように繋げたトポロジーをリング型トポロジーと言います。 トークンという信号が周回しており、これを受け取ったノードのみがデータ送信可能になります。 トークンを受け取ったノードのみが順番に送信されていくため、トポロジー内での衝突(コリジョン)が発生しません。

メッシュ型トポロジー

複数のノードを網目状に接続するトポロジーのことをメッシュ型トポロジーと言います。 全部のノードに繋ぐものをフルメッシュ、重要なノードに絞り繋いだものをパーシャルメッシュと言います。 リンクを沢山用意しないといけないためコストはかかりますが、冗長性(問題が起きても他でカバーできる)を持ったトポロジーです。

通信の種類

ネットワーク内でのデータ通信の方法はユニキャスト(1:1)、ブロードキャスト(1:全て)、マルチキャスト(1:特定のグループ)の3つが主流です。

linux 基礎編

linuxとは

Linuxとは、WindowsMac OSと同じOSの一種です。 OSとは、オペレーティングシステの略語です。 ソフトウェアとハードウェアをつなぐ役割を担っています。 たとえば、Wordなどのソフトウェアで作成したテキストは、ハードウェアへ記録・保存されます。このときデータがハードウェアへ正しく記録・保存されたり、保存したデータを読み込んで閲覧できたりするのは、OSが機能しているからこそです。このほか、OSはユーザーのアクション(操作)をコンピューターへ正しく伝える役割も担っています。

linuxの特徴

PCやスマホは、初めから0Sが備わっています。 PCやスマホに新たにWindowsMacOSを組み込む際はOSを新たに購入する必要がありますが、linuxは無料で公開されているため誰でも使えます。 無料で公開されているため、linuxを使い新たなOSを作ることもできます。 linuxは自由に改良できるOSの為、必要な分だけサーバーを構築できるのも強みです。 本来はサービスの速度や安全性をキープするために多くのサーバーが必要になり、コストが発生しますが、linuxはコストを大幅に抑えてサーバー構築ができます。 構築する上でも、有料のOSと違い、自由にソースコードを書き換えたりもできます。 そして、無料だから安全性に欠けると思雨かもしれません。 ですが、ユーザー制限が厳しく管理されているのが特徴です。常に厳重なセキュリティ体制のもと最新版をリソースしているため、安全性の高いサーバーとして活用されています。

linux用語

linuxを使う上で不可欠な専門用語についてです。

カーネル ユーザーの指示を正しく反映させるOSの中核部分

シェル Linuxカーネル(中核)の指示を伝えるためのツール

コマンド シェルへ入力する命令文

パッケージ Linuxが導入しているアプリケーションの配布形態

一つ一つ説明していきます。

カーネル

OSの中核となる部分を`カーネル'と言います。 ソフトウェアとハードウェアを繋げて、ユーザーの指示を正しく反映させる役割を担っています。 Linuxにおけるカーネルは、メモリ管理機能やネットワーク、ファイルシステムなどから成り立っています。

シェル

ユーザーの指示を、Linuxカーネル(中核)へ伝えるためのツールです。例えると、人間の指示を翻訳して、カーネルへ伝えてくれる通訳者のような感じです。

コマンド

Linuxを動かす際に、シェルへ入力する命令文のことをコマンドと言います。 たとえばcdディレクトリの移動、cpはファイルやディレクトリの複製、rpmはパッケージのインストールというように、それぞれの動作に対するコマンドが決まっています。

パッケージ

Linuxが導入しているアプリケーションの配布形態を表します。 Windowsではインストーラーを用いてアプリケーションをインストールするように、LinuxではRPMDFNなどのパッケージ管理ツールを用いてアプリケーションをインストールします。

自動変換とキャスト

型変換 「+」などの操作は同じデータ型同士じゃないとできません。 型の違うものを演算するときは、型を変換し同じ型にする必要があります。 javaでは自動変換あります。

System.out.println("佐藤さんは"+20+"歳です");

String型int型を足すと、int型が自動でString型に変換されて、文字列として結合されます。

"佐藤さん" + "20" + "歳です"

こんな感じです。 なので、出力は

佐藤さんは20歳です

計算時の自動変換

int型double型の計算結果はdouble型になります。 計算の過程でint型がdouble型に変換されます。

ここで、今まで触れてなかったので補足です。 double型とは、小数を表すデータ型です。

5     int型
3.14    double型

他にも多くのデータ型があります。それを全て説明するのは、今の私にはまだ無理なので、 リンク貼っておきます。 基本のデータ型

では、話は戻ります。 5 / 2.0もしくは5.0 / 2の結果は2.5になります。55.0にするように、Javaが自動で型変換を行ってくれます。

System.out.println(5.0 / 2);

上記が下記のようにdouble型に変換される。

System.out.println(5.0 / 2.0);
2.5

ここで注意点です。 int型同士の計算は結果もint型になり、double型同士の計算は、結果もdouble型になります。特に、int型の5をint型の2で割ると、結果は「2.5」ではなく「2」となり出力結果が変わるので注意しましょう。

System.out.println(5 / 2);
2
System.out.println(5.0 / 2.0);
2.5

となります。

さっき見た通りint型同士は正確な値を割り出せません。

int number1 = 13;
int number2 = 4;
System.out.println(number1 / number2);
3   //正しい値は3.25

これを強制的に変換し、正しい値を出力することができます。 この方法を,キャストと言います。 int型同士の値から、最終的にdouble型の計算結果を得たい場合、どちらか1つをキャストします。

int number1 = 13;
int number2 = 4;
System.out.println((double)number1 / number2);

この様に、どちらか一つをdouble型にキャストすれば結果は、double型になります。

3.25

java 変数のルールやマナー

こんにちは。 今日は

  • なぜ変数を使うの?
  • 変数を使うにあたっての決まりやルール についてアウトプットしていこうと思います。

そもそもなぜ、変数なんて使う必要があるのか、 それには理由があります。 実際開発をしていくと、プログラムの中には、とんでもない種類の値が出てきます。 これを開発者は整理し、わかりやすくコードを書いていきます。 そして、それをすぐに修正、変更できるようにしなければならないのです。

例えば、

System.out.println("Aさん、javaを学習しましょう");
System.out.println("Bさん、javaを学習しましょう");
System.out.println("Cさん、javaを学習しましょう");

と言う文があるとします。 この文の、javaのところを、プログラミングに変更しなければならない時、 javaの部分を三箇所書き換えなければなりません。 これだけならいいけど、こんなことが沢山あったら変更するの大変ですよね? そこで、便利なのが変数って訳ですね。

String text = "プログラミングを学習しましょう";
System.out.println("Aさん、" + text);
System.out.println("Bさん、" + text);
System.out.println("Cさん、" + text);

このように変数を使えば、1箇所変更すれば、解決できるんです。

ここで変数を使うときには、いくつかルールや決まりがあります。 変数名は自由に決めることができますが、他の人も見る事を考えて、決めます。 例えば、 悪い例

String number = "Sato";

変数名にnumber(数字)、値にSato(名前) 意味がわかりません。 Satoを使いたいなら、変数は、namelastNameですよね。 このようにわかりずらい変数名はエラーなどを生み出す原因、そもそも誰がみてもわかりづらいので避けましょう。

そしてここで、注目したいのが、lastNameです。 2語以上になる変数名を使うときは単語の初めを大文字にして区切ります。 この記述法をキャメルケースといいます。 他last_nameといったスネークケースと言うアンダーバーで区切る記述法がありますが、 変数名で使うのは好ましくないので避けましょう。

name   英単語を使う
lastName  2語以上の場合は大文字で区切る(キャメルケース)
1name  数字はじまりはエラーが出る
last_name  アンダーバーで区切る(スネークケース)
namae    ローマ字は好ましくない
名前           日本語は好ましくない

このようなものがあるので、気をつけましょう。 基本他の人もコードを見るので、ルール、マナーを守り、 記述していきましょう。

令和05年基本情報技術者 令和05年ITパスポート 合格するために。。。

こんにちは!! 初心者エンジニアの進撃のおじさんです。 と、言ってもエンジニアなんて語れないほどの初心者ですw 今まで何一つ勉強なんかしてこなかったですが、去年からエンジニアになるために時間の許す限り、学習しています。 IT業界に無知な自分が足を踏み入れたわけですから、何か資格なども取ってみようかなと思いました。 そこで、何かと便利な、ITパスポートと基本情報技術者などを狙ってみようかと思い、早速Google先生で調べ上げました。 ITパスポートは月に何回か試験が開催されているらしく、基本情報技術者より、難易度は低いらしいですね。 試験を受けている年齢層を見てみると 令和4年4月から8月までの開催で14歳以下の受験が92人!! そのうちの合格者が23人!!!! なんとも言えない人数だが、それだけ、IT業界を志している子どもたちがいることに少し驚きましたね。 それと同時に、私も頑張らなくてはとも。。。。。

次に基本情報技術者ですが 国家資格の為、難易度も少し高めのように感じました。調べていると、気になる記事が、 2023年4月より、基本情報技術者試験が通年試験に! 基本情報技術者試験を運営しているIPAより、2023年4月から基本情報技術者試験の通年実施化が発表されています。 通年試験化に伴い、試験制度の大幅に変更されると言う事です! けど、実際前はどうだったの?って感じでしたw 今まで上期(4-5月)と下期(10-11月)の決められた期間での実施されていたらしいです。

今回の通年試験化により、2023年4月からITパスポートと同様に随時受験が可能となったみたいです。 簡単に言えば、落ちても何回も一年通して、受けられるwwwwww けど受験にもお金がかかるので、一発合格目指したいところ! むしろ、そう言う気持ちじゃなきゃ受かるものも受からないだろ!!! と、言うことです。 基本情報技術者の変更に関して詳しく知りたい方は、こちらから飛べます。

2023年から基本情報技術者試験が変わる?変更点を確認して対策しよう!

そこで、IT業界に指先だけ突っ込んだぐらいのやつでも、学習できる教材はなんだろうと思い、実際に本屋に行き、色々見てみました。 難しそうな、図に専門用語だらけの活字、基本過去問だらけの為、苦労しました。汗。 その中で可愛らしいキャラクターが描かれた本が目に止まりました! それがこちら

実際に開いてみると、漫画のように説明が書かれていて、堅苦しい参考書のようなものではありませんでした。 だからと言って、大雑把な作りではありません。 本当に初心者でもわかるように、ITって何?から書かれています。項目ごとに、細かくイラストなどで説明が続き、それを踏まえた過去問と言うような流れです。 私のような初心者にはもってこいの参考書ですね! そして表紙にも書いてありますが、

そう!みてわかる通り

わかりやすさNO1!!(自称)

間違いありません。 私は勢いのままITパスポートも基本情報技術者も購入してしまいました。

初心者や、これからIT業界に足を踏み入れる人にはぜひお勧めしたい一冊になります。

変数の連結 更新 自己代入

今日もやっていきます。

int型変数では、数値が入った変数であれば、計算が可能です。 数値と変数の計算も、変数同士の計算も可能です。

まずは、変数+数値

int number1 = 20;
System.out.println(number1 + 5);

変数の定義と同時に、20と言う値を代入します。 そして、次に、出力させます。System.out.println(number1 + 5); number1には、20を代入しているので、結果は

25

となるわけです。

次に変数+変数です。

int number1 = 20;
System.out.println(number1 + 5);

int number2 = 10;
System.out.println(number1 + number2);

number1には20number2には10が代入されている為

25
30

となる訳ですね。

String型は、文字列の連結が可能です。 ここに関しては、int型の計算とほぼやり方は一緒です。ただ、 文字列として連結する これだけです。 では、みていきます。

String greeting = "おはよう";
System.out.println(greeting + "田中さん");

String name = "佐藤さん";
System.out.println(greeting + name);

これで、文字列の連結ができます。 文字列を連結させるからといって、greetingnameにダブルクォーテーションは付けないようにしましょう。付けてしまうと、文字列として扱われてしまいます。 文字列の連結とは言え、変数+変数で、中の値を連結させようとしているので、気をつけましょう。 では、これの出力結果は

おはよう田中さん
おはよう佐藤さん

となります。

次に変数の中の値を更新していきます。

String name = "Tanaka";
System.out.println(name);

name = "Sato";
System.out.println(name);
Tanaka
Sato

変数の中には"Tanaka"を代入していました。 だから、System.out.println(name)で、 Tanakaが出力されました。 ですが、name = "Sato"で上書きしたので、 次の出力は、Satoに変わってるのがわかりますね。

次に、自己代入についてです。 なんと説明すればいいかわからないので、とりあえず、書いてみます。

int x = 10;
System.out.println(x);

x = x + 5;
System.out.println(x);
10
15

簡単に説明すると、元々、xと言う変数のなかに10と言うデータが入っていました。 そこにx = x + 5と言う式で、元の10+ 5して代入してください、と言った感じです。 数学などの式と比べると少し変な式になりますが、プログラミングでは=は代入なので気にしないでください。

ちなみに、自己代入の省略した書き方があります。

未省略           
x = x + 10;     
x = x - 10;     
x = x * 10;      
x = x / 10;      
x = x % 10;     
省略
x += 10;
x -= 10;
x *= 10;
x /= 10;
x %= 10;

変数に1を足す、引くの場合はさらに、省略できます。

未省略
x = x + 1;
x = x - 1;
省略
x++;
x--;

これだけです。 コードをスッキリ見やすくする為には、省略できるものは、した方がいいですね。(例外の時もあるのかも、、、です)

変数の定義

前回までは文字列、数値と言うように値を呼んでいましたが、今日からは、データ型と呼びます。

"Hello World"(文字列)→→→→ String型
3(整数)→→→→ int型

簡単に説明するとStringは文字列、int(integer)は整数を意味します。 あと注意するところは、

String型は大文字から始まり、
int型は小文字から始まる。

基本なので間違えないように! このようなこともあるとご指摘いただいただきました。 ご教授いただきありがとうございます!

次に変数について。 簡単に言うと、

データ(値)を入れておく箱(変数)

箱(変数)には名前(変数名)がついていてその名前を使い、
変数から値を取り出すことができる。
箱(変数)
箱の中のデータ(値)

うまく作れずわかりずらいですが、こんな感じです。笑 これはプログラミングではお決まりのことなので忘れないようにしましょう。


変数の使い方 変数を使うには、まず、変数を定義しなければなりません。 卒業証書をもらうときに先生が「何年何組〜くん」何年何組のと指定しますよね? そんな感じで、「何年何組(変数)」と定義し、その中から「〜くん(値)」を取り出して使います。

変数を定義することで箱が作られます。 Javaで変数を定義するためには

変数にいれる値のデータ型を指定する
変数の名前を決める

この2つが必要になります。

変数を定義したら変数に値を入れて行きます。 これを代入と言い

「変数名 = 値」

とすると代入できます。 例えば、numberと言うint型の変数を定義します。 その中に、2と言う値を代入します。

int number;
number = 2;

これでnumberと言う変数に2と言う値を代入できました。 String型も同じように、 例として、nameと言う変数にSatoと言う値を代入します。

String name;
name = "Sato";

ここで注意が、String型は、整数でなく、文字列を代入するので、「""」ダブルクォーテーションを忘れずに!

あと、プログラミングで「=(イコール)」は、右の値を左のものに代入するという意味になります。 数学のような同じと言う意味ではないのでお気をつけて!

入れたんだから、取り出そう! と言うことで、変数から値を取り出してみましょう。

int number;
number = 2;
System.out.println(number);

String name;
name = "Sato";
System.out.println(name);

そう!これだけ! 順に説明すると、

①変数を定義
②変数に値を代入
③値を取り出し処理

これにより

 2
 Sato

となるわけです。


変数の初期化

変数の値の代入は変数定義と同時に行うこともできちゃいます。

int number = 5;

String name = "tanaka";

このように定義と同時に代入を行うことを変数の初期化と言うらしいです。 なぜ初期化?と皆さん思いますが、大丈夫です。 私も思ってます。 気になったので調べてみました。こちらをどうぞ! 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

次回は、 色々な使い方を記事にしていこうと思います。

ありがとうございました。