VPNについて

感想
VPNは、仮想的なプライベートネットワークを構築する技術。
VPNは、トンネリングとカプセル化(暗号化)によって実現。
種類は、インターネットを利用する”インターネットVPN”と利用しない”IP-VPN”に分かれる。
仕事でVPN拠点とは何か理解出来なかった為、復習。全体をつかめた。後は業務と絡めて覚える。
 
〈目次〉
1.VPN(Virtual Private Netwwork)
2.プライベートネットワークとは
3.VPNの仕組み
4.VPNの種類
 
1.VPN(Virtual Private Netwwork)
→Virtual:仮想
 実際にはないがあるように見せる技術
 仮想的なプライベートネットワークを構築する技術
 
2.プライベートネットワークとは
 ・パブリック(外から見える)
 ・プライベート(外から見えない)
 プライベートネットワークの方が安全なネットワーク
 →プライベートネットワークを仮想的に作る技術がVPN
 
3.VPNの仕組み
トンネリングとカプセル化(暗号化)と呼ばれる技術により実現している。
 
トンネリングとは
遠隔地点間で通信するために作られた仮想的な通信路
トンネリングで構築された仮想通路は外部から見れない。
ただし仮にトンネル内に侵入された場合通信内容の盗聴の危険性がある
 
パケットを別のプロトコルに包んで送受信する仕組み。元パケットを暗号化し、新しいヘッダを付与して通信する
 
4.VPNの種類
 ▽インターネットVPN
  ▼インターネットを利用したVPN
    ・IPsec VPN
    ・SSL-VPN
  ▼接続方法
      ・サイト間VPN
      ・リモートアクセス型VPN
 ▽IP-VPN
  ▼インターネットを利用しないVPN
 
サイト間VPN
 VPNゲートウェイと呼ばれるVPNの専用通信機器間でVPNによる通信を行う方法
    利用するPCに専用ソフトをインストールする必要がない
リモートアクセス型VPN
 VPNゲートウェイと呼ばれるVPN専用機器と利用するコンピュータ間でVPNによる通信を行う方法
 利用するPCに専用ソフトをインストールする必要がある
 
〈参考〉
VPNを分かりやすく解説(ネットワーク入門#7)
VPNの種類を解説!インターネットVPNやIP-VPNとは?|選ぶポイントもご紹介

応用情報令和3_午後問アウトプット

感想
令和3春の過去問はもっと難しかった。
まずは、丁寧に問題文を読んで一つ一つ理解を深めていく。
 
<目次>
DNSとは
名前解決とは
名前解決の登場人物
スタブリゾルバーの役割
フルリゾルバ-の役割
キャッシュ
権威DNSサーバーの役割
 
▼各詳細項目
DNS:Domain Name Systemの略。インターネット上で ドメイン名 を管理・運用するために開発されたシステム。
 
名前解決とは
・利用者からの要求に応じ、名前に対応する情報を取り出すこと
ex.あるドメイン名に対応するIPアドレスや、メールサーバホスト名の検索など
 
名前解決の登場人物
・情報が欲しい人:スタブリゾルバー
・情報を探す人:フルリゾルバ-
・情報を提供する人:権威DNSサーバー
 
スタブリゾルバーの役割
・利用者側の機器で動作する
・フルリゾルバ-に名前解決要求を送る
 
フルリゾルバ-の役割
・名前解決を実行する
・得られた応答を蓄える
    
キャッシュ
・蓄えた情報を次回利用する
 
権威DNSサーバーの役割
・自分が保持している情報を提供する
DNS階層構造を作る
5分で学べる!DNSの名前解決の仕組み / Interop2021

学習記録(スッキリわかるJava入門3章)

感想

スッキリわかるJava3章が終了。

順次・分岐・繰り返しの3つの制御構造を組み合わせることによって。どのようなプログラムも作成できることを知った。

文字列を比較するときは「==」ではなく「equal」。

練習問題の数当てゲームは15行に満たないプログラムだったが、全角スペースの多用でエラー20件くらい修正していたりして、50分位かかった。次は同じエラーが出ないようにして、次の章をもっとスピーディーに終わらせたい。

 

目次

・分岐

・繰り返し

 

■分岐

・ if

if (条件){ブロック1}else{ブロック2}

■繰り返し

・while

while(条件){ブロック}

・for

for(初期化;繰り返し;繰り返し時の処理){ブロック}

学習記録(スッキリわかるJava入門2章)

スッキリわかるJava入門が2章が終了。

特にリテラルの理解、命令の実行文を書く作業は楽しかった。

 

目次

・命令の実行文

・練習問題2-3のコード

 

■命令の実行文

 大きい方の数字を代入する命令

 int m = Math.max(①,②);

 文字列を数字に変換する

 int n = Integer.parseInt(①);

 乱数を生み出して代入する命令

 int r = new java.util.Random().nextInt(①);

 キーボードから1行の「文字列」の入力を受け取る命令

 String input = new java util.Scanner(System.in).nextLine();

 キーボードから1行の「整数」の入力を受け取る命令

 int input = new java util.Scanner(System.in).nextInt();

■練習問題2-3のコード

public class Main {public class Main {

 public static void main(String[] args) {  System.out.println("ようこそ占いの館へ");

  System.out.println("あなたの名前を入力してください");

  String name = new java.util.Scanner(System.in).nextLine();

  System.out.println("あなたの年齢を入力してください");

  String ageString = new java.util.Scanner(System.in).nextLine();

 i nt age = Integer.parseInt(ageString);

  int fortune = new java.util.Random().nextInt(3); fortune= fortune + 1;   System.out.println("占いの結果が出ました!");

  System.out.println(age + "歳の"+ name +"さん、あなたの運気番号は" + fortune + "です");

  System.out.println("1:大吉2:中吉3:吉4:凶"); }

}

学習記録(SQL学習コースⅠ)

SQL学習コースⅠが修了。

学習過程で参考にした記事も載せてます。

 

以下の記事がSQL学習にとても役に立ったので、参考に。

https://employment.en-japan.com/engineerhub/entry/2019/11/05/103000

 

目次

・サクッとDBとSQLの概要

・検索SQL基本構文

 

 

・サクッとDBとSQLの概要

※参考URLに飛ぶと詳しく書いてあります。

僕は、以下で理解しました。

DB=「列ごとに決められた意味を持ったエクセルの表」

SQL=「マウスの右クリック」

ただのエクセルの表だと、自由にかきこめるイメージを持ってしまうので、テーブルのニュアンスを伝えるには、「列ごとに決められた意味を持ったエクセルの表」と書くのがイメージは適しているかと。

「マウスの右クリック」はそのままの意味です。

 

・検索SQL基本構文

SELECT

FROM

WHERE

ORDER BY

 

どのカラムを(どう加工して): SELECT
どのテーブルから:FROM
どの行を:WHERE
どの順序で:ORDER BY

 

この構文覚えただけで、Progateの理解度が格段に上がりました。

 

 

 

 

 

 

 

 

#3 Web系企業の特徴について説明します

こんにちは、たなかです。
前提を話してから主張に入る話し方でとても聞きやすかった。
実際に働いてみないとわからないところが多々あるんですけども
おおよそこのような感じであると捉えるのに役に立った。
今回は勝手に分類分けしてみました。
 
▼参考にさせて頂いたYouTube
「Web系企業のその他の特徴」
 
目次
・働き方、作業環境
・企業の魅力アピールの場多数
・おそらく経験する苦労
 

作業場所は主に自社オフィス

 ・自社サービスの開発がメインなので客先常駐というスタイルは基本的には存在しない(Web系企業を顧客とした受託開発を行っている会社さんの場合は例外的に客先常駐もある)
 

リモートワーク可のWeb系企業がかなり増えてきている

・採用競争力が低い企業がコストをできるだけ抑えて、他社さんと差別化していく上では、「柔軟なワークスタイルを許容する」という選択肢が最も費用対効果が高い。
採用競争力が高い企業とは、例えば(給与に大金を払える、福利厚生を充実できる、オフィスがかっこいい、等)
  ・特に子育て中郊外や地方に住んでいる等の方たちにとっては、リモートワークは非常に魅力的。
 

開発マシンはほぼMacBook

 ・将来的にWeb系企業で働くことを本気で考えているのなら、ノートパソコンはMacBookを選択するのがおすすめ。
 ・Web系企業において、Microsoft系の技術(.NET Framwork等)を使った開発はほぼ行われないので、Windowsマシンを使う理由がない。
 ・Web系企業のほとんどはOSにLinuxを使用しているが、MacLinuxベースなのでコマンドの多くがLinuxと共通
 ・iOSアプリの開発は基本的にMacでないと行えない  

情報発信に積極的な企業が多い

 ・主にリクルーティングが目的
 ・特に「エンジニアブログ」で使用している技術や技術のレベルを公開している会社さんが多い
 ・AdverntCalenderとういう12月からクリスマスまでのカウントダウンとしてエンジニアが日替わりで記事をしっぴするつ文化が定着してきて、会社単位でこれを行う企業も増えてきている
 

勉強会が多く、エンジニアの横のつながりが強い

 ・東京ではほぼ毎日どこかでWeb技術に関する勉強会やIT系のイベントが開催されており、東京以外にすまれている方は、エンジニア間のつながりを作る上ではかなり不利かもしれない。そのくらい毎日たくさんの勉強会やIT関係のイベントが東京のどこかで開かれている
 ・余談…勉強会で得られる知識も有用だが、「他のエンジニアとの横の繋がり」も非常に重要一度勉強会に参加したら、最低5人以上の方とは挨拶や名刺交換をしてFBやTwitterで繋がるようにしておくと後でいいことがあるかも。ビジネスマンの価値は「スキル」「経験」「人とのつながり」で決まるので若いうちから積極的に勉強回答に参加してともお立ちの輪を拡大しておくことをお薦めします。
 

技術負債との戦い

「技術負債」とは
あまり良くない設計で作られてしまったサービス
ソースコードの可読性が非常に悪いサービス
レガシーな技術で作られてしまったさービス
等を抱えている「技術的な問題/課題」のこと
早めに返済していかないと問題が更に大きくなっていく
Slerには「技術負債を返済する」という考えが存在しない。(そもそも発注者がそこにコストをかけたがらない)のでSlerとは異なるWeb系企業の特徴
 ・長く使われているサービスほど、技術的にトレンドから遅れていってしまう。大ヒットしているサービスには必ず「技術負債」を抱えている
 
ヒットしている以上はメンテナンスをし続けなければならないが、優秀でトレンドに敏感なエンジニアほど レガシー化してしまったシステムは誰も触りたがらないが、だからといって新人さんのそれほど技術レベルが高くない人に触らせてしまうと問題が大きくなるので、技術負債化が進んでいってしまい、いつか破綻してしまう 
負債を返していく作業を「返済しやすく」するために、モノリシック(一枚岩)な巨大なシステムを作るのではなく複数のちさなシステムを連携してサービスを作るアーキテクチャがトレンド。
 
働く業界を選ぶ上での1つの指標
ぼくの説明が正しいというわけではない。
Web系企業の風土を持ったSIer
実際に働いてみないとわからないところが多々あるんですけども
おおよそこのような感じであると捉えていただけたら。
思っていただけたらいいと思う
 
「テクノロジー」や「プログラミング」にきょうみがある人がSlerで働いても楽しく働ける可能性はあまり高くない
「顧客の改善業務」や「大規模プロジェクトのマネジメント」に強い関心がある人はWeb系よりもSler系のほうが向いているかもしれない

#2 Web系企業の特徴について説明します

こんにちは、たなかです。この前の動画の第二弾です。
開発方式についての解説が詳しくてとても為になりました。
 
 
参考にしたYouTube
 
「Web系企業の特徴について」
開発方式は非ウォータフォール型
 
※Web系企業の作るサービスは発注者が存在しない。
 
※つまり「明確なユーザが存在しない」(要件定義が作成できない)ということになるので、SIerのように「ユーザーにしっかりヒアリングをして要件定義を作成してその要件通りに作れば完成」という方式では対応出来ない
サービスの独自性がユーザに受け入れられるかどうかは、実際にサービスを使って見てもらわないとわからない。
・仮設を立てる
・サービスに仮設を反映する
・ユーザからフィードバックを受ける
・フィードバックを検証する
・また仮設を立てる
 
この繰り返しでひたすらサービスの改善を繰り返すという開発方式にならざるを得ない。(要件定義から製造まで後戻りをしないウォーターフォール型では対応できない)
 
ひたすらサービスの改善を繰り返していく開発方式であるとかサービスのアーキテクチャ(基本設計)に関して、最近Web企業でトレンドになっているキーワードとしては、皆さんももしかしてきいたことがあるかもしれないですけど、
・リーン開発
・マイクロサービス
 
非ウォーターウォール型の開発方式が絶対的に正しいとかではなくて、仮設を立てて、それをサービスに反映してユーザのフィードバックを受けてというループを迅速に回していくために、みんな開発に色々な開発手法を取り入れてそういうものを取捨選択したりミックスしたりして頑張ってるという感じ。
ウォーターフォール型が悪いというわけではなくて明確な発注者のいないサービスを作る上では、SIerさんがやっているウォーターフォール型では対応できないという風に捉えていただければと思います。
 
設計とプログラミング両方が出来るエンジニアの価値が非常に高い。
※というよりもSIerの「SE」のように、設計しか出来ないエンジニアの価値があまり高くない
※設計作業が重要なのはSIerもWeb系企業も同様だが、設計した内容を 後述するようにWeb系企業では設計作業にあまり多くの工数を確保できないばあいが多い。 
 
受託開発の場合は、システムを完成させれば、発注者から支払いを受けることが出来るが、Web系企業のサービスは発注者存在しないため、ヒットしなければ全て赤字になってしまう。
ユーザーのフィードバックを得ていない初期段階で設計や開発に時間を使いすぎているとユーザのニーズから乖離した無駄な機能を作り込んでしまうリスクを増大させてしまう。
 
Web系企業では、コスト面のリスクとかユーザが欲しがっているわけでもない無駄な機能を作り込んでしまうようなリスクをできるだけ小さくするために
「時間をかけて十分に検討された良い設計」をおこなうよりも
「とにかく動くものを早く作る」
ことの方が重視される場合が多いです。
こういった理由で基本設計のフェーズで時間をかけられない場合が多い。更に詳細設計的な部分においてはその部分を担当するエンジニアが全て自分で、場合によっては頭の中だけで設計した上で自分でプログラミングを行う方式が一般的。サービス開発においては「基本設計」フェーズよりも「プログラミング」フェーズのほうが長くなることが一般的なので、設計しか出来ないエンジニアは開発工程からみると有用性が低いということになります。一番長いプログラミングフェーズになったときにやれることがなくなってしまう
 
前述した「コスト面」の問題でWeb企業のサービス開発は(特に初期開発の場合は)開発メンバーが少人数の場合が多いので完全分業制を取れる場合は少なく設計からプログラミングまで、一人何役もこなせることが求められる場合が多いです。
※最も長い「プログラミングフェーズ」に対応できるように「プログラミングバリバリ出来る」ことが大前提で、さらに設計作業に関しても、「あまり工数を確保出来ない中でもいい設計ができる」エンジニアの価値が非常に高くなる、ということになります。
 
使われるのは主に「枯れた技術」ではなく「モダンな技術」
新しい技術や新しいツールの方が「性能」「効率」「使い勝手」の面で優れているケースが多いということもあるが、新しい技術の「リクルーティング力」を重視してそのような方針を採用している会社さんも多い。
※優秀なエンジニアほど「新しい技術」を使いたがる優秀なエンジニアを採用あるいは自社で長く働き続けてもらうためには技術的に魅力ある環境を用意することが必須となる。
 
エンジニアの年齢層はかなり若い
Slerさんと異なりエンジニアの平均年齢が20代というWeb系企業さんは珍しくない
※エンジニアの平均年齢が30代後半とか40代というWeb系企業さんはあまり見かけない
Web系企業さんは平均年齢が高かったとしても、30代前半くらいの会社さんが多い。Web系企業でエンジニアの平均年齢が30代後半という会社さんはある程度人数の多い会社さんだと珍しいと思います
 
サービスが大きくスケールする可能性がある
※例えばソーシャルゲームとかがそうなんですが、ヒットすると日本中あるいは世界中で自分のつくったサービスやアプリが使ってもらえる可能性がある
※ただし残難ながら、ゲーム系以外で世界で広く使われている日本発祥のWebサービスやアプリはほとんど存在しないというのが現状(今だとメルカリさんぐらいしか浮かばないLINEは韓国企業さんが主体で作られたアプリなので日本発祥というのは無理がある)
 
日本発祥のソーシャルゲーム以外のサービスがっ世界でヒットできていない理由
 
外国でヒットしたサービスの後追いで作られているサービスが多い(タイムマシン商法)後追いが絶対に悪とか負けるとかそういうことではなインですけど、既に外国でヒットしているものと同等のものを作ってヒットしても、少なくともそのサービスの元祖の国であるとかそのサービスが既に流行っている国とか勝てる可能性が非常に低いわけなので、タイムマシン商法で作られたサービスは日本国内にとどまってしまうことが多くなる。
次にあるのが日本語圏の制約。例えば最初から英語で作られていれば、その時点で 世界中の20億人近い潜在ユーザをターゲットに出来る日本語だけだと多くてユーザは1億人程度なので世界に出ていく上では非常に不利。個人的には日本のサービスが世界に出ていけないのは、ここが 原因かなと思っています
次にスタートアップやベンチャー企業に投資される金額がアメリカに比べると少ない。今の時点だと数十倍程度の差がある。そうなってくると優秀な人材を集める上でも基本的にはお金のある方が絶対的に有利なので残念ながらそういう点でも今の日本は不利な環境であるということですね
 
その中でも唯一ですね珍しくというか先行しているのが「ブロックチェーン」という分野
 
コインチェック問題でかなり悪いイメージついて島ているが、投機的な目的ではなくて社会インフラとして使われるように健全に発展してほしいと個人的にはおもっています。
 
「CTO」という役職が存在する
※Web系企業以外でもこの役職は存在するが、SIerと比較として紹介。(SIerには一部例外を除いて基本的にこの役職は存在しない)
 
※「Chief Technology Officer」の略で日本語だと「最高技術責任者」という
皆さんも聞いたことがあるかと思うのですが、Web系企業ですとほぼ100%この役職の人が存在します。存在しないときは、CTOの候補になる人を探し中とかそういうケースに限られると思います。
 
CTOの役割は多岐に渡るが、「会社経営における技術面での決定に関して最終的な全責任を負う」というのはどこの会社さんでもほぼ共通。
 
※小規模なWeb系企業の場合はCTOの方がコードをバリバリ書いたりしますが、企業規模が大きくなるとCTOはほとんどコードは書かず、マネジメント業務、採用業務、イベント登壇、その他「夜のお付き合い」等、コードを書く仕事以外がメインとなります
 
IT系のスタートアップの場合、起業時からCTOが存在していることがほとんどだが、あとからCTOが採用される場合もある
※あとからCTOが採用される場合、CTOは「その企業のエンジニアの象徴」的な存在なので、イメージ面がかなり重視される
※スキルが優れているのは当然として、「オープンソースの著名なコントリビュータ」等 知名度(およびリクルーティング力)の高いエンジニアがスカウトされてCTになるけーすが多いという感じはあります
 
これがCTOの仕事だと定義するのは難しいですけれども、技術面における最終決定者であるというそういう立場の人でないとやりづらい仕事は基本的にはすべてCTOに回ってくるというか、そういう意味では非常に責任も重いですし仕事の範囲も広いですし大変な職種ではあると思います
 
最近では「VP of Engineering」というCTOの役割のうち「採用」や「教育」や「マネジメント」等の部分を分離した感じのポジションを作るWeb系企業も増えてきています
アメリカでは昔から存在していた役職だそうです
日本でもCTOの仕事の範囲と分量が多すぎて無理ゲーなんだけどという感じで、人数の多い会社さんだと、従来CTOが一人で対応していた業務を権限移譲というか分業体制で担当する流れになってきているという印象です
「VP of Engineering」は直訳すると「エンジニアリングの”副社長”」だが、」実際は「部長」的な意味