読者です 読者をやめる 読者になる 読者になる

新人ぷろぐらまの覚え書き

最近プログラマーに転職したアザラシのブログ。

コマンドプロンプトでDドライブに移動する

コマンドプロンプトで違うドライブのディレクトリに移動しようとして

つまづいたので忘れないようにメモ。

 

たとえばDドライブ下のtestディレクトリに移動したい場合、

普通にやっちゃうとこう。

cd D:\test 

でもこれだと上手くいかない。

調べると、cdの意味は「change directory」とのことなので

そりゃドライブが違ったら上手くいかないわなー。。

 

なので、単純にこうするとDドライブに移動できる。

 D:

 

ただ、これだとDドライブ直下にしか移動できないので

今回のように「Dドライブ下のtestディレクトリに移動したい」のような場合は

またcdコマンドで移動しないといけない。

 

1回でカレントディレクトリまで移動したい場合は、cdコマンドを使う。

 

cd /d D:test

 

 

 /dオプションをcdの後に付けて「ドライブ名:\ディレクトリ名」を指定することで
 CドライブからDドライブに移動できる。

 

変数の即時展開で詰まった話

バッチの文法の勉強をしようと思い、簡単な処理のバッチを作成していたのですが

for文で文字列をループ処理で結合しようとして「変数の値が消える」という現象に悩まされたので調べたことをメモっておきます。

 

・やろうとしたこと

ディレクトリ内のファイル名を取得してテキストファイルに書き出すバッチを作りたい。

 

・困ったところ

for文でループ中に、取得したファイル名を変数に結合したかったのだが、

最終ループで取得したファイル名しか変数に入っていない!という現象が発生…。

 

この時点で書いていたもの↓

set name=
for %%i in (*.xlsx) do (

echo ファイル名:%%i

set name=%name% %%i)

echo %name%>names.txt

exit

 

 カレントディレクトリに1.xlsxと2.xlsxというエクセルファイルが存在していた場合、

names.txtに

 1.xlsx 2.xlsx

 と表示されるはずが、

 2.xlsx

しか表示されない!なんでや!

 

調べたところ、これは「変数の即時展開」によるものらしく、

変数の中身はその行を読み込んだときに値に置き換わるため、

ループの中で%name%が先に評価されるためにこうなってしまうみたい。

実行中に値を変化させたい場合は

setlocal enabledelayedexpansion (遅延環境変数)を宣言しないといけないらしい。

 

setlocalを宣言した時の文法のルール

・setlocal enabledelayedexpansionで宣言、終了時に「endlocal」

・実行中に値を変化させたい変数を使う(評価する)時に!で囲う

 

ということでsetlocalを宣言してバッチを修正↓

setlocal enabledelayedexpansion
set name=
for %%i in (*.xlsx) do (
set name=!name! %%i
)
echo %name%>names.txt
endlocal

 

これを実行すると

 1.xlsx 2.xlsx 

 と表示されました。ヤッタネ!

 

まぁこの処理やるなら↓でいいんですけど・・・

dir ファイル名を調べたいファイルパス\*.xlsx /b >ファイル名.txt

 

 

なかなかバッチの文法に慣れないな~~

あと何個か簡単なものを書いてみて覚えていきたいと思います・・・

 

コマンドでSVNをチェックアウトする

コマンドプロンプトからSVNをチェックアウトしなくてはいけない状況に追い込まれてしまったので少しだけメモ。

 

1.インストール

ダウンロードは普通に環境にあったものを選んでダウンロード

インストール時、初期状態はcommand lineが選択されていない状態なので、クリックして選択しておく。

↓これ

f:id:mmm06:20170203222305p:plain

 

2.レポジトリ用のフォルダを作成してチェックアウト

①今回は先にCドライブにチェックアウトする用のフォルダを作っておく

コマンド:c:\ >mkdir SVN

 

svnのチェックアウト&レポジトリ用のフォルダを作成

コマンド:c:\ SVN>svn checkout アドレス レポジトリ用のフォルダ名

認証が必要な場合は、ぶわーっと「認証できませんでした!!」的なエラーメッセージと選択肢が出るのでpを押下する。

んでIDとPASSを入力すればチェックアウトが始まる。

 

現場で支給されたPCが右クリックするとエクスプローラーが強制終了するので

色々コマンドラインからやってるけど厳しい・・・

n進数について

n進数のnの文字は桁が進む数を表す。
基数…基本となる数(n進数のnにあたる部分)
2進数だと、桁が上がるたびに値が2倍になる→これを2進数が持つ各桁の重みという。

桁が上がるたび(1→10→100→1000)

1→2倍→4倍→8倍・・・と倍々になっていく。

基数変換:別の基数表現に置き換えること
・n進数を10進数に基数変換する→各桁に重みをかけていけばいい

 

2進数を8、16進数にするのは簡単!

2進数の3桁は8進数の1桁、2進数の4桁は16進数の1桁に当たるため、

・2進数を8進数に変換する

→2進数を3桁ごとに区切り、区切り単位で10進数に直す→8進数に直す

・2進数を16進数に変換する

→2進数を4桁ごとに区切り、区切り単位で10進数になおす→16進数に直す

 

例えば、10011011.1という2進数の文字列があったとして

8進数に基数変換

①3桁に区切る(桁が3桁に足りない場合は0を補う)

010+011+011+.100

②それぞれを10進数に基数変換し、くっつけた値が8進数での表示になる

2+3+3+0.5=233.4

16進数に基数変換する場合

①4桁に区切る(桁が4桁に足りない場合は0を補う)

1001+1011+.1000

②それぞれを10進数に基数変換し、くっつけた値が16進数での表示になる

(9以上の値はA~Fに変換する)

9+11+0.8

11は16進数ではBなので、9B.8

2進数での負の数の表し方=補数を用いる

補数は2種類ある。
①その桁数での最大値を得るために補う数
②次の桁に繰り上がるために補う数
例)123という数があったら(10進数)
①その桁数での最大値を得るために補う数(999にしたい)=876(9の補数)
②次の桁に繰り上がるために補う数(1000にしたい)=877(10の補数)

次の桁に繰り上がるために補う数をコンピュータでは負の数として扱う

(つまり↑の②が負の数に当てはまる)


※8ビットで考えるとき、11111111=255になる
つまり、負の数は足して256になる数を求めればいい、という考え方もできる
例えば15は241足せば256になるので、補数は241

・シフト演算(かけざん、割り算)
2進数を表すビット列を左、もしくは右にずらす操作
左にずらすと*2、右にずらすと/2になる
論理シフト…符号は考慮せず行うシフト操作

(シフト操作して、はみ出たビットは削除足りないビットは0を補う)
算術シフト…+-を考えたシフト。先頭の符号ビットは固定にし、

それ以外のビットをシフトする。
右算術シフトの場合には、空いたビットは符号ビットで埋めることに注意

 

・小数点を含む数の表し方
固定小数点数…ビット列のどの位置に小数点があるかを暗黙了解として扱う。整数部、小数部に分けて考える。整数を表すときに使う(int型など)
浮動小数点数…指数表記を用いて数値を扱う。(float型、double型など)
符号部、指数部、仮数部の値をビットに割り当てて、±m*2e、という形で表す

 

浮動小数点数の正規化
有効な仮数部をできるだけ有効に使えるよう、小数点の位置を指数部で調整すること。
有効な桁数を多くとることができると、その分誤差が減る。
S:符号
E:指数部
M:仮数

 

浮動小数点の誤差
実際の数値とコンピュータ内部で表現できる数値との間に生じたずれを誤差という。
ちょっとした誤差が積み重なることで不具合が発生することもあるので注意すること。

誤差は以下の5種類。
桁あふれ…演算した結果がコンピュータの扱える最大値や最小値を超えることによって起きる
対策:データ型のサイズを大きくする。(int型でオーバーするならlong型にする、float型をdouble型にするなど)
アンダーフロー:最小値を超えてしまうこと。(限りなく0に近い実数によって浮動小数点の指数部がパンクして精度が保てなくなる)
オーバーフロー:最大値を超えてしまうこと。

情報落ち…絶対値の大きな値と小さな値の加減算を行ったときに、小さな値が反映されないこと。
対策:絶対値の大きい値に小さい値をいきなり足さない。あらかじめ小さい値同士で足し算をして大きい値にしてから大きい値と足す
打ち切り誤差…円周率の計算など、終わりがない計算を実行したときに途中で打ち切ることによって生じる誤差
対策:誤差がどのくらいまで許されるのかを考えて計算を打ち切る桁を決める
桁落ち…絶対値がほぼ等しい値同士の差を求めたときに、有効な桁数が大きく減ることで生じる
対策:差が小さい引き算はしないように工夫する
丸め誤差…表現できる桁数を超えてしまったときに、最小桁よりも小さい部分が四捨五入や切り上げ、切り捨てを行うことによって発生する
対策:データのサイズが大きい型を使う

 

基数変換の計算に時間がかかってしまうので、練習しなきゃだな〜

2進数はパッと見て桁の重みを計算して10進数に変換できるようになりたい。

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

オブジェクト指向について、本で勉強した事のメモ書きです。
読んだ本はこれ。

 

 

オブジェクト指向の定義

・ソフトウェアを開発するときに用いる部品化の考え方

設計図の部品をJavaのクラスとして記述していくことで、現実世界の定義や行動をプログラム化できる

人間に把握できるプログラム開発を実現する

 

メリット

・柔軟性、保守性が上がる

・プログラムの一部を簡単に変更できる(修正したいクラスだけを変更すればいい)

 

オブジェクトの姿

属性と操作を持っている。

オブジェクトの属性や操作は、プログラマが部品を作成する際に決定する。

 

オブジェクト指向の3大機能

カプセル化

属性や操作を、一部の相手からは利用禁止にする

・継承

過去に作った部品を流用し、新しい部品を簡単に作れる機能

多態性

似ている2つの部品を「同じようなもの」とみなし、「いいかげん」に利用できる機能

 

オブジェクトとクラス

・クラス・・・オブジェクトが生み出される際に用いられる、オブジェクトの設計図

クラスを定義して、そのクラスに基づいてオブジェクトを生成する

生成されたオブジェクトを「インスタンス」という。

 

・クラスの定義方法

クラス図・・・クラスの設計内容を上からクラス名、属性、操作の一覧として並べる

属性=フィールド、操作=メソッド

属性:クラスが持つ属性について、変数の名前と型を考える

操作:操作の名前、操作するときに必要な情報の一覧、操作の結果として支持もとに返す情報、処理内容を考える

 

has-aの関係

フィールドにクラス型の変数を宣言することが出来る。

あるクラスが別のクラスをフィールドとして利用している関係

 

・コンストラクタ

クラスがnewされた後に自動で実行され、初期値を代入する。

 

・同じクラスから生成されたインスタンスでフィールドを共有したい場合

・・・フィールド宣言の先頭にstaticキーワードを追加する。

staticキーワードを指定したフィールドは静的フィールドと呼ばれる。

(クラス変数とよばれることもある)

インスタンスにではなく、クラスに実体が準備される。また、そのクラスがインスタンスを生み出していなくても利用可能。

静的メソッドはその内部で静的ではないメソッド・フィールドを利用できない。

 

とりあえずメモっただけ・・・

100パーセント理解は仕切れてないです^^;

 

明日から1ヶ月間社外研修に行ってきます。
他社の方とも一緒に勉強できるといいな〜
 

入社〜1ヶ月経って

プログラマーとして入社して1ヶ月が経ちました。

 

前職の時はパソコンを使う仕事だったものの、

主に必要だったスキルはExcelくらい・・・

大学はまったく違う学科だったので、プログラムの学習経験は

ほとんどなしからのスタートです。

 

・もともとできたこと

エクセル(資料を作ったり、ちょっとした関数を使ったりくらい)

PCの基本的な操作

前職でOracleの使用経験あり(SELECT文しか使ったことはないですが…)

HTML、CSSの学習経験あり(簡単なサイトを作れるくらい、実務経験はなし)

 

こんな感じ・・・完全にド素人です。

未経験者の中途採用枠で採用され、

来月まで研修期間ということでひたすら勉強中です。

学習中の言語はJavaです。

 

・研修内容について

入社〜2週間は本を使って独学で勉強していました。

使った本はこちらの2冊。

1冊を5日ずつかけて学習し、2週間で2冊終了しました。

 

本の構成が説明→例→練習問題という構成になっているので、

説明を読んで例のソースコードをeclipsに書いて動かしてみる→練習問題をやってみる、という流れで学習を進めました。

 

自分でコードを書くことって大切ですね〜(当たり前だけど)

自分で作りたいプログラムをどんどん書くと実力もつくんでしょうが、

自分の作りたいプログラムがない状態なので・・・

 

とりあえず1ヶ月やってみて、プログラミングが思っていたよりも難しくなかったので

ホッとしています。

やってみた感覚としては外国語の習得に近いです。

日本語の文章をパソコンにわかるようにjavaで言い換える、的な。

こんな感覚でいいのか・・・

 

毎日学ぶことがたくさんなので、アウトプットとして

プログラム関係で学んだことをメモとして残していきたいと思います。