2008年4月アーカイブ

現在、ゴールデンウィーク(以下「GW」という)中と言う事でGW中にプログラミングを知りたい、習いたいと思っているかも知れません。そんな人のために、7回で希望を叶えちゃいます。
扱う言語は、Javaというプログラミング言語です。

この企画の受講状況を各自で管理してもらおうと思い管理表をGW_firstJava.xlsからダウンロードできますので使ってもらえると各自の進行具合が分かります。学び終えた場所の「日付」に「Ctrl+;」を「時刻」に「Ctrl+:」を押せば終了した日付と時刻を記憶できます。PDF版はGW_firstJava.pdfからダウンロードできます。なお、ファイルはウィルスバスターでウィルスチェックしています。

それでは早速Javaの説明から入ります。

1-1.プログラムとは
 私たちが普段使っているパソコンや知らない間に利用している会社のサーバ、銀行のサーバなどにはハードウェアだけではなく必ずソフトウェアが存在します。

 ソフトウェアとは、プログラムの手順や処理を表し普段利用するブラウザなどが思いつくかもしれませんが、ブラウザなどの特定のソフトウェアをアプリケーションと呼びます。

ソフトウェアやアプリケーションは、プログラム言語で書かれており代表的な一つにJavaがあります。
Javaのようにプログラム言語でソフトウェアを作成すれば、その指示通りにハードウェア(パソコンなど)が動作します。

 プログラムを作成する場合にはルールと規則(プログラミング規則とJava主義を参考に!)があります。
 ルールや規則をこれから学んでいく事により、自由自在にハードウェアを操る事ができるで頑張りましょう。

1-2.Javaとは
 Javaとは、プログラム言語の一種と紹介しましたが、Javaとはどういうものか誕生した経緯、特徴を説明します。

 Javaはもともと家電製品向けのプログラミング言語として開発され誕生した言語です(1991年頃)。
家電製品は数多くの種類が存在しメーカごとに独自規格が多くそれぞれ開発する必要がありました。そこでJavaは、家電のプラットフォームに依存しないプログラミング言語を開発したのですが成功したとはいえません(厳密に言うとそのころの名前はJavaという名前では有りません)。

成功できていなかったJavaですがインターネットが流行(1995年頃)したのをきっかけに「プラットフォームに依存しない」という利点を生かし注目され始め急成長しました。

1-3.プログラミング規則とJava主義
 Javaには、守るべきルールがあり、私はプログラミング規則とJava主義の2つに分けまして説明します。
プログラミング規則は、Javaを作成する上で最低限守らなければいけない規則で規則に反するものはコンパイルエラー(詳細は後程説明します)というエラーです(今後コンパイルエラーという用語が出てきた場合はプログラミング規則に反していると思って下さい)。

 Java主義は、プログラム的には(プログラミング規則上は)規則(制限)されていない事でも、Javaプログラムではこのような書き方の方が望ましいという考え方(主張)です。
Java主義に反せずプログラムを書けば、オブジェクト指向やJavaプログラムとしては綺麗なソースで
他のプログラマなどのプログラムを見る人が理解しやすかたり見やすいという意味です。「綺麗なソース」という表現を使っていますが、この表現は一般的に使われており良いソースの事やプログラム全体が良いプログラムの事を表しています。

1-4.ダウンロード及びインストール
(1)URL(http://developers.sun.com/downloads/top.jsp)に別ウィンドウ(URLのリンク上で右クリックして新しいウィンドウを選びます)でアクセスし、「Java SE」の「Java SE Development Kit (JDK) 6 」又は「Download」を押下するとページが遷移します。

(2)「Java SE Downloads」ページが表示されている事を確認し、「JDK 6 Update 6」にある「Download」を押下します。

(3)「Java SE Development Kit 6u6 First Customer Ship」ページが表示されている事を確認し、「Select Platform and Language for your download:」の「Platform:」と「Language:」を選択します。
Platformは、Windowsなら「Windows」を選択しLanguageは「Multi-language」のままにしておいて、「I agree to the Java SE Development Kit 6 License Agreement」のチェックを押下します。
「Continue」を押下するとページが遷移します。

(4)「Download Java SE Development Kit 6u6 First Customer Ship for Windows, Multi-language」が表示されている事を確認し、「Windows Offline Installation」の「jdk-6u6-windows-i586-p.exe 」を押下するとダウンロードされます。

(5)ダウンロードのファイルを押下するとインストールが始まりますのでウィザードにしたがって進めて下さい。

1-5.Java環境の設定
これから設定を行いますが、対象を「Windows XP」で説明します。
(1)「コンピュータ」アイコン上で右クリックすると「コンテキストメニュー」が表示されますのでプロパティをクリックして下さい。
クリックすると「システムのプロパティ」が表示されます。
「詳細設定」タブを押下し、「環境変数」ボタンを押下すると「環境変数」が表示されます。

(2)表示されたら「ユーザー環境変数」の「新規」ボタンを押下すると「新しいユーザー変数」が表示されるので、「変数名」に「JAVA_HOME」、「変数値」にインストールしたアドレス先を入力します(インストールし
たフォルダのアドレスをコピーするして張り付けるのも1つの方法です)。
インストール先が、「C:\Program Files\Java\jdk1.6.0_06」なら「C:\Program Files\Java\jdk1.6.0_06」とそのまま入力します。
入力できたら「OK」ボタンを押下しちゃんと入力されているか確かめましょう。

(3)次も「ユーザー環境変数」で操作を行いますが「変数」に「Path」があるかどうか確かめてください。
ある場合は「Path」を選択されている事を確認し、「編集」ボタンを押下します。
無ければ「新規」ボタンを作成し「変数」に「Path」と入力します。
「編集値」には、「%JAVA_HOME%\bin;」を入力しますが、すでに入力されている場合は、「;」が無ければ「;」を付け「;%JAVA_HOME%\bin;」と入力してください。
後は、「OK」ボタンを押して「システムのプロパティ」を終了する所まで進めてください。
その後に、パソコンを再起動して次に進みましょう。

1-6.Javaを動かしてみる
(1)「スタート」メニューの「すべてのプログラム」から「アクセサリ」の「コマンド プロンプト」をクリックします。
「コマンド プロンプト」に「javac」と入力し「Enter」キーを押して下にずらり表示されれば設定が成功です(正常に動作した方は(3)へ)。

使い方: javac <options> <source files>
使用可能なオプションには次のものがあります。
  -g                         すべてのデバッグ情報を生成する
  -g:none                    デバッグ情報を生成しない
  -g:{lines,vars,source}     いくつかのデバッグ情報だけを生成する
  -nowarn                    警告を発生させない
  -verbose                   コンパイラの動作についてメッセージを出力する
  -deprecation               推奨されない API が使用されているソースの位置を出力する
  -classpath <path>          ユーザークラスファイルおよび注釈プロセッサを検索する位置を指定する
  -cp <path>                 ユーザークラスファイルおよび注釈プロセッサを検索する位置を指定する
  -sourcepath <path>         入力ソースファイルを検索する位置を指定する
  -bootclasspath <path>      ブートストラップクラスファイルの位置を置き換える
  -extdirs <dirs>            インストール済み拡張機能の位置を置き換える
  -endorseddirs <dirs>       推奨規格パスの位置を置き換える
  -proc:{none,only}          注釈処理やコンパイルを実行するかどうかを制御します。
  -processor <class1>[,<class2>,<class3>...]実行する注釈プロセッサの名前。デフォルトの検出処理をバイ
パス
  -processorpath <path>      注釈プロセッサを検索する位置を指定する
  -d <directory>             生成されたクラスファイルを格納する位置を指定する
  -s <directory>             生成されたソースファイルを格納する場所を指定する
  -implicit:{none,class}     暗黙的に参照されるファイルについてクラスファイルを生成するかどうかを指
定する
  -encoding <encoding>       ソースファイルが使用する文字エンコーディングを指定する
  -source <release>          指定されたリリースとソースの互換性を保つ
  -target <release>          特定の VM バージョン用のクラスファイルを生成する
  -version                   バージョン情報
  -help                      標準オプションの概要を出力する
  -Akey[=value]              注釈プロセッサに渡されるオプション
  -X                         非標準オプションの概要を出力する
  -J<flag>                   <flag> を実行システムに直接渡す
のように表示されれば成功です。

(2)「'javac' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と表示された場合は、「Java環境の設定」を再確認してください。
まずは、「コマンド プロンプト」で「cd %JAVA_HOME%」と入力し、エラーが出ないか確認してください。

(3)正しく動いたら、「Sample1_2_1.java」を大文字と小文字を間違いないように入力しファイルを作成してください(「テキスト ドキュメント」(メモ帳)又はテキストエディタなら何でも結構です)。

Sample1_2_1.java
public class Sample1_2_1 {
    public static void main(String[] args) {
        new HelloWorld().view();
    }
}

class HelloWorld {
    public void view() {
        System.out.println("HelloWorld");
    }
}
  

 入力できたら「コマンド プロンプト」に「javac Sample1_2_1.java」と入力し、エラーが表示されず何も起きなかったら成功です(フォルダにSample1_2_1.class及びHelloWorld.classの2つが作成されます)。
エラーの場合は、よく上記のSample1_2_1と比べて見てください。
特に、大文字と小文字を注意。
「()、{}、[]」又は「;」の記入忘れも注意。

 この作業をコンパイルといい、この時のエラーをコンパイルエラーといいます。
コンパイルは、上記のSample1_2_1をコンピュータが理解できるように翻訳してくれます。
翻訳ができた所で「java Sample1_2_1」と入力するとその下に、「HelloWorld」が表示されます。

ここまでで分からない事がありましたら、コメントで質問をお願いします。

 2回目はプログラムの説明から入ります。

参考引用したWeb
KMG プロ3ゼミ Java入門講座 単位1 1時間目
KMG プロ3ゼミ Java入門講座 単位1 2時間目

参考Web
Java - Wikipedia

いらない? Windowsキー

|

皆さんは、何かのキーと間違えて[Windows]キーを押してしまい、
[スタート]メニュー一覧が開き作業が止まってしまった事はありませんか。

私は、[半角/全角]キーと間違えて[F1]キーを押してしまい、
ヘルプ画面が表示されてしまう、次ぐらいに良くやります。

そんな、作業を止めてしまう迷惑な[Windows]キーですが、
あまり知られていない、便利な機能が色々あります。
今回は、そんな[Windows]キーで特に使い勝手が良い二つの機能について記載します。

・ディスクトップ表示機能 [Windows]+[D]キー押下

 ウインドウを10個ぐらい開いて作業を行っている時に、
 ディスクトップにあるアイコンをクリックしたい、
 だけど、そのアイコンをクリックするのに、
 開いたウインドウを移動させたり閉じたりするのは、
 メンドクサイと思った事ありませんか?

 そんな時に[Windows]キーの登場です!!

 [Windows]+[D]キーを押すと、今まで開いていたウインドウが最小化され、
 ディスクトップが表示されるではないですか!! 
 これで、ウインドウをいくつ開いても、
 ディスクトップアイコンを押すのに面倒な作業がなくなりますね。
 ※もう一度[Windows]+[D]キーを押すとウインドウが元に戻ります。

・マイコンピュータ表示機能 [Windows]+[E]キー押下

 マイコンピュータウインドウを開く時、一般的にはスタートメニュー一覧を開き、
 マイコンピュータを選択するか、ディスクトップにあるマイコンピュータアイコンをクリックしますが、
 その時に選択するメニューやアイコンが沢山あった場合、
 マイコンピュータを探すのがメンドクサイと思った事ありませんか?
 
 そんな時に[Windows]キーの登場です!!
 
 [Windows]+[E]キーを押すと、1アクションでマイコンピュータウインドウが開くではないですか!!
 これで、スタートメニュー一覧やディスクトップでマイコンピュータを探せなくても、
 困る事はありませんね。
 ※PCの環境や、CPUの使用率によっては、マイコンピュータウインドウが開くまでに時間が掛かりますので、
  開かないからと言って、[Windows]+[E]キーを何回も押してしまうと、
  押した分マイコンピュータウインドウが開いてしまうので、注意してください。
  
Windowsキーの便利な使い方は如何でしょうか?
面倒な作業が減るだけではなく、作業効率も上がるので覚えておいて損はarimasenn

。。。

おっと!![Enter]キーを押そうと思ったら、[F9]キーを押してしまいました。。。

DJUnitを使って単体試験をする

|

今回はDJUnitを紹介いたします。

JUnit自体はだいぶ前から単体試験などで利用されていますが、Eclipse+DJUnitによってさらに入念な単体試験が可能になります。

単体試験の大まかなポイントとしては以下のように私は考えています。
・想定される条件下でプログラムが意図した通り実行されるか
・すべてのコードが最低一度は実行されているか
・想定外のパターンではどうなるか

DJUnitでは2番目のテストで実行されたかどうかを視覚的に捉えることに重点が置かれています。
引数がゼロかどうかの簡単なサンプルプログラムを作成して実行してみます。

DJUnitを使って単体試験をする.JPG 画1 引数が0の時のみのテストプログラムを実行したときのテストされたプログラム

DJUnitを使って単体試験をする2.JPG 画2 その時のDJUnitのカバレッジ・レポート

図1ではゼロ以外のメッセージ出力の部分がまだテストで通らなかったことが警告として表示されています。
画2ではソースの80%がテストで実行されたことがわかります。

では引数にゼロ以外を入れてテストし直すと

DJUnitを使って単体試験をする3.JPG 画3 引数0と引数0以外をテストしたときのDJUnitのカバレッジ・レポート

ソースのテスト実行が100%になりました。
このように見た目の警告を消すようにテストプログラムを作成するだけでプログラムの一通り実行させ、単体レベルでの不具合を発見できるようになり、「せっかくJUnitを導入しテストしたけど単体試験漏れが見つかってしまった」なんてことが少なくなること間違いありません。

プログラミング入門書を一通り勉強して「さて次は何をやれば良いんだろう?」と悩んでいる方はいませんか?
そんな方はぜひ「ソースコードを読む」という事に挑戦してみてください。
と、言ってもすぐには難しいと思うので私が実践している方法を紹介してみます。


1. どのソースコードを読むか?
 私は2種類読んでいます。
 1つはオープンソースプロジェクトのソースコードです。
 おすすめはglibcやlinuxのコマンドのソースコードです。
 これらを読むと言語だけでなく、周辺技術の勉強にもなりますので是非読んでみてください。 
 もう1つは過去に自分が書いたソースコードです。
 自分で書いたのに、読みづらいソースコードになっています。
 この "読みづらい" というのが良いところで、どうすれば読みやすいソースコードを書けるようになるかの勉強になります。


2. どうやって読むか?
 規模にもよるのですが、決して最初から1処理ずつ読まないでください。
 恐らく途中で分からなくなって嫌になってしまいます・・・。
 重要なのはデータ構造に着目する事です。
 中にはデータ構造が理解出来ると大体全体の流れが予想できてしまうソースもあります。


これらが私が実践している方法です。
恐らく、いくつか読んでいくと読みやすいソースコードの共通点に気づいてくると思います。
そこに気づいて実践し始めた時が、本当のプログラミングの勉強の始まりなのかもしれません。

正規表現

|

正規表現って皆さん使っていますでしょうか。
SE、プログラマであれば[正規表現]をまったく知らないということは無いと思いますし
プログラムの勉強をしている学生さんでも聞いたことぐらいはあるでしょう。
今から書く話も、知っている人は当たり前のように使っていることです。
しかし、知らないなら格段に作業効率が上がる(かもしれない)内容です。

文字列を処理するプログラムで文字列内の検索・置換に正規表現を使うことは良くありますが
今回の「使っていますでしょうか」は、プログラム内ではなく、プログラムを作る事そのものに利用していますか?という観点です。

プログラムを書く時、何かしらのエディタを使っていると思います。
普通のテキストエディタかもしれませんし、EclipseなどのIDEかもしれません。

そういったエディタには大概検索・置換の機能が付いています。
その「検索・置換」で正規表現が使えるエディタでのお話です。
(Windowsのメモ帳では正規表現使えませんでした。。)


私はjavaをメインに仕事をしているのでJSPを書くことも良くあります。
JSPを書く時、イメージとしてまず先にHTMLを作成したりします。
で、そのHTMLを修正してJSPにする場合、Strutsタグを利用したければ

<input type="text" name="id" size="10" maxlength="10">
というタグを、
<html:text property="id" size="10" maxlength="10"/>
という風に変換したいわけです。

1個や2個なら手で修正してもいいのです。普通1画面にそこまで大量のinputタグは書かないですし。
でもそれが1画面に5~10個あって、さらに複数のHTMLを変換しなければいけない場合、手で修正していくのは大変ですよね。

そんな時に、正規表現を使って一気に変換したら楽ですよ。ということです。


正規表現を使わない置換を使う場合
<input type="text" name="

<html:text property="
に置換します。

それだけで大体終わっているようにも見えますが、タグの終端の"/"が抜けていてエラーになってしまいます。
さらに、type="text"にしか適用できず、ラジオボタンやsubmit等は別途置換をする必要があります。

では、正規表現を使うとどこまで出来るのでしょうか。


<input type="([a-zA-Z]+)" name=("[a-zA-Z0-9_-]+") (.*)>

<html:\1 property=\2 \3/>
に置換します。

どうでしょう。
タグの最後に/も入っていて、type="radio"でもtype="submit"でも置換できるではないですか!

まあ、上記の例では
・inputタグの属性が type="" name="" の順番に出てくる
・inputタグの終端に/がついていない
・Strutsタグに変換できない属性がついていない
などの条件があったりするのですが・・・
たとえこの条件をクリアしていなくても正規表現の工夫次第である程度対応可能です。
HTML作成の段階でタグの記述に一定の法則があれば問題ないはずです。

さらにファイル内文字列検索ツール(windowsならYokkaGrepとか)で正規表現による置換が使えれば、複数ファイルを一気に置換できるでしょう。

もちろんJSPだけではありません。
ログファイルから必要な情報を抜き出したり、エクセルのセルをエディタにコピペ(タブ区切りになる)してそれを置換してSQLをつくったりと、いろいろな使い方ができます。
用途によっては、正規表現を知らない人なら1時間もかかる作業が1分ぐらいで出来たりします。
プログラミングに関わらず、事務的な作業でも有用かもしれません。

初めは自分の検索したい文字列を正規表現で表すのが難しいかもしれませんが、慣れれば作業効率が上がること間違いなしです!

ここでは正規表現の細かい仕様は書きません。OSやエディタごとに微妙に違ったりしますので。
現に<html:\1 property=\2 \3/>の \1 \2 \3 という表現も、ツールによっては $1 $2 $3 だったりします。

この記事を見て、正規表現覚えてみようかな~と思った方がいらっしゃったら
[正規表現]で検索すれば解説サイト等も出てくるので、そこを見ながら試してみてはいかがでしょうか。

やっぱりvi

|

先日、mtaneda君の「道具にこだわろう(1) エディタ編前編」と言う記事で、Emacsの紹介がありましたね。
Emacsも人気があるエディタですが、私が最初に使ったのはviで、それ以降、現在までviを愛用しています。
当時は(10年以上前)、unix系での開発がメインだったと言うのもありますが、
飽きっぽい私が10年以上も使い続けていると言う事は、やはり、良いエディタなんだと思います。
そんなviの操作を紹介したいと思います。

まずは、mtaneda君の記事の事例1をviでやってみたいと思います。

「"ABCDEF" という文字列を 256回貼り付けたいとき」

ABCDEFと言う文字列が入力されていて、カーソルが行末にあり、
[Esc]キーを押してコマンドモードになっていると言う状態から始めます。

1. [0] キーを押す。
意味: 文字列 "ABCDEF" を選択するためにカーソルを行頭に戻す。


2. [y$] キーを押す。
意味: カーソル位置から行末までを記憶する。


3. [$] キーを押す。
意味: カーソル位置を行末に移動する。


4. [256p] キーを押す。
意味: 先程記憶した文字列 "ABCDEF"をカーソル位置の次から256回貼り付ける。


結果:
ABCDEFABCDEFABCDEF...(以下、254個省略)

ついでに"ABCDEF"と言う行を256回貼り付ける場合も書いてみます。

ABCDEFと言う文字列が入力されていて、カーソルが次の行の行頭にあり、
[Esc]キーを押してコマンドモードになっていると言う状態から始めます。

1. [1G] キーを押す。
意味: 文字列 "ABCDEF" を選択するためにカーソルをファイルの先頭に戻す。


2. [yy] キーを押す。
意味: カーソル行を記憶します。


3. [256p] キーを押す。
意味: カーソル行の下に"ABCDEF"を256行貼り付けます。


結果:
ABCDEF
ABCDEF
ABCDEF
...(以下、254行省略)


如何でしょうか?
viも結構簡単ですね。

viは編集モードとコマンドモードと言う2つのモードに分かれているのが特徴的ですね。
非常に画期的なアイデアだと思います。
そのお陰でコマンドを入力する際に[Ctrl]キーを押しながらと言う事をしなくて済みます。
その反面、初心者には使い辛い、理解し辛いと言う事があるのではないかと思います。

「最初は使い辛いエディタだが、慣れると最高のエディタ」と言うのがviだと、私は思います。

プログラミング言語を取得するには3つの壁があります。

1.「HelloWorld」出力の壁
2.言語特有の壁
3.30行「50行」の壁

の3つです。

★1を詳しく説明すると、2つあります。
●言語自体を知る
その1つが、コンパイルをして「HelloWorld」を出力する前の壁です。
それは、その言語自体を知る事です。プログラミング自体を知らない人も含まれますので。
私自身がプログラミングそのものを知ったのは高校生になってからで、その言語自体を知る壁です。
一般の人には、これが最大の壁でしょう。
これを克服するには、高校、専門学校又は大学の授業で若しくはプログラミングに興味を持ちネットで検索するかでしょう。
現役のプログラマでさえ、一般的に知られていない言語ですとそれが一番の壁かもしれません。

●入門者には複雑な設定
もう1つが、入門者又は初心者に多い、コンパイラの入手とその設定です。コンパイラを入手するには、初めてプログラミングする人にはハードルの高い作業です。
例え書籍でCD-ROM等から取得できるとしてもたまたまパソコンが不調でうまく設定できな出来なければその言語自体に悪いイメージが付きます。
ネットからの取得の場合ですと書籍とバージョンが違ったり、古すぎてWebが切れたりした場合は、最悪です。
何度も設定して慣れている人には、バージョンが違ったり書籍のURLが切れていても対応できますが、初めての人には荷が重い作業です。

★2.言語特有の壁
2は、Cなら「ポインタ」と言うように、言語独自で難しいとされている箇所の事です。
1つでも言語を取得していれば全体を通して学べば、後から分かるだろうとか、実際に試して使う事が出来るかもしれない。
実際に試すとは、そこそこのプログラムである。初心者ならこの時点でそこそこのプログラムが書ければ苦労はしない。
ここであきらめてしまう人も多いだろう。
仕事とは違い趣味で行っている人は特にあきらめたからといって直接の被害は無いからです。

★3.30行「50行」の壁(長いプログラムへの謙虚)
3は、学生向きに書きますで紹介した通りです。
さらに補足すると、私自身が経験したように長いプログラム(ここでは100行以上)はまだ早いと思う事です。
私自身も挑戦していたのです、少しでも分からない事があればまだ勉強が足りないと思うからです。
それでまた、最初に勉強した参考書に近い書籍又はポインタのように弱点を克服する書籍を買い長いプログラムが掲載されている参考書を後回しにしてしまうのです。


次回は、この3つの壁を仕事上と自己学習での違いを紹介し各対応策を書きます。
お楽しみに!!

プログラムを3倍速く書く方法、それは。。。

「通常の3倍速く手を動かす!!」

。。。

と、とあるマンガ家がマンガを速く描くコツとして、
冗談で言っていたことがありました。

。。。

と、ここでブログを終りにしてしまいますと、
「くだらない事を書くな!!」と社長に怒られてしまうので、
ここからが本題です。

一分間に200文字タイピングする人が、
一生懸命に手を速く動かしても一分間に600文字タイピングするのは無理な話です。
仮に出来たとしても長時間維持するのは大変ですし、疲れてしまいます。

それではどうすれば、プログラムを3倍速く書く事が出来るのか?

それは、プログラムを作成するにあたっての作業手順を減らせばいいのです!!

ということで、今回は手順を減らす方法で最も基本的な「Ctrl」ボタンについて記載します。

「Ctrl」ボタンは、あらゆるキーと組み合わせることで手順をへらせる便利なボタンで、
例えば、一般的に文字をコピーする場合、コピーしたい文字をドラック、
マウスの右をクリックし、表示したメニュー一覧の「コピー(C)」選択してコピーを行います。

手順で言いますと、

1、 コピーしたい文字をドラック
2、 マウスの右をクリック
3、 メニュー一覧の「コピー(C)」選択

と3つの手順を行います。
 
これを「Ctrl」ボタンを使って行うと、コピーしたい文字をドラック、
「Ctrl + C」ボタンを押す、これでコピー終了です。

手順で言いますと、

1、 コピーしたい文字をドラック
2、 「Ctrl + C」押下

と「Ctrl」ボタンを使うと3つの手順が、2つの手順ですんでしまうのです!!

。。。

あまり変わらないじゃないかと思う方がいるかもしれません。
それでは、コピー&ペースト(貼り付け)で考えてみましょう。

一般的にコピー&ペーストの手順は、

コピー
1、 コピーしたい文字をドラック
2、マウスの右をクリック
3、メニュー一覧の「コピー(C)」選択

ペースト
4、 ペーストしたい箇所をクリック
5、 マウスの右をクリック
6、 メニュー一覧の「貼り付け(P)」選択

と6つの手順で行うのに対し、「Ctrl」ボタンを使うと

コピー
1、 コピーしたい文字をドラック
2、 「Ctrl + C」押下

ペースト
3、 ペーストしたい箇所をクリック
4、 「Ctrl + V」押下

4つの手順で出来てしまいます!!

これでも、あまり変わらないと思う方がいるかも知れませんが、
「塵も積もれば山となる」の考えでコピー&ペーストを10回行うと、
20の手順が省略されるので侮れません。

また、ファイルのコピー&ペーストも同じ手順で出来ますし、
「Ctrl」ボタン使って出来る処理の組み合わせによっては、
一般業務の作業の高速化も出来ますので覚えておいて損はありません。

下記に「Ctrl」ボタンを使って出来る基本的な処理を記載します。

・絶対に覚えて置くべき処理
「Ctrl + C」 :コピー
「Ctrl + V」 :貼り付け
「Ctrl + X」 :切り取り

・覚えておいて損はない処理
「Ctrl + Z」 :元に戻す
「Ctrl + S」 :上書き保存
「Ctrl + A」 :全て選択
「Ctrl + F」 :検索

今回は、見る人が見れば当たり前の事を書いていると思いますが、
実際に「Ctrl」ボタンを使った処理を知らない方や、
知っていても「Ctrl」ボタンを使わない方が多いと感じています。

私も、入社するまで「Ctrl」ボタンの使い方を知りませんでしたし、
知った後でも「コピーなんて、どんな方法でも出来ればいいや」と
「Ctrl」の存在を重要視していませんでした。
マウス右クリックでコピーをしようとすると先輩に「Ctrl」ボタンを使えと怒られたものです。

最初は、メンドクサイと思うかも知れませんが、
一度身につけてしまうと断然に作業効率が上がりますので、是非使ってください。

映画ベストキッドでミヤギがダニエル青年に「ワックス掛ける、ワックス取る」と反復させることで、
防御の基本を教えていましたが、
私も先輩から、「マウスドラック、Ctrl + C」、「マウスドラック、Ctrl + X」と反復させられたことは、
良い思い出です。。。

プログラマのお仕事

|
プログラマのお仕事と聞いて、一番に思い浮かべる事はなんでしょうか?

プログラミング?

はい、正解です。
プログラマのお仕事と言えば、もちろんプログラミングです。
クールでエレガントなコードを書いて、今日も朝から晩までコンパイラとTogetherしようぜ!
と言いたいところですが、実は仕事全体に対する作業でプログラミングの閉める割合はさほど多くはありません。
どのくらいの割合かというと、だいたい50%くらいでしょうか。
さらに、経験年数が上がるほどその割合は少なくなって行くように思います。

では、プログラミング以外にどんなお仕事があるかというと・・・

打合せ
 打合せなんて時間の無駄だ!という意見を良く聞きます。
 確かに、なんの結論も出て来ない長時間の打合せは無駄かもしれませんが
 やはり意識合わせや意思決定の場として考えると、打合せは欠かせません。
 また、雑談からも良いアイディアや新しい仕事が生まれたりするのも事実です。

詳細設計
 プロたる者「こんな感じの仕組みで」というようなアバウトな要求にも
 応えなければなりません。複数のプログラムや装置が連携して動作するシステムの
 通信プロトコルを設計したりなど、仕様の設計に関わる事も少なくありません。
 他にも、スタートラインが「技術的に可能かどうか検証して欲しい」という場合も
 あります。

テスト
 バグはプログラマの恥。徹底的にテストを行ってバグを退治します。
 最終的なテスト項目は数100件〜1000件を超える事もあります。

ドキュメント作成
 通常、ソフトウェアやハードウェアを購入すると、説明書が付属していますね。
 同じように作成したプログラムの取扱説明書などのマニュアル類を作成する
 必要があります。
 
セッティング
 多くの場合、現地へ搬入されたサーバにOSやプログラムをインストールしたり
 初期設定を行います。規模が大きかったりミッションクリティカルな場合は
 本番稼働した後、数日間、24時間態勢で監視を行ったりもします。

アフターサポート
 プログラムを作って、はい、おしまい。という事はありません。
 納品後であっても問い合わせがあったり、万が一不具合が見つかれば
 改修作業を行わなかればなりません。また、そもそも仕様に不備があり
 なんとかプログラム側で対応を。。とお願いされることもあります。

お客さんによって多少の差はありますが「プロ」のお仕事として働くからには
プログラミング以外にも、こういった作業を熟さなければなりません。
ただ単にコードを書くだけでは、その作業はプログラマではなくコーダの仕事であり
いまや日本国内で行う作業では無くなっています。

また、日本シー・エー・ディーでは、プログラマのお仕事としてとても大事な
任務があります。それは・・・

お仕事を取ってくる事

です。基本的に自分の(やりたい)仕事は自分で取って来ます。
そのためには、日頃からお客さんと良い信頼関係を築いておかなければなりません。
では、良い信頼関係を築くにはどうしたら良いでしょうか?
1つは、完璧なプログラムを仕上げて、その品質で評価を得るという方法があります。
これはプロとして働いているからには当然のことですね。
そしてもう1つは、お客さんが困っている時には気持ちよく相談に乗ってあげたり
自分の持ち分以外の事でも助けてあげる事です。
ひとまず細かい話は置いておいて、困っている時はお互い様という精神でいれば
きっと強い信頼関係が生まれるはずです。
私の場合、ドキュメントの作成はあまり好きではないので、プログラムに関しての
無理を聞く代わりに、ドキュメントを免除してもらったりなど、お互いにメリットのある
交渉をすることがあります。

どうでしょう、こういった作業をメンドクサイ・不幸だと感じますか?
人それぞれ考え方は違いますので「それは営業の仕事だろう」という人もいるでしょう。
私はこのような機会が与えられているのは非常に幸運なことだと考えています。
いまこうして働いている大きな理由の一つでもあります。
巨大プロジェクトなど大企業でしか出来ない事がありますが
同じように、小さなベンチャー企業でしか出来ない事もあるのです。
例えば、私はこの春から製品の企画・開発・販売まで全てに挑戦する動きを始めています。

私の職業ですか?

それはもちろん、プログラマです!

JSPでVMの制限に出会う

|

Strutsベースでの開発での不具合対応のヘルプとして対応しているときのことです。


機能追加でボタンを画面に一つ追加したところ(logicタグでenable、disableのボタンを配置)、java.lang.ClassFormatError: fooJspClass (Code of a method longer than 65535 bytes)というエラーが!
直訳すると「メソッド一つのコードは64kbyteを越えている」とあり、なぜ64k?と思い調べてみるとJava VMの制限でclassファイルに変換された時、1メソッドのコードが64kbyteを越えてしまうとclassファイルにコンパイルはできているが実行できない模様。

具体的に何でこんなにコード数を増やしているのかとJSPが一度Javaファイルに変換されたファイルをworkフォルダ以下で見ていると

1.JSPの_jspService()メソッドでout.write()でJSPに書かれているHTMLの書式をすべて書いている。インデントのためのタブ、改行、コメントなどすべてがout.write()で書かれている。

2.2ヶ月分の日付の情報を入力するフィールドが存在しており、それがList型で取得しておらず、一つ一つFormの変数として作り込まれており、繰り返しで対応できるところが62回(31日×2)変数名を変えてJSPに書き込まれており、これによってコード数が跳ね上がっている。

と原因がわかりました。

対応方法としてJSPの_jspService()メソッドはJSPファイルをコンパイルしたときにできるメソッドなのでメソッドを複数に分けることもできず、かといってほとんどテストが終わっている画面なので仕組み自体を変えて再テストというのは時期としてよろしくなく、タブや改行、コメントを省けるところは省いて今回必要な機能追加してみて64kの制限を超えないようにと対応しました。

とても内容が多いHTMLを書くというのはそんなのある機会ではないのですが、どうしようもなく作成することがあるかもしれません。日頃はstrutsのtilesなどでJSPを分割しておくのが予防策にはなるのではないでしょうか。

情報処理技術者試験を受験の皆さん、お疲れ様です。

試験が終わりほっとしているかもしれませんが、就職活動中の学生は本格的に動かないといかない時期でもあります。
今日までは、情報処理技術試験を目指して勉強していたと思いますので、言い訳ができたかもしれません。私自身も本格的に動き始めたのは試験過ぎからでした。

そこで、私自身が昨年の実体験を基に資格と就職の関係について、就職活動をしていた側から話せればと思います。

試験を受けて合格かどうか失敗かもしれませんが、殆どの人は今もっている資格で勝負する事になるでしょう。基本情報は1ヶ月後ですが、ソフ開等の資格になると2ヵ月後に合否を知る為です。
私自身は、4月にソフ開を受験し、6月に合格を知った為、基本情報等の資格で会社にアピールしました。

一般的なIT関連会社では、ソフ開以上の資格であればまず書類審査で落とされる事は無いといわれています。当社の事につきましては私が記述しても無責任になる為記述しません。IT事業部の中でもチームが存在し、チームごとに採用条件が違う為でもあります。この辺は、チームリーダーからもしかしたら説明があるかもしれません。。。

私は、就職最前線の記述でありました専門学校の出身で、ここで説明を受けた会社を中心に就職活動しました。当社を知ったのもこの説明会です。

昨年の印象からすると、資格に関してはそれほど聞かれませんでした。それは、基本情報を持っているから実力は取り合えず言いとして、他を聞きたかったからかもしれません。

当社の場合はどうであるかと言いますと、会社訪問に行く事が初めでした、その時は社長等からの説明がありました。当時まだ、WEB-DBチームと言うチームは存在しなかったのですが、私の場合はWEB-DBに興味があった為、Javaの事に関して言われました記憶があります。その時には、基本情報よりもSJC-Pの方が有利だったのかもしれません。

なぜ、新人の私がこのように、当社の事を説明するかと申しますと、社長が入社式等に話を伺ったからです。それは、若手の社員、特に新入社員ほど積極的に後輩を見つけよ。それは、後輩が出来なければ一番困るのは自分と言う事なのでしょう。と言う事もあり、WEB-DBチームの一員として少しアピールさせていただきます。先程のように私には何も権限がありませんのでWEB及びDBに興味がある方が参考になるよう書かせていただきます。

WEB-DBチームは、Javaを中心とした仕事が多いようです(入社した為、このような表現になってしまいます)。私自身もアルバイトで約1年間社内システム等をプログラミングしましたが、すべてJavaです。チームの先輩又は上司からは技術的なことだけではなく、社会人としてのマナーも指摘して貰っています。私の場合はどちらかと言うと技術より社会人としての常識、特に敬語等の話し方、書き方が注意されました。質問をすれば技術的なことだけではなく、色々な事も教えてくれます。私自身も技術が向上したと思える一年でしたので、合同企業説明会でも説明したのですが、技術はもちろんですが、情熱を持っている方にも期待を裏切らないでしょう。

ぜひ、日本シー・エー・ディー IT事業部を、WEB-DBチームを気にかけてもらえばと思います。

 明後日は情報処理技術者試験ですね。
来年から改正が行われると言う事で明後日の試験には全力で挑戦して欲しいです。私は、基本情報には一発で合格したのですが、ソフ開には何回も苦しみました。そこで私が合格するのに貢献した直前攻略を大公開します。説明は、ソフ開合格用の為説明が違うのではないかと思われるかもしれません。その点はご勘弁下さい。

 ソフ開の得点源に繋がる箇所は、以下の点と思われます。
1.待ち行列
2.稼働率
3.SQL
4.埋め込みSQL
5.暗号方式
6.OSI基本参照モデル

 以前に作成した情報ですので、古い情報等があると思いますがお役に立てれば幸いです。

★OSI基本参照モデル

 アプリケーション層で、アプリケーションを決める。例えば、FTP及びHTTP等。
 プレゼンテーション層で、文字コードを決める。インターネットがJISな為WinからUNIXに送る場合は、シフトJISからJISに変え、JISからEUCに変換する。これがプレゼンテーション層の役割。それから通信データを暗号化する機能もある。
 セッション層で、コネクションを確立し、通信方式を決める。通信方式は半二重通信又は全二重通信に決める。
 トランスポート層で、パケットを分割(送信側)及び復元(受信側)する。パケットが紛失した場合は、再送し、信頼を高める。
 ネットワーク層で、相手までの通信経路を決定する。
 データリンク層で、フレームのシーケンス制御や誤り制御、フレームに誤りが発生した際の再送制御などを行う。
 物理層で、電気信号として、やり取りする。そのためにデジタル信号を電気信号に、電気信号をデジタル信号に変換する。

★待ち行列

 ラムダ=平均到着率(件/秒)
 ミュー=平均サービス率(件/秒)
 平均到着間隔=1/ラムダ(秒/件)
 平均サービス時間=1/ミュー(秒/件)

 p=ラムダ/ミュー=ラムダ×平均サービス時間

 Wq=p/(1-p)×平均サービス時間
 Ww=Wq+平均サービス時間

 平均サービス時間は、大体問題に示されているので忘れた場合はそこから導きます。平均サービス時間は、時間という言葉から秒/件と理解する。つまり、ラムダ、ミューは、その逆の件/秒になると覚えれば間違えない。
 p(ロー)は、利用率を求めるのだから、1秒間に来る、例えば人なら、人数をサービスする時間で割る事によって求まる。それが利用率又は使用率(利用率よりも使用している割合と覚えても大丈夫)。
 p/(1-p)は、待っている人の数です。Wq(平均待ち時間)は、待っている人の数に平均のサービス時間をかけることによって求めます。平均サービス時間を待っている人にかけるということは、すべて待っている人がサービスを終えた時間ということになる。
 Ww(平均応答時間)は、それに自分もサービスしてもらった時間を足せば良い。


★稼働率

 稼働率=MTBF/(MTBF+MTTR)

 (1)直列システム
   稼働率=X1×X2・・・・Xn
 (2)並列システム
   稼働率=1-(1-Xn)ⁿ
 (3)並列システム(m out of Nシステム)
   N個の部品のうち、m個が正常なら稼動するシステム。

   4 out of Nシステムの場合。
   1.すべてが故障している確率
     =(1-X)⁴
   2.4台のうち3台が故障している確率
     =₄C₁(1-X)³ ×X=4(1-X)³X
    よって、1-{(1-X)⁴+4(1-X)³X}
     =3X⁴-8X³+6X²


★SQLキーワード一覧

番号 コマンド 読み方 説明
1 ALTER オールト 表,定義域を変更する。
2 ANY エニー  
3 ASC   昇順
4 AUTHORIZATION オーソリゼーション 認可職別子,許可職別子。
5 BETWEEN ビットウィーン データ値の範囲の指定をする。
6 CHECK チェック 検査制約。
7 CLOSE クローズ カーソル操作を終了する。
8 COMMIT コミット データベースに対して行った更新操作を確定する。
9 CREATE クリエイト スキーマ,表,ビュー,定義域を定義する。
10 DECLARE デクレア 操作対象とする表を設定し,カーソルを割り当てる。
11 DEFAULT デフォルト 規定定義。
12 DELETE デリート 表に行を削除する。
13 DESC   降順
14 DISTINCT デシティンクト 重複を指定しない。
15 DROP ドロップ スキーマ,表,ビュー,定義域を削除する。
16 EXISTS EXISTS データ値の存在(不存在)の,検査の指定する。
17 FETCH フェッチ カーソルの位置にある行の値を取り出し,次の行に進める。
18 FOREIGN KEY フォーリンキー 外部キー制約。
19 GRANT グラント 表に対する操作権限を定義する。
20 GROUP BY グループ バイ グループ化にする
21 HAVING ハビング グループ化した後の条件
22 INSERT インサート 表に行を追加する。
23 LIKE ライク 文字列のパターン照合の指定をする。
24 OPEN オープン カーソル操作を開始し,カーソルを1行目に位置付ける。
25 ORDER BY オーダー バイ 並び替え
26 PRIMARY KEY プライマリーキー 主キー制約
27 REFERENCES リファレンス 参照
28 REVOKE リボック 表に対する操作権限を削除する。
29 ROLLBACK ロールバック データベースに対して行った更新操作を取り消す。
30 SELECT セレクト 表より,行,列のデータを抽出する。
31 SOME サム ANYと同じ
32 UNIQUE ユニーク 一意性制約。
33 UPDATE アップデート 表に行を変更する。
34 WHERE ウェアー 条件
35 WITH CHECK OPTION ウジ チェック ポットオン ビュー表の定義時に、拒否を指定する。

 

★SQLの例

1.SQL-DDL(Data Description Language)

(1)表定義
 CREATE TABLE 社員 (
  社員番号 CHAR(5) NOT NULL,
  社員名   NCHAR(10) NOT NULL,
  性別    NCHAR(1) CHECK(性別 IN( '男', '女' ) ),
  所属番号 CHAR(3),
  PRIMARY KEY(社員番号),
  FOREIGN KEY(所属番号) REFERENCES 所属(所属番号)
 )
(2)ビュー表定義
 CREATE VIEW 表名( 列名 [, 列名...] )
 AS SELECT 列名 [,  列名...] )
 FROM 表名
 [GROUP BY 列名]
 [HAVING 条件]
 [ORDER BY 列名 [ASC] [DESC] ]

2.SQL-DML(Data Manipulate Language)

(1)挿入
 INSERT INTO 会員住所
  VALUES ( 1234,  'A市' )
*CHARなら列名に''をつける。
(2)更新
 UPDATE 会員住所
  SET 住所 = 'A市' 
 WHERE 会員番号 = 1234
(3)削除
 DELETE FROM 会員住所
 WHERE 利用者番号 = 1234


★SQL(埋め込みSQL)

(1)カーソル宣言
DECLARE カーソル名 CURSOR FOR SELECT文

(2)カーソルを開く
OPEN カーソル名

(3)1行の取り出し
FETCH カーソル名 INTO ホスト変数

(4)カーソルを閉じる
CLOSE カーソル名

非カーソルによる操作
(1)検索
SELECT 属性名 [, 属性名・・・]
 INTO ホスト変数
FROM 表名
[WHERE 条件]

EXEC SQL・・・始まり
END-EXEC・・・終わり


★セキュリティ(暗号方式等)

秘密かぎ暗号方式(共通かぎ暗号方式)は、DESが代表。
公開かぎ暗号方式
 受信者の公開かぎで暗号化し、受信者の秘密かぎで復号化する。
メッセージ認証
 改ざんを検出する。メッセージ認証子(MAC)は、秘密かぎ暗号に基づく、ハッシュ関数で生成される。
ハッシュ関数
 ハッシュ関数の特徴
 1.入力データの長さに関係なく出力データは固定。
  (例1)30 % 4 = 2
  (例2)(5 + 6 × 2) % 4 = 1
 2.出力データから入力データを求めることが困難
  (例)X % 4 = 0の場合。
   4の倍数のどれかとなるため困難。
 3.出力データが同じとなる入力データを見つけることが困難

 ハッシュ関数の利用例
 1.送信者側は、ハッシュ関数を使って、MD(メッセージダイジェスト)を作る。
 2.受信側も同じくMDを作る。
 3.送信側がMDを送信し、受信者側がそれを比較する。比較した結果、同じならば改ざんされていない。

 

 SQL文も固有のベンダーではない為、中途半端間が漂いますが、合格当時からの情報なのでこれだけ覚えればSQL関連の問題で満点を取る事も可能です。

最後に私が問題を行った順番をご紹介します。参考になるか分かりませんが、問題1から順々に行う必要が無い事が分かります。試験当日は、どのような内容になるか分かりませんが私が受けた時の問題を参考にします。

問6 データベース
問5 アルゴリズム関連
ここで、約1時間を想定します。最悪の場合は、1時間半かけても頑張って全部解きましょう。
次に自分の得な問題に挑戦しましょう。
私の場合は、セキュリティでした。
残り3問は、適当に解ける問題だけ解きましょう。
私の考えでは、問5及び問6で約6割。得な問題(複数あればなお良い)で出来れば100%。それに応じて残り3問を全部で半分くらい取れれば合格できます。
明日、1日ありますので頑張ってください。

参考URL
ソフトウェア開発技術者試験受験者の為の総合支援ページ

学生向きに書きます

|

 日本シー・エー・ディーに4月から入社したaraiです。技術よりの話よりも高校生などの学生や入門者向けに書こうと考えています。私も高校生の頃からプログラマを目指していたので、何かのお役に立てればと思います。

今回は、最初ですので、簡単な自己紹介と入門者向けに書く経緯を書きます。

 プログラミングになれた人とプログラミング入門者や初心者で違う点があるとすれば、何だと思いますか?私が高校生の頃と今では、参考書の見方が違っていることに、気付きました。それは、仕事などのプロジェクトで参考書を開くのと学習目的で参考書を開くかの違いです。仕事の場合は、実現方法を調べたくて参考書を開くますよね?しかし、学生や入門者は(とりあえず)勉強する為に参考書を開くそうです。一つでもプロジェクトを行った人では、新しい言語を学ぶ時でもこの言語はこの様にするのかと想像して読むのに対して、学生や入門者は何に使うか使用目的が分からず機能だけを学ぶかの違いもあります。

 私の体験談の話をしますと、高校生の頃からプログラミングを始めましたが、一番長いCのソースでも最大50行、平均20行から30行のプログラムでした。趣味で行っていたわけではなく、真剣に取り組んでいました。昔はプログラマの登竜門とも言うべき資格「基本情報」(旧第2種)を三年の4月に取得していましたが、特に違和感は無くひたすら30行のプログラムを書いていました。Windows(Win32 API)の存在は知っていましたが、それは今学ぶには早いと思うことが、私の中では普通でした。

 参考書で勉強することによって、プログラミングの機能は理解できるのですが、習った機能を何に使えればいいか分かりませんでした。今思うと参考書で勉強していると言ってもプログラムをただ写しているだけでした。プログラムを写すだけで先に進めないことを、私は「30行の壁」と呼んで問題にしています。Javaの場合は「50行の壁」の方が適切かもしれませんね。私が考える入門者や初心者が中級者になる為に3つの壁があると思っていますが、「30行の壁」はまさに最後の壁である考えています。最後の壁が最大の難関だと思っています。3つの壁は、後日ブログで書きます。

 

 仕事などのプロジェクトではなくても、例えば卒業研究、卒業研究まだはいなくてもグループでの作業や宿題でも構いません。小さいながらもプロジェクトを行うことで、参考書を開く時に何を使えば実現できるかを調べます。つまり、目的は決まっているが方法が分からない為調べるのです。この違いは大きいです。

私が高校生の頃に「改訂新版 Cプログラミング診断室」という本が再販されました。
この本には、当時プログラマ1年生だった頃の恥ずかしいプログラムとして、相談者がプログラムを投稿している内容が書かれていました。当然それは、50行ぐらいのプログラムではなく、当時の私から見れば手の届かないプログラム内容でした。高校の3年間と仕事での1年間の差はありますが、プログラム経験1年で、こんなに差があるのかと今でもよく覚えています。

 そんな私の思いもあり、現在Web上で、プログラミング入門者の人達の為に、Java入門講座を書いています。
できれば、こちら(KMG プロ3ゼミ Java Java入門講座)にもアクセスしてもらえると嬉しいです。

私も参考書でプログラムを学んでいる時に、これは何の為に学ぶのだろうと思うことが幾度もありました。これは、プロジェクトで与えられた事を実現する為には、どの機能を付けば良いかの逆です。世間にはリファレンス本がありますが、入門者にとっては入門書そのものがリファレンス本と変わらないのです。

火中の栗を拾う

|

先日、以前手掛けたシステムの上位連携でお客様のミスにより問題が発生し、緊急に対策しにいきました。

作業自体は午前中で終わる程度かと思っていたんですけど、昼過ぎに作業が完了後に別の問題が発生。。
NCADとはまったく関係の無い部分だったのですが、一緒にいっていた元受さんを見捨てることはできずいろいろと手を尽くしました。

やった事といえば、そう大したことではなく。DB仕様書を参考に調査用のSQLを発行したり、ソースを見て怪しいところ指摘したり。
まあ、結局19時くらいまで作業することになりましたが、その後はお約束のノミニケーションです。。

その時に元受さんに「いやー助かりましたよ!」「ほかの所はこういうときに協力してくれないだよねぇ」などのお話がありました。。
NCAD基準では「お客さんが困っているときにこそが、アピールチャンス!」って感じなのですが・・
おそらく他社さんは「変なこと言って(やって)、問題が起きたら大変だし、会社から手を出すなっていわれている」なんて事なんだと思います。

たしかに、火中の栗を拾って大やけどする時もあるでしょう。。
でも、「やけどしない様に拾えばいい話」で「拾わない」という選択肢しかない「コンプライアンス」なら必要ないと思うのは私だけでしょうか。。

Windows Server 2003の共有フォルダ

|

先日、Windows Server 2003のフォルダを共有し、
別のマシンからパスワードなしでアクセス出来るようにする必要があったのですが、
簡単に出来なかったので、私が設定した内容を以下に書きます。
(セキュリティを気にする環境ではお勧め出来ません。)

まず、以下の手順でGuestアカウントを有効にします。

1.ローカルセキュリティポリシーを開く。
「コントロールパネル」-「管理ツール」-「ローカルセキュリティポリシー」

2.「セキュリティオプション」を選択。
左側のツリーで、「セキュリティの設定」-「ローカルポリシー」-「セキュリティオプション」を選択。

3.Guestアカウントの有効化
右側のリストで、「アカウント: Guest アカウントの状態」を「有効」にする。

次に共有したいフォルダの設定を変更します。

1.フォルダのプロパティを開く。
エクスプローラ等で、共有したいフォルダを右クリックし、プロパティを選択。

2.共有タブ
プロパティの共有タブを選択し、「このフォルダを共有する」を選択。

3.アクセス許可
「アクセス許可」ボタンを押下。
「アクセス許可」ダイアログの「追加」ボタンを押下。
「選択するオブジェクト名を入力してください」の下に「Guest」と入力。
「名前の確認」ボタンを押下。
「OK」ボタンを押下。
「アクセス許可」ダイアログの「Guestのアクセス許可」で「フルコントロール」を「許可」する。
「アクセス許可」ダイアログの「OK」ボタンを押下。

4.セキュリティタブ
プロパティのセキュリティタブを選択。
「追加」ボタンを押下。
「選択するオブジェクト名を入力してください」の下に「Guest」と入力。
「名前の確認」ボタンを押下。
「OK」ボタンを押下。
セキュリティタブの「Guestのアクセス許可」で「フルコントロール」を「許可」する。
プロパティの「OK」ボタンを押下。

以上で、別のマシンから、上記で設定した共有フォルダへの読み書きが行えました。

DTDとかXML Schemaとか

|

DBの無い環境でのデータ保持や、設定ファイルを作る時などにXMLを利用することがあります。

私は特に設定ファイルにおいて、iniファイルよりXMLにする方が好きなのでよくXML形式の設定ファイルを作成しています。

そんなXMLをプログラムで読み込んだ時
形式チェックにはDTDやXML Schemaを使うと簡単にできますよね。

しかし、慣れていないとDTDやXML Schemaの作り方がわからなかったり、慣れていても面倒臭かったりします。。

そんな時、役に立つツールがTrangです。

このTrangにxmlを読み込ませると、そのxmlに即したDTDやXML Schemaを出力してくれるのです!
もちろん、出力後に一意キー制約や型の指定などの細かい部分は修正しないといけませんが、スキーマを作成するほとんどの手間を省くことができるのです。

さらにDTDからXML Schemaへの変換も可能です。
便利ですね~

ちなみにTrangは実行形式jarとRPM形式が用意されているので、javaの実行環境があればどこでも利用できますし、Linuxであればjavaの実行環境無しでも動作します。

実行形式jarのコマンド例(XML Schema):
java -jar trang.jar sample.xml sample.xsd

こんな感じで実行できます。
拡張子に依存するので、最後のsample.xsdを.dtdにすればDTDができます。

 

XML Schema書くのめんどくさーいという人はぜひ使ってみてください。

就職最前線

|

昨日の出来事ですが。。

求人活動で某専門学校の合同会社説明会に参加してきました。

今回はIT事業部だけの募集ということで、求人票の段階からIT事業部で必要としている人材が興味を引きそうな「ネットワーク」「Java」「Web」などを織り交ぜ、まずは説明を聞いてもらうということを主眼において進めてきました。

結果としては、今回お世話になっている先生方が卒業年の学生を抱えていない状況の中、例年よりも多くの学生が話を聞きにきてくれ、彼らの緊張しつつも輝いた眼差しを見るにつけ新鮮な気持ちを思い出させてもらいました。

一緒に参加してくれた、新井くん、楊箸くんは同校を3月に卒業して、この4月から仲間としてがんばってくれているメンバーです。彼らも非常に積極的に動いてくれて、本当にたすかりました。話を聞きにきてくれた学生に対しても、自分の言葉でアドバイスやNCADのアピールをしてくれて、今後非常に頼もしい存在になりそうです。

合同セミナーに参加するたびに思うのですが。人が人を呼ぶという現象がいたるところで見られました。多くの人が集まっている企業には、次々に希望者が殺到するという感じで。

知名度が高かったり、地元企業であったり。我が社も特色を生かしつつ、多くの学生から「あの会社に入りたい」と思わせる仕掛け作りが大切だと。