VMWareToolsのインストール

VMWarePlayerでUbuntu仮想マシンを作ったときからずっとVMwareToolsのインストールの通知がされてたが無視してたんだけど、思い立ってインストールしたのでメモ。

まず、VMWarePlayerのウィンドウの右下のアップデートの通知部分にある「ツールのインストール」ボタンを押す。
VMWareToolsのisoファイルがデスクトップ上にマウントされるので、中にあるtar.gzファイルを任意の場所にコピーする。
"gunzip"コマンドでファイルを解凍するとtarファイルができたので"tar xvf"コマンドでさらに解凍する。
vmware-tools-distlibっていうディレクトリができるので、そのなかのvmware-install.plファイルを実行するとインストールが行われる。

ただ…インストールして何が変わったのかよくわからん(汗)
ホストのWindowsとドラッグ&ドロップでファイルのやりとりってできないのかなー。。。

Ubuntuでrootユーザーでログイン

Ubuntuの個人情報のアイコンを設定使用と思って、twitterはてなで使用しているjpgファイルを/usr/share/pixmaps/facesの中に移動しようと思ったら権限がないとおこられた。どうやらこのディレクトリは所有者がrootユーザーとなっていて現在のログイユーザーでは権限がないみたい。
対処方法としてはrootユーザーでログインするか、"sudo"コマンドを使用して管理者権限で対象ディレクトリのパーミッションを変更する必要がある。
とりあえずrootユーザーでログインしようとしたら、パスワードが設定されておらずログインできなかった。
Ubuntuでデフォルトでrootユーザーでログインできないようになっているようだ。
rootユーザーでログインするためには"sudo su"になって"passwd"コマンドでパスワードを設定すればよい。
下記を参考にさせていただいた。
参考:http://d.hatena.ne.jp/hogem/20060712/1152717623

ただ、Ubuntu的な思想からするとやはりrootユーザーでログインするのはよくないので、"sudo"コマンドから管理者権限で対象ディレクトリのパーミッションを変更するのがよいのだと思う。
しかしちょっとファイル移動するだけで毎回こんなことをする必要あるのか…!?

「OSSで基幹系業務システムの構築を目指す勉強会 第一回」

先日「OSSで基幹系業務システムの構築を目指す勉強会」なる勉強会に参加してきた。
Linux(Ubuntu)、NetBeansPostgreSQLJava等のオープンソースソフトウェアを使用して業務用のアプリケーションを作成するという趣旨らしい。
実際仕事にでもJavaEclipseなどのオープンソースを使用して開発をおこなっているけど、DBはOracleだし、帳票ツール等もベンダ固有のものを使用している、何よりOSはWindowsだ。
とゆーわけで、すべてオープンソースでアプリケーションを構築するということには少し興味があった。
とはいえ、参加した目的はどちらかというと勉強会なるものの空気に触れたいってのが正直なところだった。
システム開発を初めて4年くらいになるけど、仕事以外でエンジニアの知り合いって全然いないし、実際仕事で触れる技術なんて案外狭く浅い知識だったりする。そんな中で仕事や業務の枠の外でエンジニアの知り合って自分の知らない知識や経験に触れたいと思ったのが今回勉強会に参加した理由だったりする。
参加者は思ったよりずっと少なかったのが残念だったけど…別の会社の方とも知り合えたのでよかったし今後も参加していきたいと思う。

第一回はLinux(Ubuntu)のインストールと基礎知識を学んだので備忘録も兼ねてメモしておく。
といっても行ったのが1/26なのですでにかなり忘れてる…
LinuxはUbuntu8.04をVMwareで少し触ったことある程度で、ほぼ初めて。

Ubuntu10.10のインストール

OSのインストール自体はかなり簡単だった。
OSの入っていない空のマシンを用意する、Ubuntu10.10のDVDをつっこんでマシンを起動するとインストールのウィザードが表示されるので、ユーザー名やパスワードを設定してウィザードにしたがっていけば特になにごともなく完了する。
完了したら、アップデートマネージャーに色々なソフトウェアのアップデートを促されるのでアップデートして再起動。
全部で10分〜15分くらいだったかなー、あんま覚えてないな。。。
自宅に帰ってから改めてWindows上に仮想マシンでUbuntu10.04(なぜか10.04にしてしまった)インストールしたので、以下はそのメモ。
VMWarePlayerはすでにインストール済み。
UbuntuのサイトからUbuntuのisoファイルを落とす。
VMWarePlayerで「新規仮想マシンの作成」を選択し、「OSは後でインストールする」を選択する。
「ハードウェアの設定の変更」からCD/DVDを選択し、Ubuntuのisoファイルを読み込むように設定する。
仮想マシンを起動すれば、Ubuntuのインストールが始まるのであとは同じ。

Ubuntu(Linux)に関する基礎知識

ディレクトリ構造

ディレクトリの構造がWinとは大分異なるようで、どこに何があるかが全然分からんない。
ということでUbuntuとゆーかLinuxディレクトリ構造を調べてみた。
大体下記のようになっているようだ。

   ・/    ルートディレクト
   ・/root  ルートユーザーのホームディレクトリ 
   ・/bin   ”ls”や”vi”や”more”などの実行ファイルが含まれる
   ・/boot   Linuxカーネルやブートマネージャーなどが含まれる
   ・/etc   システム設定ファイルが含まれる。
   ・/lib   システム起動に必要なドライバモジュールやライブラリファイルが含まれる。
   ・/dev   USBや外付けドライブ、プリンターなどデバイスのファイルが含まれる。
   ・/home   ユーザ毎のデータが含まれる。/home/ユーザ名がユーザ用ディレクトリとなる。
   ・/tmp 一時データ格納ディレクトリ。 
   ・/usr   X Window Systemなどの多くのブログラムがサブディレクトリに格納されている
   ・/opt   オプションのソフトパッケージのコピー、インストールファイルが格納されている 
   ・/usr/local /usrディレクトリと似ていてローカルファイルが入っている 
   ・/media  CD-ROMやフロッピーディスクなどの外付けメディア用のディレクト

参考1:http://gigazine.net/news/20080104_linux_directory_structure/
参考2:http://gtd.studiomohawk.com/archives/137

パーミッション(権限)

Ubuntu(Linux)ではディレクトリやファイルに対してユーザー毎にパーミッション(権限)が設定される。
現在のディレクトリ内のファイルやディレクトリの一覧を表示する"ls"コマンドに"-l"オプションをつけて端末で指定すると以下のようにファイルやディレクトリのパーミッションの設定が表示される。

-rwxr--r--  1 user1 group1  179 2010-12-04 11:10 smaplefile.txt

最初の"-"は以下のようにファイルの種類を表す。
 "-" ファイル
 "d" ディレクト
 "l" リンクファイル
続く"rwxr--r--"はファイル(ここではsamplefile.txt)に対する権限。対象ユーザー毎に3桁ずつで表される。
最初の"rxw"は所有者(ここではuser1)の権限。対象のファイルに対して
 "r" 読み取り権限をもつ
 "w" 書き込み権限をもつ
 "x" 実行権限をもつ
続く"r--"は所有者が属するグループ(ここではgroup1)の権限で読み取り権限のみ与えられている。
続く"r--"はその他のユーザーの権限でこちらも読み取り権限のみ与えられている。
権限の変更を行う場合は"chmod"コマンドを利用する。
書式はchmod <ユーザー> <操作> <アクセス> <ファイルパス>のように指定する。<ユーザー>
 "a" 全ユーザー
 "u" 所有者
 "g" 所有者グループ
 "o" 他人<操作>
 "+" 権限追加
 "-" 権限除去
 "=" 権限設定
    ※"+"は権限を追加することに対して"="は一度権限をすべて除去した上で対象操作のみを再設定するイメージ<アクセス>
 "r" 読み取り権限
 "w" 書き込み権限
 "x" 実行権限
他人に書き込み権限を追加する場合は以下のようにコマンドを指定する

chmod o+w samplefile.txt

パーミションを確認すると以下のようになっているはず。

-rwxr--rw-  1 user1 group1  179 2010-12-04 11:10 smaplefile.txt

ちなみにファイルのプロパティからGUIパーミッションを変更することも可能(もちろんファイルの所有者である場合)

参考:http://homepage3.nifty.com/nasunu-i/LinuxBeginner/Permission.htm

コマンド

コマンドは"ls"や"mkdir"など基本的なものしか学ばなかった。
以下のサイトに一覧があるの必要に応じて覚えていけばいいと思う。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230573/
UbuntuGUIが優れているのでコマンドを使わずともGUIでなんとかなることが多かったりするみたいなのだが、サーバーOSとしてLinuxを使うこともあるだろうのでやはりコマンドにはなれておきたいところ。

日本語入力

Ubuntu(とゆーかLinux全般)では日本語入力はかな漢字変換ソフトウェアとインプットメソッドソフトウェアと二つのソフトウェアから成り立っているらしい。
Ubuntuではデフォルトでかな漢字変換ソフトウェアにAnthy、インプットメソッドにiBusというソフトウェアが採用されている。
しかしなんか使いにくいのでGoogle日本語入力オープンソース版の使用を検討してみる。

ネットワーク設定

わ、忘れた…

音がでない

なんとなくVMWarePlayerでUbuntu8.04を動かしてみた。
Linuxって初めて触るけど全然使えそう!


Windowsはなんかしっくりこないし…
Macほしいけどお金ないし…


とりあえずUbuntuいろいろ触ってみよう。
って思ってたら音がでない…。


Ubuntuサウンドの設定をいろいろといじってみたけどダメ。
Googleさんに聞いてみてもコレといって該当する回答無し…
(音がでないって事はいろいろあるみたいだけど。)


うーん…と思ってたらVMWarePlayerの設定でサウンドカードが接続されていないだけやったみたい…orz
VMWarePlayerのウィンドウの右下のスピーカーマークをクッリクして接続すれば音がでた!
やた!!


しかし、起動時に接続されるように設定されてるはずやのになんで??
再起動してみるとやはり接続されてない…


うーん…なんでやろう。
そーいや起動時にデフォルトサウンドカードが見つかりません的なメッセージが表示されてた気が…


毎回起動後に接続すればいいんやけど…なんかしっくりこないなー。
まー、いか。

プログラマー現役続行 柴田芳樹

プログラマー現役続行 (技評SE新書)

プログラマー現役続行 (技評SE新書)

本屋にテスト関連の書籍を探しに行ったときに目にとまって購入。
プログラミング言語Java」や「Effective Java」の訳者である柴田さんの本。
ブログもいつも読ませてもらってます。

40才を超えて今なお現役プログラマーの著者が生涯プログラマーで在り続けるための方法(方針とでもいうか)を綴っている。
プログラマーとして現役でありつづけるために必要な力として以下の7項が挙げられている

  1. 論理思考力
  2. 読みやすいコードを書く力
  3. 継続学習力
  4. コンピューターサイエンスの基礎力
  5. 朝方力
  6. コミュニケーション力
  7. 英語力


それぞれの項目についてソフトウェア開発の名著や著者の体験を踏まえながら結構掘り下げて述べられている。
ただこの本で一貫して主張されていることは
「継続した学習」
であるように思う。
つまり3つ目の項目「継続学習力」がすべての力の前提になると思う。
確かに、この業界は覚えることが山のようにあるし、新たな技術はすぐに古い技術に変わる。
自分を陳腐化させないためには、常に継続した学習が必要であることは言うまでもない。


著者の言うとおり、業務がこなせない間は何をやっても学習となるが、ある程度業務がこなせるようになってくると、それだけで仕事が全て出来るようになった気になり学習することをやめてしまう。
そーやって30代や40代になるとエンジニアとしては何もできない人材となる。
確かにその通りだ。
僕も仕事を初めて3年が経って、現状の開発業務を行う分には特に誰の助けも必要としない。
一生この開発だけを行うのであれば、今の力で問題ないのかもしれない。
ただ一生この開発だけ行うのかと言われれば、そんなわけない。
というか嫌だ。
ある日、突然仕事がなくなるかもしれない。
ある日、突然会社が潰れるかもしれない。


やっぱり信用できるのはこれまで生きていた自分しかいない。
仕事に対してどう向き合ってきたのか。
幸い自分はまだ若い(と思う…、たぶん。)
常に学習する癖もまだつけれると思う。


このもままでいいのか、おれ!!
がんばれ、おれ!!
頑張る!!

PL/SQLで動的なSQLを実行する

Oracle10gでFunctionを作っている際にパラメーターに応じて動的に検索条件を付与したSQLを実行するものを作った。
通常通りにカーソル変数にSQLを設定するのではなく、動的にSQL文字列を構築した上でカーソル変数に設定するといける。
以下つくったものを簡単にしたサンプル。

CREATE OR REPLACE FUNCTION FNC_GetValue(param in VARCHAR2) RETURN VARCHAR2 IS


  --静的SQL
  STATIC_SQL CONSTANT VARCHAR2(1000) := "SELECT table1.hoge, table2.hoge FROM table1, table2 WHERE table1.key = table2.key";


  --辺値格納
  retVal VARCHAR(100);
  --SQL格納用
  sql VARCHAR2(1000);


  --カーソル、レコード定義
  TYPE CurTyp IS REF CURSOR;
  TYPE ResultRec IS RECORD (
    hoge1 table1.hoge%TYPE,
    hoge2 table2.hoge%TYPE
  );
  csr CurTyp;
  rec ResultRec;
 
  BEGIN
    --パラメータによってSQL文字列を動的に構築
    sql := STATIC_SQL;
    IF param IS NOT NULL THEN
      sql := sql || 'AND table1.key = ' || param;
    END IF;
 
    -- SQLの結果を基に辺値を作成する
    OPEN csr FOR sql
      LOOP
        FETCH csr INTO rec;
          EXIT WHEN csr%NOTFOUND;
          -- retValを組み立てる(割愛)
      END LOOP;
    CLOSE csr;
 
    RETURN retVal;
  END;

MiddlegenでViewのHibernate定義ファイルを作成

OracleのViewのHibernate定義ファイルを通常のTableと同じようにMiddlegenで作成したらうまくいかなかった。
一応定義ファイルは吐いてくれるが、なぜか全項目がキー項目になってるし、DB上に関連がないためエンティティ間の関連もはれない…


最終的には以下のような裏技チックな方法で乗り越えた!

  1. 対象となるビューを一時的に削除
  2. 対象となるビューと同じテーブルを作成する(名前も項目名も同じ)
  3. DB上に関連等をはる
  4. Middlegenで定義ファイルを作成
  5. 正しい定義ファイルが生成されたことを確認して作ったテーブルをDBから削除し、元のビューを改めて作成する。


こんなんでいいんかな…汗
もっといい方法あるかな〜