Archive for the ‘naoya’ Category

基本情報技術者試験

水曜日, 4月 12th, 2017

こんにちは、naoyaです。
入社して2年目になりました。

今週末(来週頭?)4/16に、基本情報技術者試験を受けに行きます。

先週までは、なんとなくという感じで、過去問を眺めたり、少し解
いてみたりしていましたが、気づけば一週間後に試験という感じに
なりました。

少しヤバいような気がして、今ちょっと必死になって勉強していま
す。

過去問をやってみた感じですと、午後の問題はまだ何とかなりそう
な感じがするのですが、午前の問題が少しきつそうです。

結構知らない名称や法則だったりとかが出てくるので(過去問だと、
オートマトンとか、聞いたこともない単語が…)、そこから勉強し
ないといけない…

とりあえず、過去問の出題傾向とかを見て、出そうな問題から勉強
していこうと思います。

合格できるように、頑張ります。

非同期処理について

木曜日, 3月 30th, 2017

 こんにちは、naoyaです。

 毎月一回のプログラミング学習記事の投稿になります。

 第6回(最終回)は、「非同期処理」について、調べたことをまと
めていこうと思います。

・マルチスレッド
  スレッドとは、一連の処理の流れのことを言う。処理の流れが
 一本道なものをシングルスレッド、複数の処理を並行して行うも
 のをマルチスレッドという。
  何か非常に時間のかかる処理があるとすると、処理を行ってい
 る間、計算に専念してもいいならシングルスレッドで問題ないが、
 計算中に他の入力を受け付けたい場合がある。アクションゲーム
 などでは、キャラクターの動きの計算をしている間、ユーザーか
 らの入力を受け付けないようでは、アクションゲームとして成り
 立たない。このような場合、ユーザーからの入力を受け付けるス
 レッドと計算を行うスレッドを並行して動かす。
  要するに、重たい処理を行っている間でもプログラム全体がフ
 リーズしてしまわないようにするために、複数の処理を並行して
 行うのが、マルチスレッドプログラミング。
 
 ・C#におけるマルチスレッドプログラミング
   多くの場合、C#ではスレッドを直接作ることはほとんどない。
   スレッドの新規作成やスレッド間の処理の切替は、結構重た
  い処理で、最小限に抑えたい。そこで、実際にはスレッドを直
  接使うのではなく、一度作ったスレッドを使いまわす仕組み
  (スレッドプール)を使う。
  
・排他制御
  マルチスレッドプログラムでは、複数のスレッドが一つのデー
 タに対して操作することがある。何も考えず、ただ素直にプログ
 ラミングを行うと、意図しない結果になる場合がある。
  そのような問題を解決するために、排他制御というものが必要
 になってくる。排他制御とは、複数のスレッドが同時に一つの
 データを読み書きしないように制御することをいう。
 ・C#における排他制御
   スレッドの排他制御を行う為には、同期オブジェクトと排他
  ロックという概念を用いる。考え方としては、排他制御が必要
  になる部分に入る前に、あるオブジェクトに鍵をかける。鍵が
  かかっている間、他のスレッドは同じオブジェクトには鍵をか
  けることができず、鍵が外されるまで待たされる。そして、鍵
  をかけたスレッドが排他制御が必要な部分を抜けると、鍵を外
  す。
   鍵をかけるオブジェクトを「同期オブジェクト」、鍵をかけ
  る行為を「排他ロック」という。
  
・非同期処理の種類
  「非同期処理」といっても、いくつかタイプがあり、それぞれ
 書き方などが異なる。大まかにいうと、以下の用途がある。
  ・バックグラウンド処理:負荷の高い計算や、I/O待ちなどで、
  CPUやスレッド資源を保持し続けないために、別スレッドで計
  算やI/O待ちを行う。
  ・並列計算:マルチコアCPUの性能を最大限引き出すために、
  同じ計算を複数のコアで同時に実行する。
   ・データ並列:同じ処理を異なるデータに対して行う。
   ・タスク並列:異なる処理が独立して動いていて、その間に
   非同期でデータのやり取りを行う。
 ・バックグラウンド処理
   負荷の高い計算やI/O待ちをする場合、メインスレッドとは
  別のスレッドを使いたい場合がある。例えば、GUIアプリの場
  合、メインスレッドで時間のかかる処理を行うと、アプリがフ
  リーズしてしまい、ユーザーに与える印象が非常に悪くなって
  しまう。メインスレッド以外で行う処理の事を、バックグラウ
  ンド処理という。
   バックグラウンド処理では、バックグラウンドで行った処理
  の結果の値を受け取って、メインスレッドで処理を行いたい場
  合が多い。
  ・利点
    GUIの応答性向上:時間のかかる処理を行っている間、UIス
   レッド(GUIにおける、エンドユーザーからの入力を受け付け
   るためのスレッド)をブロックせず、フリーズを回避できる。
    スレッド資源の節約:I/O待ちにしている間、スレッドを解
   放することによって、メモリ(スレッド用のスタック等)やCP
   U(コンテキストスイッチ等)の負担を減らせる。
 ・データ並列
   並列処理も、非同期処理の一種になる。並列処理を行いたい
  動機は、マルチコアCPUの性能を最大限に引き出すこと。その
  一番シンプルな方法は、同じ処理を、異なるデータに、複数の
  コアで同時に実行すること。このような並列処理を、データ並
  列と呼ぶ。
 ・タスク並列(非同期データフロー)
   並列処理を行うもう一つの方法としては、異なる処理(タス
  ク)を独立して動かして、その間で、非同期でデータのやり取
  りを行う方法がある。異なるタスクを並列に動かすという意味
  では、タスク並列。非同期でデータをやり取りするという意味
  では、非同期データフローと呼ばれる。
  
  
 今回マルチスレッドについて学ぶよりも前に、一度開発でマルチ
スレッドを扱う機会があり、学びなおすにあたって、その時にやっ
ていた事を思い出しながら学ぶことができました。「この失敗は前
の時やってたな」とか思う部分もあり、そういった部分を今回学び
なおせたので、次回マルチスレッドを使う機会があれば、こういっ
た失敗をしないように、気を付けていこうと思います。

 今回で一応最終回となりますが、勉強は続けるので、もしかした
らどこかのタイミングで何か書くかもしれません。その時はまた、
アドバイスなどをよろしくお願いします。

参考URL:
http://ufcpp.net/study/csharp/

メモリとリソース管理

金曜日, 3月 3rd, 2017

 こんにちは、naoyaです。
 
 毎月一回のプログラム学習記事の投稿です。

 第五回は、「メモリとリソース管理」について、調べたことをまとめていこうと思います。
 
・.NET Frameworkでのメモリ管理
  C#をはじめとした.NET Framework上で動く言語は、メモリ管理
 を.NET Frameworkのガベージコレクションに任せることで、管理
 の手間を削減している。
  一般に、メモリの管理方法には「スタック」と「ヒープ」の2
 種類の方法がある。C#では、ローカル変数はすべて「スタック」
 上に置かれる。変数が「値型」の場合、値すべてがスタック上に
 置かれる。「参照型」の場合、値そのものはヒープ上に置かれ、
 そのヒープへの参照情報のみが、スタック上に置かれる。
 スタック
   データ領域を積み上げていくような形でメモリを管理する方
  法。最後に確保したデータ領域を最初に開放する。メモリの管
  理が簡単で非常に効率が良いが、あらかじめスコープが分かっ
  ているデータにたいしてしかりようできない。
 ヒープ
   任意サイズのデータ領域を任意の順で確保、解放していく方
  式。データを扱うスコープがはっきりしない(いろんな所から
  参照されている)場合や、実行時にしかサイズが確定しない場
  合、必要サイズがかなり大きい場合などに使う。
   スタックのような制限はないが、メモリ上のどこからどこま
  でを確保しているか、管理する必要がある。また、新たにデー
  タを確保したい場合、空き容量を探す手間がかかる。
   領域の確保と開放を繰り返すことで、使用中のヒープがメモ
  リ上に散在する状態(断片化)になる。こうなると、空き容量を
  探す手間が増え、データの参照の局所性が失われることで、
  キャッシュのヒット率が下がり、処理性能が低下する。
 ガベージコレクション
   ヒープを利用する時、用済みのデータ領域の解放を忘れて、
  メモリ上に「ごみ(いつまでたっても解放されない領域)」が
  残ってしまうことがある。このような問題を、「メモリ・リー
  ク」と呼ぶ。逆に、既に開放している領域を再度解放しようと
  する問題を二重解放と呼ぶ。
   プログラマが自前でメモリを解放しようとする場合、プログ
  ラムが複雑になるにつれ、メモリ・リークや二重解放の発見は
  難しくなる。プログラマの目的はヒープの管理ではないのに、
  そちらに時間を割くことになるのは良くない。
   ヒープの管理を自動化する手法の一つとして、ガベージコレ
  クションというものがある。ガベージコレクションは、定期的
  に「ごみ」になっている領域がないか調べて、見つけた「ご
  み」を解放して回る処理を行う。
 値型と参照型
   C#の型には大きく分けて2つのタイプがある。一つは「値
  型」で、もう一つは「参照型」と呼ばれる。
   ・値型…変数に直接値が格納される。
   ・参照型…変数は参照情報を持っていて、実体は別の場所に
       ある。
   値型は、代入時に値のコピーを受け取り、参照型は値の実態
  への参照情報を受けとる。このため、値型はコピー先の値に変
  更を加えてもコピー元には何も影響はないが、参照型の場合、
  コピー先の値を変えるとコピー元の値も変更される。
 値渡しと参照渡し
   プログラミング言語での値の受け渡し方法には、値渡しと参
  照渡しがある。C#では基本、値渡しになる。refやoutという
  キーワードを使うと、参照渡しを行うことができる。
   ・値渡し:メソッド内の値を変更しても呼び出し元には影響
        しない。
   ・参照渡し:メソッド内の値を書き換えると、呼出し元にも
         影響する。
   ・out:特別な参照渡し。戻り値以外にも値を返したいとき
      などに使う。
   出力引数
     参照渡しを使うと、メソッド内からメソッド外の値を書
    き換えることができる。複数の戻り値を返すのに有効であ
    るが、refを使う参照引数では、いくつか問題がある。
     ・呼出元で、特に意味のない値を初期化する必要がある。
       →メソッド内で必ず値を上書きするので、無駄。
     ・メソッド内で代入を忘れてもコンパイルエラーになら
      ない。
     そこで、戻り値として使いたい場合、outを使って、出
    力用の参照引数であることを明示する。outを使うと、
     ・メソッド呼出前に初期化する必要がない。
     ・メソッド内で必ず値を割り当てなければならない。
    となる。
 リソースの破棄
   ファイルや周辺機器などのリソースを使用する場合、まずリ
  ソースを使用する権利を取得し、操作を行った後、リソース使
  用権を破棄する必要がある。
   メモリは.NET Frameworkのガベージコレクションが自動的に
  管理してくれているが、ファイルはガベージコレクションの対
  象外で、明示的な破棄が必要である。
   リソースの破棄を怠ると、操作が正しく終了しなかったり、
  ほかのプログラムがそのリソースを使用できなくなったりする。
   ファイルを確実に閉じるためにはtry~catch~finallyまた
  はusingステートメントを使用する。
   try~finallyとusingは等価
   
   Resource R = new Resource;
   try
   {
     //処理
   }
   finally
   {
     R.Dispose();
   }
   ||
   using(Resource R = new Resource)
   {
     //処理
   }
  
  
 スタックやヒープ、ガベージコレクションについては、名前だけ
知っていましたが、メモリ管理等は特にしたことがないため、それ
ぞれが具体的にどんな役割をしているのかは知りませんでした。ま
た、値型と参照型についても、実際に値が保持される場所などは特
に気にしていなかったため、知りませんでした。今回、それらの意
味などを知ることができてよかったと思います。
 参照渡しやリソースの破棄については、開発で使うことが多いの
で、使い方や中身などは知っていました。とはいえ、リソースの破
棄については、ガベージコレクションの具体的な役割について知ら
なかったため、「なぜ毎回閉じなければいけないのか。」と思うこ
ともありました。今回、このリソースの破棄の意味を知ることがで
きて良かったです。

 次回(第六回・最終回)は、「非同期処理」について、調べていこ
うと思います(3月中に出したい…)。

参考URL:
http://ufcpp.net/study/csharp/

関数指向について

金曜日, 2月 3rd, 2017

関数指向について

 こんにちは。naoyaです。

 毎月一回のプログラム学習記事の投稿です。

 第四回は、「関数指向」について、調べたことをまとめていこう
と思います。

・関数指向
  いわゆる、「関数型言語」と呼ばれる類の言語の設計手法。オ
 ブジェクト指向言語でも使えるところが多い。
  正確な定義等は存在しないが、関数型プログラミングは、複数
 の式を関数を使って組み合わせていくプログラミングスタイルで
 ある。ということは認知されている。
  関数(function)中心の設計で、小さな関数を組み合わせて大
 きな処理を実現しようとする考え方。
  C#では、デリゲート(メソッド(関数)を参照するための型)や、
 ラムダ式(メソッド(関数)を整数などの変数と全く同列に扱う手
 法)などが実装されている。

・関数型言語の特徴
 1.第一級関数…関数を変数に格納できる性質を持ち、第一級オブ
       ジェクトと同じように扱うことができる→関数の受
       け渡しが容易になる。
 2.高階関数…関数を返したり、他の関数を引数として受け取った
      りできる関数。
 3.純粋関数…値を変更しない関数。データを受け取って、データ
      を出力するだけの関数。環境や評価の順などの影響を
      受けない。同じ入力が与えられるたび、決まって同じ
      出力が得られる。プログラムのほかの部分に影響を与
      えない。
 4.クロージャ…戻り値となる特定の関数だけがアクセスできる
       データを関数の内部に保存できる機構。つまり、戻
       り値となる関数は、その実行環境を維持できる。
       引数以外の変数を実行時の環境ではなく、自身が定
       義された環境で解決することが特徴。関数とそれを
       評価する環境のペアであるともいえる。
 5.不変状態(不変性)…状態を全く変更できないこと。状態の変更
          に対するテストを少なくできる。

 関数指向という言葉は、最初に6か月分のお題を決めた時に初め
て聞きました。その内容についても、未だ業務では使ったことのな
い事ばかりだったので、調べても内容が理解できないものが多かっ
たです(ラムダ式とデリゲートのみ、聞いたことがある程度)。
 調べてみた印象としては、関数指向は、データの流れが分かりや
すくなり、総合的にテストをするときの負担が軽くなる、テストが
しやすくなる。ということが所々に書いており、オブジェクト指向
の「開発のしやすさ」とは違う所に重点を置いているという風に感
じました。
 オブジェクト指向言語とは違い、関数型言語にはまだ触れたこと
がないので、触れる機会があれば、今回調べたことを思い出しなが
らやっていきたいです。

 次回(第五回)は「メモリとリソース管理」について、調べていこ
うと思います。

参考URL:
http://postd.cc/functional-programming-should-be-your-1-
priority-for-2015/

http://www.ibm.com/developerworks/jp/java/library/j-ft4/
https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%
B8%E3%83%A3

http://ufcpp.net/study/csharp/
http://syossan.hateblo.jp/entry/2016/07/16/211248
http://qiita.com/lrf141/items/98ffbeaee42d30cca4dc

オブジェクト指向について

火曜日, 12月 27th, 2016

こんにちは。naoyaです。

毎月一回のプログラム学習記事の投稿です。

第三回は、「オブジェクト指向」について、調べたことをまとめて
いこうと思います。

・オブジェクト指向とは?
  ソフトウェア設計において、操作手順よりも捜査対象に重点を
 置く考え方。カプセル化・継承・多態性という3つの概念がある。
  関連するデータの集合と、それに対する手続き(メソッド)を
 「オブジェクト」と呼ばれる1つのまとまりとして管理し、その
 組み合わせによってソフトウェアを更新する。
  既に存在するオブジェクトについては、その内部構造や動作原
 理の詳細を知る必要は無く、外部からメッセージを送れば機能す
 るため、特に大規模なソフトウェア開発において、有効な考え方
 と言える。
  データやその集合を、現実世界の「モノ」になぞらえた考え方
 であることから、「オブジェクト」指向とよばれている。
  すなわち、「テレビ」というオブジェクトがあれば、テレビは
 自分自身の中身について、それを動作させる仕組みを知っており、
 それを利用するためには(たとえばリモコンなどで)適切なメッセ
 ージを与えるだけで良い。
  このような、何らかの「データ」と、それを操作するための
 「メソッド」の組み合わせが「オブジェクト」になる。
  個々の操作対象に対して、固有の操作を設定することで、その
 内部を隠し、利用しやすくしようとする考え方。
  ポイント
   1, プロジェクトを作るときは、まずデータ構造を決める。
   2, データ構造を中心に考える。
   3, データ構造は、中身を隠す(カプセル化する)と、必要な
     所だけ見えて分かりやすい。
   4, 継承と多態性という概念もある。
   
 ・カプセル化
   オブジェクト指向では、オブジェクトは中身がどうなってい
  るかを隠し、可能な操作と属性のみを公開するべきだと言われ
  る。可能な操作を「メソッド」、属性を「プロパティ」と言う。
  ※可能な操作と属性のみを公開すべき
   -例えば、正の整数を扱うメンバ変数に値を入れるときに、
   その値がもし負の数だった場合、直接値を入れると負の数が
   そのまま入り、後の計算がおかしくなるかもしれない。
   プロパティやメソッドを通して値を入れる場合、そこで負の
   数の時の処理をはさめるので、後々助かるかもしれない。
   
 ・継承
   クラス定義の共通部分を別クラスにまとめる仕組み。
   既存クラスの機能、構造を共有する新たなクラスを派生する
  ことが出来る。
   継承元のクラスを親クラスやスーパークラス、継承したクラ
  スをサブクラスと言い、サブクラスには、スーパークラスの変
  数定義やメソッド等が引き継がれる。スーパークラスとサブク
  ラスは包含関係で表現できる。
   継承を行うことで、コードの再利用性、拡張性を高めること
  ができる(複数のクラスで共通部分がある場合に、その部分を
  別クラスにして継承させると、コードが見やすくなり、バグや
  仕様変更などがあった場合に、修正箇所が少なくて澄む)。
  
 ・多態性
   同名のメソッドや型などをオブジェクトの種類によって使い
  分けることが出来る性質のこと。
   同じクラスを継承した2つのクラスでスーパークラスのメソ
  ッドをオーバーライドさせると、同じ名前のメソッドで違う挙
  動をさせること(目的は同じであるが、違う手段を使ったり、
  違う結果が欲しい場合など)が出来るため、コード利用側での
  変更を少なく出来る。
  

まとめ
 オブジェクト指向について調べてみましたが、どこの説明でも、
「コードの読みやすさ」や「コード改変のしやすさ」に重点を置い
ているような印象を受けました。これはそのまま、複数人で作業を
する場合に、他の人がコードを理解するのにかかる時間が減るのと、
バグや仕様変更などがあった時も、変更にかける時間を減らせると
いう利点があるように思います。
 継承は何度か使ったことがあり、カプセル化はイメージがつかみ
やすかったので、割とスッと頭に入ってきましたが、多態性につい
ては、中々理解するのに苦労しました。イメージが掴みづらく、サ
ンプルコードを見て、やっていることはわかるけれども、こうする
ことで何がいいのか、と言う所を理解するのに、凄く時間がかかり
ました(もしかしたら勘違いしているという可能性もありますので、
ご指摘等いただけるとうれしいです。)。

次回(第四回)は、「関数指向」について、書いていこうと思います。

参考URL:
http://www.sejuku.net/blog/9598
http://java2005.cis.k.hosei.ac.jp/materials/lecture18/polymorphism.html
http://qiita.com/lrf141/items/a2f764c8d87de26b6f45
http://nobuo-create.net/java-beginner-25/
http://ufcpp.net/study/csharp/oo_about.html
http://www.itmedia.co.jp/im/articles/0703/06/news125.html
http://e-words.jp/w/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91.html

小学生の頃の絵と成長

火曜日, 12月 6th, 2016

こんにちは、naoyaです。
先日、部屋の模様替えも兼ねて、少し早い大掃除を行いました。

去年までは、大掃除をしても机の中身まではあまりやらなかったのですが、
今回、机を移動させるために中身をガッツリ掃除しました。

ずっと掃除していないと、掃除した時に色々なものが出てくるわけで、
底のほうから、小学校一年生のときの最初の自由帳が出てきました。
img_4678

私は絵を描くのが趣味の一つ(と言っても最近はあまり描いていない)でして、
小学校以前から、何かしら描いていた記憶があります。

しかし、さすがに12年も前のことを詳しくは覚えていないので、「あの時
どんなの描いてたっけ」と思って、少しワクワクしながらページをめくりました。

img_4669

これは…なんだろう?
自分でもよく分かりません。
謎の何か?が沢山…

他のページも似たり寄ったりで、分かったことと言えば
「変なものを描いていた」と言うことと、
「成長したなぁ」と言うことくらいですかねぇ

小学生の頃からずっと、「絵を描くのが上手い」と言われて、調子に乗って色々
描いていたわけですが、振り返ってみるとやはり、(今の自分から見て)下手だなぁ
と思います。

12年経った今は、こんなのを描いてます。
img_4677

ドラゴン的な奴です。2足だからワイバーンって言った方が正しいかも。
自分で言うのもなんですが、結構上手く描けたと思います(模写じゃないよ!)。

たまに時間を見つけては、こんなのを描いて楽しんでます。

以上

構造化について

金曜日, 11月 25th, 2016

 こんにちは、naoyaです。

 一月に一回、プログラムに関する記事を投稿するということで、
第二回のお題は、「構造化について」です。まずは調べた内容から
まとめていこうと思います

・構造化とは
  1960年代後半にオランダの情報工学者「エドガー・ダイクスト
 ラ」によって提唱された「構造化プログラミング」という概念の
 こと。プログラムに標準的な制御機構(逐次処理、分岐、反復)の
 みを使い、全体を大まかな機能単位に分割し、その中をさらに
 細かい機能単位に分割していくことで、記述内容を段階的に詳細
 化していく技法。大規模なプログラムを効率よく、少ないミスで
 設計できるようになる(サブルーチン分割)。
  当時は低水準言語のジャンプ命令をそのままプログラミング言
 語に実装した「goto文」を使用して、処理をプログラム中の別の
 場所に移す技法が多用されており、規模が大きくなるほど、処理
 の流れが把握しにくくなっていた。
  構造化プログラミングは、プログラムを記述する上での基本的
 な作法として、現在でも多くのプログラマの間で、広く共有され
 ている。

・標準的な制御機構
 ・逐次処理
   プログラムが記された順番に処理を行うこと。プログラムの
  記述とコンピュータの動作が一致するプログラム構造である。

 ・条件分岐
   プログラムで、ある条件を満たしたときだけ処理を変えたい
  というときに使われる。if, else, switch等

 ・反復
   ある条件が満たされるまで何度も同じ処理を繰り返したい場
  合に使われる。while, for, foreach等

・その他
 ・関数
   同じプログラムコードを複数の場所で何度も使用したい場合
  に機能をまとめて何度も呼び出せるようにしたもの。
   何度も同じソースコードを複数の場所で書くのは管理上良く
  ないため、使われる。
   何度も出てくるコードでなくても、処理に名前が付く単位で
  関数化し、明確な名前をつけるのが、良いコードを書くコツ。
   名前が付く単位で区切るのが良い。

 ・列挙型
   曜日など、特定の値しかとらないデータを表現する場合に使
  用する。

 ・複合型
   複数の異なるデータ型の変数を一まとめにして管理するため
  に、クラスや構造体といったものを定義して使う。
  データをまとめた型を使いたいときに使用。

 ・名前空間
   クラスを種類ごとに分けて管理するための機構。プログラム
  の規模が大きくなり、クラスの数が多くなってくると、関連性
  のあるもの同士でまとめて管理する仕組みが必要な場合が出て
  くるので、その時にクラスを階層的に分類するための機構。

 ・例外処理
   例外とは、本来プログラムの中で起こってはいけないことが
  起きてしまうことを言う。堅牢なプログラムを作成するために
  は、例外が起こってもプログラムが異常な動作をしないよう、
  しっかりと例外処理を行う必要がある。

 今回調べたものについて、構造化プログラミングという言葉は知
っていたのですが、それがどういったものなのか説明できる、と言
う所までは知りませんでした。しかし、調べてみると、普段から業
務で使っているものや気をつけている事など、中身それぞれについ
ては知っていることがほとんどでした。
 結果的には半分ぐらい復習のような感じになりましたが、これま
での自分がその概念どおりに業務が出来ていたかと言われると、出
来てない部分の方が多く感じますので(特に関数については)、今回
学んだことを常に考えながら、業務を続けていこうと思います。

 次回(第三回)は、「オブジェクト指向」について、調べていこう
と思います。

参考URL:

http://e-words.jp/w/%E6%A7%8B%E9%80%A0%E5%8C%96%E3%
83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%
E3%83%B3%E3%82%B0.html

https://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E5%8C%96%
E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3
%83%9F%E3%83%B3%E3%82%B0

http://ufcpp.net/study/csharp/

CUIとGUIの違いについて

金曜日, 10月 28th, 2016

こんにちは、naoyaです。

これから6ヶ月間、1月に1回、プログラムに関する記事を投稿す
ることになりました。

第1回のお題は「CUIとGUIの違いについて」。まずは、CUIとGUI
について、自分で調べた限りですが、まとめてみようと思います。
(ほとんど参考にしたもののままではありますが)

・そもそもUIとは何か
CUIもGUIも、「UI」という文字が使われています。UIとは、
User Interfaceの略語で、機械とその利用者がやり取りをするた
めのインタフェースになります。入力としてユーザーがシステム
を操作する手段を提供し、出力として、ユーザーが捜査した結果、
システムが生成したものを提示する手段を提供します。

・CUIとは
Character User Interfaceの略語で、文字(Character)を使っ
てコンピュータとやりとりを行う方式です。UNIXやLinux等のOS、
Windowsのコマンドプロンプト等で利用されます。文字を使うの
で、キーボードが主に入力機器として使用されます。
CommandLine User Interfaceとも言われます(その場合、CLIと略
される場合もあります)。
グラフィックなどを使用しないため、コンピューターリソース
を節約できます。そのため、ハードウェアの性能が比較的低いマ
シンでも動作させる事ができます。

・GUIとは
Graphical User Interfaceの略語で、コンピューターグラフィ
ックスとポインティングデバイスを用いて、直感的な動作を提供
する方式。WindowsやMac OS等で利用されます。
コンピュータの画面上にウィンドウ、ボタン、アイコンといっ
たグラフィックが表示され、それらの中から、目的の動作を表す
グラフィックをマウスなどのポインティングデバイスで選択し、
リアクションを発生させる仕組みを持ちます。
複数のアプリケーションを使う場合、基本的にウィンドウの切
り替えで済む場合が多い。
マウスではなく、タッチパネルが使われるものもGUIと呼ばれ
ます。

概要としてはこんな感じかと思われます。では、次にそれぞれの
長所と短所についてまとめてみようと思います。

・CUI
・長所
入力機器がキーボードだけなので、タイピングが早くなれば、
作業スピードをいくらでも上げられる。また、扱う情報が文字
だけなので、性能の低いマシンでも比較的早く動作できる。
プログラムの流用性が高く、同じ系列のOSならばほぼ動く。
複雑な処理を比較的簡単に行える。
・短所
扱える情報が文字だけであり、決まった文字やコマンドを入
力して動作するので、視覚で情報を認識しづらく、コマンドを
覚えなければ動かすことも出来ないので、初心者には扱いづら
い。

・GUI
・長所
文字だけでなく画像も表示でき、操作対象が明確で、比較的、
操作が簡単であるため、初心者でも扱いやすい。
複数のアプリケーションを使う時に、多くの場合、ウィンド
ウの切り替えで済む場合が多い。
・短所
どんなに操作に慣れても一定以上に作業スピードが上がらな
い(マウス等を使うため)。
CPUパワーやメモリ、大量のリソースを使うため、コストが
かかる。
GUIツールやライブラリの存在により、脆弱性のリスクが若
干高い。

長所と短所をまとめて、個人的な印象ではありますが、CUIは扱
いづらいけど速い、使いこなせればもっと速い。GUIは誰でも使え
るけど少し遅い、どんなに頑張っても(CUIに比べると)遅い。とい
う風に感じました。
しかし、使いやすさによる恩恵が大きいのか、街中で最近よく見
るUIはほとんどがGUIだと思います。というか、私は街中でCUIを見
たことは無いような気がします。

では、CUIは一体どこで使われているのか?
CUIは、動作が軽く、文字以外の余計なものが無い、ということ
で、主にシステム開発やシステムトラブル対応、ネットワーク管理
や開発の世界などで、よく使われているそうです。なので、日常で
生活をしていて目にする機会はほとんど無いと思います。
逆に、システム開発等に関わっているのであれば、CUIを使う局
面が出てくると思うので、CUIを扱えるようになった方が良いんじ
ゃないかなと思います。

いかがでしょうか。自分が調べた限りのものと、それに対する自
分の考えで書いているので、間違いだったり、もっとこういう側面
があるよ。的なことだったりがあると思います。その場合、コメン
ト等で教えてくださるとうれしいです。

次回(第二回)は構造化について、書いていこうと思います。

参考URL:
http://www.pc-master.jp/words/cui-gui.html
http://www.cc.kyoto-su.ac.jp/~hirai/text/cui.html
http://www.not-enough.org/abe/manual/comm/gui-cui.html
https://project-flora.net/2015/11/02/gui%E3%81%A8cli%E3%81%AE%E5%88%A9%E7%82%B9%E6%AC%A0%E7%82%B9/
http://plaza.rakuten.co.jp/bluearth/diary/201002210000/

オリンピック終了

月曜日, 8月 22nd, 2016

naoyaです。

オリンピックも終わりましたね。

ということで、私が個人的に好きなサッカーの話を。

日本がどこまでいけるか楽しみにしていたのですが、
結果は残念なことに予選敗退でした。悔しいです。

特に、遅れて到着したナイジェリアに負けたのが悔しいです。

実際に試合を見たわけではないので、どんな
試合だったとかは分からないのですが、
聞くところによると、その日のナイジェリアの選手は
コンディションが最悪だったらしいです。

第二戦のコロンビアでは引き分け、こちらも
見ていないのでよく分からないのですが、
オウンゴールで相手に点をあげたと聞きました。

予選最後のスウェーデン戦は、時間が合ったので、
なんとか見ることが出来ました。

それまでの戦いは見ていなかったので、負けるだろうな
とか思っていたのですが、勝ちましたね、1-0で。

一試合しか見ていませんが、私は今回のU-23日本代表、なかなか
強いんじゃないか。と思いました。攻撃も守備もしっかりと
出来ているし、良いチームなんじゃないかという印象を受けました。

それだけに、なんでナイジェリアに負けたのか分からない…
とはいえ、ナイジェリアも銅メダル、元々が強かったんですかね。

とりあえず、日本代表の皆さん、お疲れ様でした。

ブラジル、金メダルおめでとう。

新社会人として

月曜日, 4月 18th, 2016

今年4月1日より入社致しました、naoyaです。
新社会人として恥ずかしい行動をしないよう、心がけていきたいです。

今はまだ入社して2週間ほどしか経っていないので、新人研修として
いくつかのサイトのアルゴリズム体験問題を解いて、その回答とフローチャートを
まとめています。

この問題が最初はすごく簡単なのですが、少し舐めてかかると、急に難しい問題が
出てきたりして、きちんと仕事をしている先輩方の手を借りることもあります
(お仕事中にすみません笑)。

しかし、難しい問題が出てきたときにそれを一人で解いて正解を出せたときの
達成感は、すごく良い気持ちになります。

また、作業を報告するとき、学校では曖昧な言い方で
「~くらいまでやりました。」
とか、
「~あたりまでに…」
とか言っていたのですが、会社に入ってからは、
「全体が~で今…までやりました」
という風に、正確に伝えるように教えてもらい、少し驚きましたが、
少し考えるとまぁ、当たり前ですよね笑。

きちんと状況を報告しないと意味ないですからね。

あまり文章を書くのには慣れてないので読みにくい部分もあると思いますが、
これから頑張っていきたいのでよろしくお願いします。