2010年2月21日日曜日

LPIC 102受験

今日はLPIC 102の試験を受けてきました。
800満点中620点で合格でした。
目標の700点には到達しませんでしたが、まあこんなもんでしょう。
今回はAndroidやSpringAOPの勉強をしながらだったので、時間配分を考えると上出来だったと思います。
今後はLPICレベル2も受験予定ですが、プロジェクトマネージャーの試験終了後に勉強を開始しようと思っています。とりあえず仕事上、今はどうしてもAndroidの勉強が中心にならざるを得ないのです。
プロマネはこれから勉強を開始しますが、記念受験になってしまいそうな気もします。
 しかし、疲れました。今日はゆっくりと休みます。
 でわ。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2010年2月19日金曜日

Redmineを導入

RedmineをwindowsXPに導入する

プロジェクト管理ソフトのRedmineの導入メモ(windowsXP)

導入理由
・仕事でAndroidやSpring等を使うことになり、技術の習得が必要になった。そのため、自宅で作成したソースや知識を管理する必要が出てきた。どうせなら、設計・開発・バグ・情報も管理したい(残したい)
・tacというソフトも良いみたいだが、rubyは昔からちょこちょこと使っていて、エラーの発見・修復がやりやすいだろうと思ったから。でも、railsは知らんW

導入するマシン情報
・windowsXP
・ruby1.8.6
・gem0.92
・mysql5.0.18-nt(ずっと使ってないのでrootのパスワード忘れたW)


ということで、Redmineで使うmysqlはすでにインストール済みだが、rootのパスワードを完全に忘れているので、再設定をする

MySqlのrootパスワードを忘れた場合の対応~windowsXP編~


コマンドラインを開く

mysql\binのフォルダに移動

mysqld-nt --skip-grant-tablesと入力する

エラーもなく何も入力できなくなると、成功。この状態でサーバーが動作している

上記を閉じないままで、MySQL Command Line Clientを開く

パスワード無し、つまりエンターキーのみでログインする

rootユーザーにパスワードの設定を行う。update文でuserテーブルを直接編集する

update mysql.user SET password=password('root') WHERE user='root';
('root')には新たなパスワードを入力して設定する

無事に終了。念の為に変更を確認しておく

select * from mysql.user;

変更が確認できたら、MySQL Command Line Clientを終了する

最初に動かしたフォアグランドで実行中のサービスを閉じる
新たにコマンドプロンプトを開き、shutodownします

コマンドラインを開く

mysql\binのフォルダに移動

mysqladmin shutdownと入力する

最初のコマンドプロンプトをフォーカスすると、mysqlサーバーが終了してコマンド入力が可能な状態に戻っている

サービスからmysqlサーバーを立ち上げる

MySQL Command Line Clientを立ち上げて、設定しなおしたパスワードでログインできることを確認する

以上でMYSQLのrootの再設定が終了です。



MySqlにRedmineのデータベースを設定する

redmineデータベースを作成する。

create database redmine character set utf8

新しいMysqlアカウントを作成する

create user 'redmine'@'localhost' identified by 'redmine'

管理者権限をもつユーザを登録する

grant all privileges on redmine.* to 'redmine'@'localhost';


Redmineのダウンロードと環境の設定

http://rubyforge.org/frs/?group_id=1850に遷移

redmine-0.9.2.zipをダウンロードする。

rubyのバーションを確認する。ruby -v

1.8.6

railsのバーションを確認する。gem -v

0.92

redmineのrubyのversionは1.8.6, 1.8.7なのでOK
Railsのversionは2.2.2なのでNG

まずはgemをバージョンアップする。
gem update --system

rubygems-update requires builder >=0のエラー発生
gem install builder
を実行するも失敗。Could not find builder (>0)…
しばらくはまる。原因不明状態。why?????
gem envでpathを確認
redmineの公式ページで、
注意:

* RubyGems 1.3.1が必要です。

の記述を発見。
なるほど。
gemが古いのが原因みたいだ。
ということで、コマンドでの取得は無理と判断し
http://rubyforge.org/frs/?group_id=126からrubygems-update-1.3.5.gemをダウンロード
rubygems-update-1.3.5.gemをCドライブ直下に移動し、コマンドプロンプトを呼び出してCドライブ直下に移動

gem install rubygems-update-1.3.5.gemを実行

これも失敗。調べるが情報が見つからない。あかん、心が折れそうだ
調査後、ちょっと良い情報を入手
C:\ruby\lib\ruby\gems\1.8source_cacheを削除してみる。

再びgem install rubygems-update-1.3.5.gemを実行。しかし、うまくいかない
ならば、ソースを使ったほうが良いのかもしれない
http://rubyforge.org/frs/?group_id=126からrubygems-1.3.5.zipをダウンロード
解凍して、setup.rbをダブルクリック。

見事に成功。gem -v 1.3.5

ここまででだいたい3時間くらい。今日はここまで。続きは明日

gem update rails

成功

C直下にredmineフォルダを作成。

ダウンロードしたredmine-0.9.2.zipを解凍し、フォルダ名をredmineに変更して配置

redmine\conf\database.yml.exampleをコピーし、database.ymlとする

セッション暗号化用鍵を生成する

コマンドプロンプトでC:\redmineに移動し
rake config/initializers/session_store.rb
を実行する。
成功すると、C:\redmine\config\initializersフォルダにsession_store.rbが作成されている

データベースを初期化する。
rake db:migrate RAILS_ENV=production

失敗。try again:gem install mysqlと指示されたので、gem install mysqlを実行
なんかNo difinitionが多いが、エラーは吐いてないようなので、無視することにする

コマンドプロンプトからredmine直下に移動し、rake db:migrate RAILS_ENV=productionを実行

成功。続けて、rake redmine:load_default_data RAILS_ENV=productionを実行

jaを指定して終了。これも上手くいったようだ
メールの設定はしないのでこれでRedmineのインストールと設定は終了。まじで疲れた


Redmineの起動

ruby script/server -e productionを実行

なつかしのWEBrickの起動を確認

ブラウザを起動し、http://localhost:3000/を入力。無事成功!!

画面 Redmine


これでとりあえずはredmineが使えるようになったはず。結構時間かかったので、使いやすいといいなあと思っています。
subversionも連携させたいが、それは余裕のある時にやります。
また何かあったときは、メモしてUPします。でわ。

by エディ(2010/02/18 - 2010/02/19 作業時間約5時間)

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2010年2月15日月曜日

Andoridの勉強 LinearLayoutタグとRelativeLayoutタグの違いを理解する

「コードからわかるAndroidプログラミングのしくみ 開発で困ったときの解決アプローチ」



の3章では、RestaurantFinderというサンプルアプリケーションを作成しながら、ユーザーインタフェースを理解していく内容になってします。
しかし、多くの人がここで挫折してしまうのではないでしょうか。
なぜなら、2章までの知識では理解できないことが多過ぎるからです。
この業界で仕事をしてから、ひたすらJavaを使って開発をしている私でも悩むことが多かったので、はじめてAndroidの開発をする人は相当悩むのではないでしょうか(私がアホなだけかもしれませんが…)。

ここでは、素直にテキストを読み進めていった人がはまりそうな現象について説明していきます。

1章からテキストの内容を理解していき、サンプルのReviewCriteriaクラスを実装すると、以下の画面(以下UI)が表示されると思います。

画面 1



上で示した画面のjavaソースとmain.xmlファイルの内容を以下に示します。

ReviewCriteriaクラス

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;

public class ReviewCriteria extends Activity {

private static final String CLASSTAG = ReviewCriteria.class.getSimpleName();
private static final int MENU_GET_REVIEWS = Menu.FIRST;
private Spinner cuisine;
private Button grabReviews;
private EditText location;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

this.location = (EditText) findViewById(R.id.location);
this.cuisine = (Spinner) findViewById(R.id.cuisine);
this.grabReviews = (Button) findViewById(R.id.get_reviews_button);

ArrayAdapter cuisines = new ArrayAdapter(this, R.layout.spinner_view,
getResources().getStringArray(R.array.cuisines));

cuisines.setDropDownViewResource(R.layout.spinner_view);
this.cuisine.setAdapter(cuisines);


}

@Override
/**
* 下部に表示されるメニューを呼び出す
*/
public boolean onCreateOptionsMenu(Menu menu) {

Log.v(Constants.LOGTAG, " " + ReviewCriteria.CLASSTAG + " onCreateOptionsMenu");

super.onCreateOptionsMenu(menu);

// メニューアイテムを追加
menu.add(0, ReviewCriteria.MENU_GET_REVIEWS, 0, "test").setIcon(
android.R.drawable.ic_menu_edit);

return true;
}

@Override
/**
* メニューが選択された際の処理
*/
public boolean onMenuItemSelected(int featureId, MenuItem item) {

switch (item.getItemId()) {
case MENU_GET_REVIEWS:
handleGetRevuews();
return true;
}
return super.onMenuItemSelected(featureId, item);
}

private void handleGetRevuews() {
System.out.println("called!!");
}
}


main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<EditText
android:id="@+id/location"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Spinner
android:id="@+id/cuisine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/get_reviews_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Get Reviews"
/>
</LinearLayout>

上記で示したmain.xmlの内容を見て下さい。
<LinearLayout>タグが使用されています。
つまり、上の画面 1は、LinearLayoutクラスを利用して作成されているということです。

LinearLayoutクラスはViewGroupクラスのサブクラスで、子要素を、水平、あるいは垂直に一直線に並べます。
画面 1のmain.xmlではandroid:orientation="vertical"が指定されています。
android:orientationは、配置する向きを指定する属性です。
ここでは、verticalが設定されています。
verticalは垂直方向に並べます。
画面 1を見ると、EditText、Spinner、Buttonオブジェクト(全てViewのサブクラス)が垂直方向に並べられているのが確認できると思います。
horizontalを設定すると、各オブジェクトが水平方向に並ぶようになります。

しかし、今回のUIの作成では、LinearLayoutクラスでなく、

RelativeLayoutクラス

を使ってUIを作成します。
(もちろん、LinearLayoutクラスでも同じUIを作成できますが、ここではRelativeLayoutクラスを使ったUIの作成方法を理解することが重要です)

RelativeLayoutクラスを使用すると、子要素の位置を、上部、下部、左側といった相対的な位置で指定します。

では、main.xmlをRelativeLayoutに変更してみます。
変更後のmain.xmlファイルは以下のようになります。
main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"←属性の追加
android:padding="10px"←属性の追加
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<EditText
android:id="@+id/location"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Spinner
android:id="@+id/cuisine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/get_reviews_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Get Reviews"
/>
</RelativeLayout>

上記のmain.xmlでは、

android:layout_width="fill_parent"
android:layout_height="fill_parent"

は変更しないでそのまま利用しています。

android:orientation="vertical"

は削除しました。

android:gravity="center_horizontal"
android:padding="10px"

は新規に追加した属性です。

それでは、RelativeLayoutタグ内で指定したこれらの属性はどういう意味をもつのでしょうか。
以下に説明を示します。

XML属性
属性 属性の意味 属性変数 属性変数の意味
android:layout_width レイアウトの横幅の長さを指定する属性 fill_parent 縦、又は横に画面いっぱいまでの大きさで描きます
android:layout_height レイアウトの横幅の高さを指定する属性 fill_parent 縦、又は横に画面いっぱいまでの大きさで描きます
android:gravity オブジェクトの配置方法を指定する属性 center_horizontal 左右中央に配置し、サイズ変更を行わないようにしています
android:padding 上下左右のパディングをピクセル単位で設定する属性 10px 10pxに設定しています


では、main.xml変更後のUIを確認してみましょう。

画面 2



「なんじゃこりゃ~~~???????!!!!!!!」
と思わず私は叫びましたね。

正直に言いましょう。最初は原因がわからず、はまりました(アホですな…)。

そこで、グーグル先生に頼って、色々と調べた結果、これは、main.xmlのLinearLayoutタグをRelativeLayoutタグに変更したのが原因です。
って当たり前のことですね。

RelativeLayoutタグを使用する場合は、子要素の位置を、上部、下部、左側といった相対的な位置をきっちりと指定しなければいけません。
変更前は、LinearLayoutタグでandroid:orientation="vertical"属性を指定していたので、位置を指定しなくても、
EditText、Spinner、Buttonオブジェクトが自動的に上から順に並べられていました。
しかし、今回の変更でLinearLayoutタグをRelativeLayoutタグに変更したことで、全てのオブジェクトが同じ位置に配置されてしまったわけです。
つまりは、画面 2で表示されているButtonオブジェクトの下にSpinnerとEditTextが設定されてしまっているのです。
逆にいうと、EditTextオブジェクトの上にSpinnerオブジェクトが配置され、Spinnerオブジェクトの上にButtonオブジェクトが配置されて表示されている状態なのです。

各オブジェクトは、位置をしっかりと指定しないといけません。
まずは、EditTextを表示できるように変更してみましょう。
main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:padding="10px"
>

<TextView android:id="@+id/location_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10px"
android:layout_marginBottom="15px"
style="@style/label" android:text="@string/location_entry_label" />
←新規でテキストを追加

<EditText
android:id="@+id/location"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/location_label"属性の追加
android:layout_marginLeft="10px"
android:layout_marginBottom="5px"
style="@style/edit_text"
/>
</RelativeLayout>


上記のmain.xmlでは、EditTextの上に、TextViewを配置しました。
追加したTextViewは、文字列などの表示を行う為のコンポーネントタイプのビューです。
ここでは、EditTextの入力内容を説明する文字列「Location(City, ST):」を記述しています。

では、新たに追加・修正したこれらの属性はどういう意味をもつのでしょうか。
今回新たに登場した属性の説明を以下に示します。

XML属性
属性 属性の意味 属性変数 属性変数の意味
android:layout_height レイアウトの横幅の高さを指定する属性 wrap_content 内容に応じて可変の長さになります
android:layout_marginLeft 左方向の余白を指定する属性 10px 10pxに設定しています
android:layout_marginBottom 下方向の余白を指定する属性 15px 15pxに設定しています
android:layout_below 対象のウィジェットを指定したウィジェットの下に配置する属性 @id/location_label TextView@id/location_labelの下に配置しています


では、今回のmain.xml変更後のUIを確認してみましょう。

画面 3



oh!yaeh!いい感じですね。

TextView「Location(City, ST):」の下に、EditTextが表示されていますね。
このように、RelativeLayoutクラスでは、他のViewオブジェクトの位置を規準として画面を組み立てていきます。
規準位置を変更すれば、それに伴って他のViewオブジェクトも自動的に位置が変更できるのが利点です。

では、上記のようにSpinnerオブジェクトとButtonオブジェクトも配置していきましょう。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:padding="10px"
>

<TextView android:id="@+id/location_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10px"
android:layout_marginBottom="15px"
style="@style/label" android:text="@string/location_entry_label" />

<EditText
android:id="@+id/location"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/location_label"
android:layout_marginLeft="10px"
android:layout_marginBottom="5px"
style="@style/edit_text"
/>

<TextView android:id="@+id/cuisine_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/location"
android:layout_marginLeft="10px"
android:layout_marginBottom="5px"
style="@style/label" android:text="@string/cuisine_label" />

<Spinner android:id="@+id/cuisine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/cuisine_label"
android:layout_marginLeft="10px"
android:layout_marginBottom="20px" />

<Button android:id="@+id/get_reviews_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10px"
android:layout_marginBottom="5px"
android:layout_below="@id/cuisine"
android:text="@string/get_reviews_button_label" />

</RelativeLayout>

main.xmlは上記のように変更しました。今回の変更では、新しい属性は使用してません。
わからない箇所がある場合は、ここまでの内容が理解できていない可能性が高いで、もう一度最初から読みなおしましょう。

では、今回のmain.xml変更後のUIを確認してみましょう。

画面 4



Excellent!完璧ですね。
これで、意図した通りのUIが作成できました。

LinearLayoutタグとRelativeLayoutタグの違いは理解できたでしょうか。
理解できたなら、また新しいことを勉強していきましょう。私も勉強を続けたいと思います。
でわ。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2010年2月13日土曜日

Andoroidの今後の勉強方法

最近、Androidプログラミングの勉強を開始しました。
そして、メインで勉強に利用しているのが、
「コードからわかるAndroidプログラミングのしくみ 開発で困ったときの解決アプローチ」
という本です。



Androidの基礎から深いところまで書かれた本で、非常に良い本です。
しかし、説明不足であると感じる箇所も多いです。
Androidプログラミングはまだ情報が少ない箇所が多く、興味をもって勉強を開始しても、挫折してしまう人も多いと思います。
でも、それはもったいない。
私の適当な勘なのですが、5年後くらいには、Androidは携帯端末のメインプラットフォームになっていると思います。
その頃には、多くの有益で面白いアプリケーションが生まれていることでしょう。
そして、それらのほとんどはフリーのソフトであり1)、作成者は生産消費者であるはずです。2)

Androidはガラパゴス携帯と揶揄されている日本の市場を大きく変えてくれるのではないかと、私は非常に期待しています。
今の日本の携帯アプリケーション開発の現場はひどすぎます。各キャリアへの細かい対応の必要性、タイトなスケジュール、異常な開発者の稼働時間、現場の状況を一切考慮していない低予算。Androidはこれらの問題をも解決してくれるのではないでしょうか。

これから先、私はAndroidプログラミングの勉強で得た知識やメモをアップロードしていくつもりです。
その勉強には、上記にあげた「コードからわかるAndroidプログラミングのしくみ 開発で困ったときの解決アプローチ」をしばらくの間、メインで利用していくつもりです。そのため、内容はこの本の補足説明的なものになることが多いと思います。
また、私も勉強中の身なので、間違って解釈している部分が多くあることでしょう。
しかしそれは、私は未熟なのが全ての原因であり、この本の作成者には全く関係ありません。

この先アウトプットしていく内容が少しでもAndroidアプリケーション開発者みなさんの役に立てば幸いだと思ってます。
さらに欲を出すなら、Androidが広まり、日本の携帯開発現場の環境が改善され、毎日の生活がハッピーになれば最高だと思っています(笑)



1) 将来、ほとんどのデジタルソフトはフリーになるでしょう。この考えは、クリス・アンダーソンの「フリー〈無料〉からお金を生みだす新戦略」を読んだ影響が大きいです。お薦めの本なので、暇なら手にとってみてください。

2)この価値観は、アルビン・トフラーの「富の未来」からの影響です。今後は、非経済の価値観が重要となる世界が間違いなくやってくるでしょう。最近は若者の欲の無さが話題になってますが、私はその典型的な若者(?)の一人です。車や住宅はおろか、テレビと洗濯機も持ってません(笑)。いらんもんはいらんのです。でも、欲が無いのではありませんよ。株式投資や投資信託のファンドの購入はしています。購入理由は、経済の動きを見たり、勉強するのは楽しいという理由からですけどね。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2010年2月11日木曜日

男の料理 -今日はALL自炊なのだ-

今日は休日で時間もあったので、全て自炊で賄いました。
というわけで、その記録です。

最初は、昨日の夜ご飯の紹介です。
「タモリのピーマン丼」
を作成しました。



ネットで旨いと評判になっていたので期待していたのですが、それほど美味しくなかったです。ピーマンが少ないと感じたので、三つじゃなくて四つ使うべきだと思いました。
でも、まずくはなかったので、もう一度作ってみようと思っています。


次に今日の昼ご飯です。
「じゃがいもとアスパラの温サラダ」と「おかゆ」
を作成しました。



温野菜好きです。
相変わらずヘルシーでまいうーでした。定番料理です。


最後は、今日の夜ご飯です。
「ホイコーロー」
を作成しました。



ピーマンが余っていて、近くのスーパーで豚肉が半額だったので作成しました。
私はこういったシンプルな料理が好きなのです。


以上、休日の男の料理でした。
気が向いたとき、また写真をとってアップロードしたいと思います。
でわん。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

andoroidのonCreateOptionsMenu

andoroidの実装において、ActivityのサブクラスでonCreateOptionsMenuをオーバーライドすると、メニューが表示されるはずなのだが、表示することが出来ない。
二日ほど色々と調べて粘ってみたのだが、ググってもこの症状のエラーは見当たらないので解決できない…。
仕方ないので、この部分は諦めて他の部分から実装していこう。
エミュレーターはandorid2.1を使用しているのが、これがいけないのだろうか???謎である。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2010年2月10日水曜日

Ubuntuでrootになる

Ubuntuではデフォルトでrootになれません。いちいちコマンドを叩くごとにsudoを付加するのはうっとおしいので、rootになれる方法を調べてみました。
すると、

コマンド
sudo su -

もしくは

sudo -i

でrootパスワードの設定なしでrootでの作業が可能になるようです。
これで心置きなく作業に集中できます。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2010年2月9日火曜日

久しぶりの自炊

今日は久しぶりに自炊しました。
最近は生活リズムがグチャクチャなので、自炊や家事をしながら生活を立て直したいと思います。

ちなみに今日作ったのは、じゃがいもとアスパラの温サラダです。



材料は、じゃがいも、にんじん、アスパラガス、たまねぎです。
作り方は
http://www.kaneso22.co.jp/recipe/onyasai001.html
を参考にして作りました。ドレッシングは、変更してます。
簡単で、栄養満点で、とてもまいうーでした。

面倒臭がりやの一人暮らしの独身男性にお薦めです。
材料が余ってるので、明日も作りたいと思います。

さて、あとはAndroidをいじって寝ようと思います。
でわ。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2010年2月6日土曜日

フリー〈無料〉からお金を生みだす新戦略 感想

【フリー〈無料〉からお金を生みだす新戦略】




を読みました。

以下、その感想です。

これからの時代は、フリーの製品が増えていく。そして、フリーからお金を生み出すビジネススタイルがどんどん生まれくるだろう。それが、二十一世紀型の経済モデルとなる。

そんな内容の本です。

私はIT業界に身を置いているのですが、この本の内容はこれから先の時代を見据えるうえで、絶対に知っておかなければならないことだと思います。

現在、私が仕事で構築しているシステムも、フリーの製品が多く使われています。OSはLinux(CentOs)です。サーバーはApacheです。データーベースはMySQLです。APサーバーはTomcatです。使用言語はJavaです。

上記であげた製品は全てフリーです。これらを使い、システムを構築してます。もちろん、システム作成には、人件費や保守費用など色々な費用が発生しますが、フリーの恩恵は非常に多いのです。

 この本の中で特に感銘を受けたのが、中国やブラジルの市場の音楽に対するフリーの考え方です。

現在、日本では年々音楽CDの売り上げが下がってきていて問題になってきています。しかし、中国やブラジルはそもそもCDが売れなません。それは、タダ同然のコピーが市場に溢れかえっているからです。中国やブラジルでは、音楽CDの販売はビジネスにはならないのです。CDとは、フリーなのです。生活に絶対的に必要なものではないのです。

しかし、中国やブラジルのアーティスト市場では、そのコピーを利用してお金を稼ぎます。フリーの経済学にのっとり、彼らは音楽がコピーされて損失した以上の金額を稼ぎ出すのです。それが、フリーの経済学、二十一世紀型の経済学なのです。

 今、あなたが見ているこのページもフリーで作成されています。googleのblogはフリーです。

もちろん、この書評を読むものフリーです。貴重な時間を浪費してこの書評を書き込んでも、私にはなんの利益にもなりません。でも、私は書き込みます。これがフリーの経済学なのです。

お薦めの本です。一度目を通してみてください。
きっと世界がこれから向かう先が、ぼんやりと見えてくるのではないでしょうか。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

Androidの勉強2

今日は気が向いたので、Androidの勉強をしました。

勉強に利用しているのは以下の本です。



完全な初心者向けではないようですが、Javaの開発経験があれば全然問題ありません。

とりあえずは2章まで終了。サンプルコードは、自分なりに修正して、今後自分が作成予定のプロジェクトを意識して作成しました。

なんとなく、Wicketフレームワークに似ている印象を抱きました。

あとは、エミュレーターが重いのが気になる。これを機会に、新しいマシン導入するべきかどうかも悩んでいます。

さて、あと今日はLPIC102の勉強です。ただ、DSのドラクエ6を購入するので、勉強するか微妙です。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2010年2月2日火曜日

LPIC102の勉強を開始

LPIC102の勉強をちょこちょこ開始しました。
今のところ、教科書を見ながらコマンドを打ち込んで動作を確認しています。

んで、crontabでいきなりはまりました。
よく分からず、エディターをGNU nanoに設定してしまった…。
私はviが好きなので、変更する方法を探しました。

ググルと、

sudo select-editor
で変更できることが判明。

ふう。良かった良かった。
実務で使ったことのある内容が多く、101より楽しいです。今のところは…

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...