プログラミングと日々思ったことなど

ブログ名通りです。仕事でプログラミングをはじめました。

さよなら本屋さん

1話だけじゃない。もっと色々な話が読みたい。


500円玉を握りしめ、自分は初めて近所の本屋に向かった。
買いに行った日が夏だったのか、冬だったのかは覚えていない。
ただ当時はアイドルのミニモニが大好きで、多分その日も駄菓子屋で買ったプロマイドを持っていたと思う。

f:id:boa0203:20180712195429j:plain:w300

初めて買う本は決まっていた。
友達の家にあった漫画雑誌に載っていた、ギャグ漫画の単行本だ。
あの漫画はあるだろうか?
胸を高鳴らせ、自分は入り口のドアを開けた。
本屋に入ると目についたのは、天井からぶら下がっている本の種類が書かれたパネルだ。
それを一つ一つ見て、自分は漫画コーナーを探した。
・・・いや、そんなことしなくても見つけられたかもしれない。漫画コーナーは右手すぐにあったのだから。
ともかくその日、自分はギャグ漫画を買えた。
その日から自分はお小遣いがたまったり、お年玉をもらえたりすると、すぐに漫画を買いに行くようになった。

f:id:boa0203:20180712203005j:plain:w400

高校生になると表紙だけを見て内容を想像し、本を買うというのにハマった。
漫画も小説も全く違う内容のものもあったし、想像以上に好みだったり、苦手だったりした。

ただ店内を回って、帰るだけの日もあった。
たくさんの本が置かれているのを確認するだけでも満足した。
それだけで、読書した気になっていた。

自分はとても本が好きだったという訳ではないと思う。
けれども、オレンジと青色と白(だったはず)の正方形が交互に敷き詰められた床が、ポスターを貼ったセロハンの跡だらけの鏡の柱が、古びたトイレが、ずっと買われずにほっとかされ、日に焼けた本が、大好きだった。

日に焼けた本があるというのは、店員の怠慢だと思う人もいるかもしれないが、自分はそうやって綻びがある方が好きだ。

綻びがある方が、店自体生きているように感じた。

そんな宮脇書店浦添店が、数日で無くなる。

閉店した後に初めてこの店付近を歩いた人は、もうここに大きな本屋があったことがわからない。
それは思い出があった場所が、もう自分の記憶の中にしか存在しないということだ。

だからこの記事を書こうと思った。
自分がここにあった思い出を忘れても、誰かの記憶の端に残るように。

さよなら本屋さん。
もっと足を運べばよかった。さよなら。

用語メモ【TCP/IP】

shop.ohmsha.co.jp

この本を一度読み終え、二度目の読み直しをするので、読みながら用語や覚えておいた方が良いことをまとめていきます。

バッチ処理
 処理するプログラムやデータなどをまとめて一括で処理する方式。
 昔はパンチカードが使われていた・・・?

・Multi Vendor マルチベンダ
 ベンダは機器メーカーやソフトウェアメーカーを指す単語。
 単一のメーカーの機器・ソフトウェアでネットワークを構成するのがシングルベンダ。マルチベンダは、いろいろなメーカーの機器やソフトウェアの組み合わせ、ネットワークを構成させる場合を指す。

・いろいろなプロトコル
 IP,TCP,HTTP,IPX,SPX
 様々なプロトコルを体系的(→系統的。統一的。ひっくるめて?)にまとめたものを「ネットワークアーキテクチャ」ということもある。
 TCP/IPもIP,TCP,HTTPなどのプロトコルの集合体。

・パケット交換
 大きなデータをパケット(Packet:意味は小包→大きなデータを小包に小分けにして相手に届ける)と呼ばれる単位に分割して送信する方法。
 ネットワークを流れるパケットは、プロトコルが利用する「ヘッダ」とそのプロトコルの上位層が利用する「データ」から構成されている。
 それぞれのヘッダには、少なくとも2種類の情報が入っている。(→「宛先と送信元のアドレス」と「上位層のプロトコルが何かを示す情報」)

プロトコルの階層化
 ISOは通信プロトコルを設計するときの指標として、OSI参照モデルを提唱した。
 
 OSI参照モデル⭐︎p20
 通信に必要な機能を7つの階層に分け、機能を分割することで、複雑になりがちなネットワークプロトコルを単純化するためのモデル
 各階層は、下位層から特定のサービスを受け、上位層に特定のサービスを提供。

・ノード(Node)
 ネットワーク接続されている終端のコンピュータなどの機器を示す。

・不揮発性メモリ
 電源を切っても記憶したデータが消えない記憶装置。

・プレゼンテーション層
 「ネットワーク全体で統一された表現形式」から「コンピュータやソフトウェアに適した表現形式」に相互に変化する。

物理層
 データの0や1を電圧や光のパルス(→ ごく短時間だけ流れる電流や電波)に変換して、物理的な通信媒体に流し込む。直接接続された機器間でもアドレスが利用されることがある。
 これはMACアドレス物理アドレス、ハードウェアアドレスと呼ばれる。
 このアドレスは、同じ通信媒体に接続された機器を識別するためのアドレス。

 MACアドレス(Media Access Control)
 媒体アクセス制御。

通信方法の種類
ネットワークや通信は、データの配送方法によって分類できる。

・データの配送方法:コネクション型
 通信をする前にコネクションというロープを張る。(データの送信を開始する前に、送信ホストと受信ホストの間で回線を接続する→通信の前後にコネクションの確率と切断の処理を行うので、相手が通信不可能な場合には無駄なデータを送らなくて済む)
 ATM,フレームリレー,TCPなどのプロトコルがコネクション型

・データの配送方法:コネクションレス
 コネクションの確立や切断処理がない。送信したいときにいつでも送信できるが、通信相手がいるかどうかの確認は行われない。
 イーサネット,IP,UDPなどのプロトコルコネクションレス

・アドレス
 コンピュータ通信では、プロトコルの各層で異なるアドレスが使われている。
 MACアドレスIPアドレス、ポート番号、電子メールアドレス等。

・ネットワークインターフェースカード
 コンピュータをネットワークに接続するときに使う部品。NICと呼ばれる。

ゲートウェイ(Gateway)
 プロトコルの変換をする装置。変換し、中継も行う。
 www(world wide web)を使用するときに、ネットワークトラフィックの軽減やセキュリティを意図して代理サーバー(Proxy Server)を設定する場合がある。

bps(Bits Per Second)
 データ通信をするとき、2つの機器間を流れるデータの物理的な速さを伝達速度と呼び、伝達速度を表す単位がbps

スループット
 実際にホスト間(ホスト→ネットワークに接続されたコンピュータ)でやり取りされる電達速度のこと。単位はbps

・データリンク
 直接接続された機器間で通信するためのプロトコルやネットワークを指す言葉。

・リピーター
 OSI参照モデルの第1層の物理層でネットワークを延長する機器。(ケーブル上を流れてきた電気や光の信号を受信し、増幅や波形の整形などをしたのちに別の側へ再生させる)

・フレーム
 パケットとほぼ同じ意味で使われる。データリンク層ではフレームと表現するのが一般的。

・ブリッジ
 OSI参照モデルの第2層、データリンク層でネットワーク同士を接続する装置。物理アドレスMACアドレス)で処理を行う。

ルーター
 OSI参照モデルの第3層、ネットワーク層の処理を行う。ネットワークとネットワークを接続して、パケットを中継する装置のこと。ルーターはネットワークそうのアドレス(IPアドレス)で処理を行う。

・レイヤ4-7スイッチ
 OSI参照モデルトランスポート層からアプリケーション層の情報に基づいて配送処理を行う。

ロードバランサー
 複数のサーバーに負荷を分散させるレイヤ4-7スイッチの一種

・ネットワークについて
 インターネット接続サービスを利用するとき、スイッチや無線LANルーターで集約された通信は、アクセスに接続され、必要な場合はさらにエッジやバックボーンを経て通信相手に接続される。

TCP/IPという言葉が持つ意味
 TCPとIPという2つのプロトコルだけではなく、IPを利用したり、IPで通信したりするときに必要となる多くのプロトコル群の総称。
 具体的には、IP,ICMP,TCP,UDP,TELNET,FTP,HTTP等。
 TCP/IPプロトコルは、IETF(Internet Engineering Task Force)で議論され標準化される。標準化しようとするプロトコルは、RFC(Request For Comments)と呼ばれるドキュメントになり、インターネット上で公開される。
 参考⭐︎P69:Index of /rfc
 教えてもらったRFCに関する小ネタ
 鳥類キャリアによるIP - Wikipedia

 また、TCP/IPはもともとインターネットを通信するために開発されたプロトコルである。

TCP/IPOSI参照モデル
 TCP/IPで登場する様々なプロトコルも、OSI参照モデルに当てはめることができる。

デバイスドライバ
 OSとハードウェアの橋渡しをするソフトウェア

・ICMP(Internet Control Message Protocol)
 IPパケットの配送中に何らかの異常が発生してパケットを転送できなくなったときに、パケットの送信元に異常を知らせるために使われるプロトコル

ARP(Address Resolution Protocol)
 パケットの送り先の物理的なアドレス(MACアドレス)をIPアドレスから取得するプロトコル

・WWW(world wide web)
 インターネットで情報をやり取りする仕組み(アプリケーション)。
 webブラウザとサーバーの間の通信で使われるプロトコルがHTTP。送信に使われる主なデータフォーマットがHTML。
 WWWでは、HTTPがOSI参照モデルのアプリケーション層のプロトコル、HTMLがプレゼンテーション層のプロトコルと言える。

SMTP(Simple Mail Transfer Protocol)
 電子メールの配送で使われるプロトコル

SNMP(Simple Network Management Protocol)
 ネットワーク管理に利用されるプロトコルSNMPで管理されるルーターやブリッジ、ホストなどはエージェントと呼ばれ、ネットワーク機器を管理するプログラムをマネージャと呼ぶ。
 SNMPは、エージェントとマネージャの通信に使われるプロトコル

※今回は90ページまで。来週の休みで最後まで読む。

サンプルプログラムを作成【Java】

参考ページ
Spring Bootで簡単なWebアプリケーションを書いてみる - ももいろテクノロジー

このページをそのまま使わせてもらうと、このような画面が作れました。
f:id:boa0203:20171015154337p:plain

このページを作るにあたり、以下を理解することができました。

アノテーション
注釈・注意書きを追加する機能。一部のbeanを定義することもできる。
@Autowired
DIコンテナの中からクラスまたはインターフェースの派生クラスになっているbeanを検索して値を設定。
他にも、@Contollerや@GetMappingなど、色々なアノテーションがある。

DIコンテナについて
DI・DIコンテナ、ちゃんと理解出来てる・・? - Qiita

O/Rマッピング
オブジェクトとリレーショナルデータベースを対応付けすること→橋渡し。
データベース操作にかかわす煩雑な作業を軽減できる。

理解しているようで、理解していないような・・・ともかくこれでなんとか、来月中には完成できればいいな・・・。

技術とは全く関係ないですが
f:id:boa0203:20171015162608p:plain
コンソールに表示される、このアスキーアートのようなものが好きです。

正規表現について【メモ】

金曜日にこんな入力制限処理を作成しました。

//キー入力チェック(電話番号)
//テキストボックスのKeyPressイベントに処理を作成
private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
	try
	{
		//バックスペース、ハイフンは使用可能にする
		if(e.KeyChar == 0x08 || e.KeyChar == '-')
		{
			return;
		}

		//数字キー以外の入力をキャンセルする
		if(e.KeyChar < 0x30 || e.KeyChar > 0x39)
		{
			e.Handled = true;
		}
	}
	catch (Exception ex)
	{
		Console.Error.WriteLine(ex);
	}
}

上記に使用しているのは、正規表現です。

正規表現とは

文字列パターンマッチのための簡易言語。
正規表現は色々なプログラミング言語に共通で使える。
(C# .NET Perl Java)

上記の正規表現では、ASCIIの文字列を使用しています。

!ASCII コード
コンピュータは二進数で様々な処理を行うので、文字データも二進数で表される。
文字を表現する二進数のことを文字コードと呼ぶ。


//キー入力チェック(全角のみ)
// ^ $ [ ] - について
//これらの特殊文字を、正規表現ではメタ文字という(メタ文字は他にもある ? * とか)
// ^ と $ は行の先頭や最後のミニ存在する文字列を検索する
// が、[]の中で ^ を使用すると、以外の文字(否定)を表す
//[] は指定した文字のどれか、-はaからzまで、の”から”という意味
//¥ は後に続くものが何なのかをわかりやすくするために書いてある

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
	try
	{
		
	if (Regex.IsMatch(e.KeyChar.ToString(),@"[^a-zA-z0-9¥uFF61-¥FF9F!-/:-@¥[-`{-˜]+$]"))
		{
			return;
		}
	}
	catch (Exception ex)
	{
		Console.Error.WriteLine(ex);
	}
}

Regex.IsMatchメソッドは、正規表現と一致する対象が指定した入力文字列内で見つかったかどうかを示します。

Javaを個人的にはじめて、反省に至るまで【Java】

前回の記事から、随分経ってしまいました。

6月ごろから友人と二人で、少しずつ開発をしています。
その経過を書いていきます。

開発環境

macOS Sierra
Java 8
Eclipse(Neon)


参考にしたぺージ

初心者でもほぼ無料でJavaを勉強できるコンテンツ10選 - paiza開発日誌

Angular 2 画面遷移

mobile:初心者のためのSpring Framework入門


1.eclipseでダウンロードから、データベース接続に至るまで。

まず、eclipseで動的プロジェクトを作成し、サイトを参考にしながらデータベース接続画面を作成してみました。
そして実行してみますが・・・
f:id:boa0203:20170916180808p:plain

できない。
リソースが無いと言われてしまったので、何かが足りないのだと思い試行錯誤しました。
ですが原因がわからなかったので、経験者に質問。
助言と参考画面をもらいました。

助言
・contextかserverファイルの書き方が間違っているのでは。
JSPTOMCAT をビルドすると、変なファイルが作られるときもあるので、キャッシュのクリアをした方が良いかもしれない。
Tomcatapache連携する。
JSONでパラメータを与えて非同期にする。

!context.xml
アプリケーションの配置場所や呼び出し方などの情報を設定するファイル。

!server.xml
Tomcatサーバの動作を定義する設定するファイル。

参考画像を元に、自分のDB接続設定のコードを確認したところ書き方の違いを発見。
書き直したところ、接続ができました。

2.画面にデータベースから取得したデータを表示するまで。

接続はできたので、今度は取得したデータの表示に取り掛かりました。
1で取ってこれた接続設定と、servletを使用してデータを表示したかったのですが、データの表示がうまくいきませんでした。
このservletの書き方が理解できず、時間を費やしてしまい焦りだし、結局サンプルのjspに直書きするものでなんとか表示させました。

f:id:boa0203:20170916235837p:plain


Servlet
サーバー上で動く部品のようなもの。Java言語で記述される。
MVCではControlにあたる。

JSP
HTML上に直接記述できるJava言語。
MVCではViewにあたる。

servletjspの違い
servletは常にコンパイルが必要だが、jspサーブレットエンジンがjspファイルを自動的に変換してくれる。
なので、jspservletに変換される。

MVCについて
Model、View、Control と役割分担をしてプログラムを作成する方法。
役割の内容
Control ・・・ DB関連
View ・・・ 画面表示
Model ・・・ 処理結果をViewに返す(ModelとViewの仲介、制御)

JavaでのModelはJavaBeansになる。JavaBeans自体は、直接クライアントから呼び出されることはない。(仲介、制御なので)

3.表示したデータから1つのデータを選択して、それを別のページに持って行くまで。
次に1つのデータを選択して、次のページに表示する処理を作ろうと考えました。
が、何をすれば良いのかわからず、経験者にお聞きしました。

<%@page contentType="text/html"%> 

<%@page import="java.sql.*"%>

<%!

// サーブレットのinitメソッドに相当

public void jspInit() {

    try {

        // JDBCドライバをロード

        Class.forName("com.mysql.jdbc.Driver");

    } catch (Exception e) {

        e.printStackTrace();

    }

}

%>

<html> 

<body> 


<%=session.getAttribute("mysql")%> 

<%= request.getParameter("eid")%>

</body> 

</html> 


そしてメソッドを使用して、次画面に持って来ることができました。

・・・ここから、jspservletやプロジェクトの中身などについて調べて行ったり来たりしますが・・・理解が追いつかなくなりました。

4.フレームワークを使用する

理解が追いつかなくなってきたので、経験者が教えてくれたフレームワークを使用しようと試みます。

使ってみたのは、Angular 2です。

f:id:boa0203:20170917012222p:plain

参考ページそのままの画面を表示できました。
ですが、このAngular 2の使用はやめることにしました。
コンポーネント指向、開発言語(TypeScript)の理解が必要だからです。
JavaScriptコードもままならないのに、無謀でした。

このAngular 2を少しだけ動かし、Java自体をもう一度やり直そうと反省しました。

5.現在

反省して今度はSpringフレームワークを調べつつ、画面を作っています。
・・・この記事は戒めです・・・。

別クラスから、メソッドを操作する【VB.NET】

タイトル通りです。
どうすれば良いのか、思いつかなかったので先輩に教えてもらいました。

Private Sub frmTest_FormClosing(sender As System.Object, _
				e As System.Windows.Forms.FormClosingEventArgs) _
				Handles MyBase.FormClosing

	'呼び出したい画面
	Dim frm As frmTest = CType(Me.Owner,frmTest)

	'comboboxクリア
	frm.cmbテスト.DataSouce = Nothing
	'combobox設定
	frm.cmbテスト設定(frm.cmbテスト,"")
	'combobox選択名設定
	frm.cmbテスト.Text = Me.strTestNm

End Sub

frm.cmbテスト設定()が、メソッド名です。
呼び出したいメソッドは、スコープをPublicにします。
・・・これが思いつかなくて時間がかかりました。

DataGridのカラムを指定してデータを取得【VB.NET】

DataGridが苦手なので、少し復習します。


'カーソルを特定の1行まで移動させる
For Each dr As DataGridViewRow in grdテストグリッド.Rows
	
	'strIDには、システムIDのデータの1つが入っている
	If dr.Cells("テストID").Value = strID Then
		grdテストグリッド.Rows(dr.Index).Selected = True
	End If

Next
'カーソルの場所までデータグリッドをスクロール
grdテストグリッド.FirstDisplayedScrollingRowIndex =  _
			grdテストグリッド.SelectedCells(0).RowIndex

DataGridViewのColumnではなくRowを使って、データを取り出すというのが頭にしっくりきません。
忘れないように気をつけます。
似たようなコードをもう一つ。

For Each dtGrid_test As DataGridViewRow In grdテストグリッド.Rows
	'NullValueエラー回避
	If dtGrid_test.Cells("テストコード").Value = Nothing Then
		Exit For
	End If


	str_test = dtGrid_test.Cells("テストコード").Value.ToString().Trim()
	
	str_selectedvalには、インサートしようとしているデータが入っている。
	If str_test = str_selectedval
		blCheck = False
		Call MsgBox("重複しています",Me)
                Exit Sub
	End If

Next