2011年8月23日火曜日

Feforaでユーザ作成とshh接続

「Fedoreでの設定」
①$ su -
でrootに変更

②$ useradd ユーザ名
でユーザを登録
③$ passwd ユーザ名
でパスワードを作成
④gpasswd -a ユーザ名 グループ名
でユーザをグループに追加
⑤$vi  /etc/pam.d/su
で#auth  required  pam_wheel.so user_uid
のをコメントからはずす
⑥/etc/sudoers visudo
で安全にファイルを開く、そのなかの
#wheel ALL=(ALL)  ALL
のコメントをはずす。これでユーザがroot権限の実行が可能になる
⑦$sudo yum install vim
でvimをインストール

⑧$ service sshd start
でsshdの起動

「Puttyでの作業」
①puttyの文字コードをUTF-8(CJK)に設定
②サーバに接続し「$ ssh-keygen -t rsa」
でデフォルトのまま保存(/.ssh/id_rsa)
で秘密鍵のパスフレーズを聞いてくるので入力,
③$cat id_rsa.pub > .ssh/authorized_keys
でサーバに公開鍵をとうろく,authorized_keysのパーミッションをchmod 600で書き込み可能にする
④puttryで接続しカギをダウンロードし「puttygen.exe」で秘密カギを登録、接続でいいはず。

2011年8月11日木曜日

Rails3でfrom_forの引数していの内容

<%= form_for :test, :url => "tests/show" do |f| %>
<%= f.select  :id, @tests.collect {|m| [m.name, m.id] }  %>
<%= f.submit    %>

上記の記述では
第一引数がパラメータ名、第2引数がコントローラとメソッドの指定になります。
また、f.selectの第一引数がパラメータ名、第2引数を配列で渡した場合、でオプションタグのvalueとテキストになります。

コントローラでパラメータを受け取る場合は、
params[:test][:id]で受け取る事ができます。

Rails3 のroutes.rbでpostでパラメータを受け取る

routes.rbの記述
post  "tests/show", :via => :post
を記述すると
$ rake routes
コマンドを実行すると、
tests_show POST   /tests/show(.:format)       {:controller=>"tests", :action=>"show"}
が生成されパラメータを受け取る事ができます。


2011年7月13日水曜日

WindowsでRuby on Railsをインスト

■■■■Rails 3.0.9バージョンのインスト■■■■
>gem update --system
>gem install rails sqlite3

■■■■SQLITEのドライバインスト■■■■■
 http://www.sqlite.org/sqlitedll-3_7_3.zip
よりsqliteのドライバをインストしパスの通っている・Rubyのbin等にコピーしてください


■■■■Rails3のアプリの作成■■■■■

>rails new demo

create
create  README
create  Rakefile
create  config.ru
create  .gitignore
create  Gemfile
create  app
create  app/controllers/application_controller.rb
create  app/helpers/application_helper.rb
create  app/mailers
create  app/models
create  app/views/layouts/application.html.erb
create  config
create  config/routes.rb
create  config/application.rb
create  config/environment.rb
create  config/environments
create  config/environments/development.rb
create  config/environments/production.rb
create  config/environments/test.rb
create  config/initializers
create  config/initializers/backtrace_silencers.rb
create  config/initializers/inflections.rb
create  config/initializers/mime_types.rb
create  config/initializers/secret_token.rb
create  config/initializers/session_store.rb
create  config/locales
create  config/locales/en.yml
create  config/boot.rb
create  config/database.yml
create  db
create  db/seeds.rb
create  doc
create  doc/README_FOR_APP
create  lib
create  lib/tasks
create  lib/tasks/.gitkeep
create  log
create  log/server.log
create  log/production.log
create  log/development.log
create  log/test.log
create  public
create  public/404.html
create  public/422.html
create  public/500.html
create  public/favicon.ico
create  public/index.html
create  public/robots.txt
create  public/images
create  public/images/rails.png
create  public/stylesheets
create  public/stylesheets/.gitkeep
create  public/javascripts
create  public/javascripts/application.js
create  public/javascripts/controls.js
create  public/javascripts/dragdrop.js
create  public/javascripts/effects.js
create  public/javascripts/prototype.js
create  public/javascripts/rails.js
create  script
create  script/rails
create  test
create  test/fixtures
create  test/functional
create  test/integration
create  test/performance/browsing_test.rb
create  test/test_helper.rb
create  test/unit
create  tmp
create  tmp/sessions
create  tmp/sockets
create  tmp/cache
create  tmp/pids
create  vendor/plugins
create  vendor/plugins/.gitkeep

が作成されます。


■■■■Railsのwebサーバの起動■■■■■
>rails server
で起動、このときセキュリティの警告がでますが解除してください。

次に「http://localhost:3000/」にアクセスしてみてください、
WEBrickサーバが立ち上がり「welcome aboard」と表示されるはずです。


■■■■say/indexを表示■■■■■
>rails generate controller say index
上記のコマンドは「say」がコントローラ名で、
「index」がアクションになります。


下記がはきだされるはずです。
create  app/controllers/say_controller.rb
 route  get "say/index"
invoke  erb
create    app/views/say
create    app/views/say/index.html.erb
invoke  test_unit
create    test/functional/say_controller_test.rb
invoke  helper
create    app/helpers/say_helper.rb
invoke    test_unit
create      test/unit/helpers/say_helper_test.rb


それでは「http://localhost:3000/say/index」にアクセスしてみましょう。
「Say#index
Find me in app/views/say/index.html.erb」と表示されているはずです。

コントローラの中身は
class SayController < ApplicationController
  def index
  end
end
となっているはずです。http://localhost:3000/say/indexのindexがメソッドになります。

■■■■say/helloを作成しを表示■■■■■
class SayController < ApplicationController
  def index
  end
  def hello
  end
end
を追加、demo/config/routes.brに
get "say/hello"を追加し、
また、demo\app\viwe\say\hello.html.erbを作成し、<h1>hello</h1>
「http://localhost:3000/say/hello」を表示するとhelloと表示されるはずです。

2011年6月6日月曜日

MySQLをphpmyadminで操作

①xamppをインストール後、アパッチとmysqlを起動し、
C:\xampp\phpMyAdmin\config.inc.php
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';
と変更し、
②http://localhost/phpmyadmin/をブラウザーで表示、
変更が成功しているなら、IDとPSを求められるので入力しphpmyadminをしようします。



2011年6月2日木曜日

ありがちな受注管理システムのmysql文 2

#初回にrootユーザのパスワード設定コマンド
mysqladmin -u root password mysql

#rootユーザでmysqlにログイン
mysql -u root -p

★★★★#P476 データベースの作成
CREATE DATABASE 受注管理;

#MySQLのコマンド。カレントデータベースを変更する。
use 受注管理;

★★★★#P476 テーブルの作成
CREATE TABLE 顧客 (
顧客番号 CHAR(4) PRIMARY KEY,
顧客名 VARCHAR(20),
住所 VARCHAR(50),
電話番号 CHAR(15));

CREATE TABLE 受注 (
受注番号 CHAR(5) PRIMARY KEY,
受注年月日 DATE NOT NULL,
顧客番号 CHAR(4),
受注合計 DECIMAL,
FOREIGN KEY(顧客番号) REFERENCES 顧客(顧客番号));
##################
#FOREIGN KEYは指定した
#親テーブルに存在しない値を指定してデータを追加
#するとエラーとなります。
#################


CREATE TABLE 商品 (
商品番号 CHAR(3) PRIMARY KEY,
商品名 VARCHAR(20),
単価 DECIMAL );

CREATE TABLE 受注明細 (
受注番号 CHAR(5),
商品番号 CHAR(3),
数量 INTEGER,
受注小計 DECIMAL,
PRIMARY KEY(受注番号,商品番号),
FOREIGN KEY(受注番号) REFERENCES 受注(受注番号),
FOREIGN KEY(商品番号) REFERENCES 商品(商品番号));

★★★★#P496 レコードの挿入(1件のみ)
INSERT INTO 顧客 (顧客番号,顧客名,住所,電話番号)
VALUES ('1001','株式会社冨田貿易','東京都港区芝浦1-XX-XX','03-3256-XXXX');

#カラムを指定せずに複数行を挿入
INSERT INTO 顧客 VALUES
('1003','宇宙商事株式会社','東京都足立区神明22-XX','03-5126-XXXX'),
('1006','有限会社吉野物産','大阪府大阪市中央区城見23-XX','06-6112-XXXX');

INSERT INTO 商品 VALUES
('A01','テレビ(液晶大型)','200000'),
('A11','テレビ(液晶小型)','50000'),
('G02','DVDレコーダー','80000'),
('S05','ラジオ','3000');

INSERT INTO 受注 VALUES
('00001','2010/04/01','1001','640000'),
('00002','2010/04/02','1006','518000'),
('00003','2010/04/02','1003','600000'),
('00004','2010/04/05','1001','3000');

INSERT INTO 受注明細 VALUES
('00001','A01','2','400000'),
('00001','G02','3','240000'),
('00002','S05','6','18000'),
('00002','A11','10','500000'),
('00003','A01','3','600000'),
('00004','S05','1','3000');

★★★★P497 挿入(INSERT文)★★★★★
INSERT INTO 顧客 (顧客番号,顧客名)
VALUES ('2001','株式会社こあら百貨店');
■■■■■■■■■結果■■■■■■■■■■■
+----------+----------------------+-----------------------------+--------------+

| 顧客番号 | 顧客名 | 住所 | 電話番号 |

+----------+----------------------+-----------------------------+--------------+

| 1001 | 株式会社冨田貿易 | 東京都港区芝浦1-XX-XX | 03-3256-XXXX |

| 1003 | 宇宙商事株式会社 | 東京都足立区神明22-XX | 03-5126-XXXX |

| 1006 | 有限会社吉野物産 | 大阪府大阪市中央区城見23-XX | 06-6112-XXXX |

| 2001 | 株式会社こあら百貨店 | NULL | NULL |

+----------+----------------------+-----------------------------+--------------+


★★★★★★★★#P497 更新(UPDATE文)★★★★
UPDATE 顧客 SET 住所='埼玉県入間市東町1-XX' WHERE 顧客番号='2001';
■■■■■■■■■結果■■■■■■■■■■■
+----------+----------------------+-----------------------------+--------------+

| 顧客番号 | 顧客名 | 住所 | 電話番号 |

+----------+----------------------+-----------------------------+--------------+

| 1001 | 株式会社冨田貿易 | 東京都港区芝浦1-XX-XX | 03-3256-XXXX |

| 1003 | 宇宙商事株式会社 | 東京都足立区神明22-XX | 03-5126-XXXX |

| 1006 | 有限会社吉野物産 | 大阪府大阪市中央区城見23-XX | 06-6112-XXXX |

| 2001 | 株式会社こあら百貨店 | 埼玉県入間市東町1-XX | NULL |

+----------+----------------------+-----------------------------+--------------+


★★★★★★★★#P498 削除(DELETE文)★★★★
DELETE FROM 顧客 WHERE 顧客番号='2001';
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------------+-----------------------------+--------------+
| 顧客番号 | 顧客名 | 住所 | 電話番号 |
+----------+------------------+-----------------------------+--------------+
| 1001 | 株式会社冨田貿易 | 東京都港区芝浦1-XX-XX | 03-3256-XXXX |
| 1003 | 宇宙商事株式会社 | 東京都足立区神明22-XX | 03-5126-XXXX |
| 1006 | 有限会社吉野物産 | 大阪府大阪市中央区城見23-XX | 06-6112-XXXX |
+----------+------------------+-----------------------------+--------------+


★★★★★★★★#P479 ビューの定義★★★★
CREATE VIEW 顧客名簿 AS SELECT 顧客番号,顧客名 FROM 顧客;
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------------+
| 顧客番号 | 顧客名 |
+----------+------------------+
| 1001 | 株式会社冨田貿易 |
| 1003 | 宇宙商事株式会社 |
| 1006 | 有限会社吉野物産 |
+----------+------------------+

★★★★★★★★#P480 検索系のデータ操作(SELECT文)★★★★
★★★★#P481 全ての項目の検索
SELECT * FROM 受注;
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------+----------+----------+
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
+----------+------------+----------+----------+
| 00001 | 2010-04-01 | 1001 | 640000 |
| 00002 | 2010-04-02 | 1006 | 518000 |
| 00003 | 2010-04-02 | 1003 | 600000 |
| 00004 | 2010-04-05 | 1001 | 3000 |
+----------+------------+----------+----------+


★★★★★★★★#P481 特定の項目の検索★★★★
SELECT 受注番号,受注合計 FROM 受注;
■■■■■■■■■結果■■■■■■■■■■■
+----------+----------+
| 受注番号 | 受注合計 |
+----------+----------+
| 00001 | 640000 |
| 00002 | 518000 |
| 00003 | 600000 |
| 00004 | 3000 |
+----------+----------+

★★★★★★★★#P481 計算結果の表示★★★★
SELECT 受注番号,受注合計,受注合計*1.05-受注合計 AS 消費税 FROM 受注
■■■■■■■■■結果■■■■■■■■■■■
+----------+----------+----------+
| 受注番号 | 受注合計 | 消費税 |
+----------+----------+----------+
| 00001 | 640000 | 32000.00 |
| 00002 | 518000 | 25900.00 |
| 00003 | 600000 | 30000.00 |
| 00004 | 3000 | 150.00 |
+----------+----------+----------+


★★★★★★★★#P482 ひとつの項目で重複するデータを除いた検索★★★★
SELECT DISTINCT 受注年月日 FROM 受注;
■■■■■■■■■結果■■■■■■■■■■■
+------------+
| 受注年月日 |
+------------+
| 2010-04-01 |
| 2010-04-02 |
| 2010-04-05 |
+------------+

★★★★★★★★#P482 複数の項目で重複するデータを除いた検索★★★★
SELECT DISTINCT 受注年月日,顧客番号 FROM 受注;
■■■■■■■■■結果■■■■■■■■■■■
+------------+----------+
| 受注年月日 | 顧客番号 |
+------------+----------+
| 2010-04-01 | 1001 |
| 2010-04-02 | 1006 |
| 2010-04-02 | 1003 |
| 2010-04-05 | 1001 |
+------------+----------+


★★★★★★★★#P482 条件を指定したデータの検索★★★★
#前準備
INSERT INTO 受注 (受注番号,受注年月日,顧客番号) VALUES ('00005','2010/04/05','1001');
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------+----------+----------+
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
+----------+------------+----------+----------+
| 00001 | 2010-04-01 | 1001 | 640000 |
| 00002 | 2010-04-02 | 1006 | 518000 |
| 00003 | 2010-04-02 | 1003 | 600000 |
| 00004 | 2010-04-05 | 1001 | 3000 |
| 00005 | 2010-04-05 | 1001 | NULL |
+----------+------------+----------+----------+


★★★★#P484 条件を満たすデータの検索★★★★
SELECT * FROM 受注 WHERE 顧客番号='1001';
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------+----------+----------+
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
+----------+------------+----------+----------+
| 00001 | 2010-04-01 | 1001 | 640000 |
| 00004 | 2010-04-05 | 1001 | 3000 |
| 00005 | 2010-04-05 | 1001 | NULL |
+----------+------------+----------+----------+

★★★★#P484 すべての条件を満たすデータの検索★★★★
SELECT * FROM 受注 WHERE 顧客番号='1001' AND 受注合計>=600000;
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------+----------+----------+
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
+----------+------------+----------+----------+
| 00001 | 2010-04-01 | 1001 | 640000 |
+----------+------------+----------+----------+

★★★★#P484 いずれかの条件を満たすデータの検索★★★★
SELECT * FROM 受注 WHERE 顧客番号='1001' OR 受注合計>=600000;
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------+----------+----------+
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
+----------+------------+----------+----------+
| 00001 | 2010-04-01 | 1001 | 640000 |
| 00003 | 2010-04-02 | 1003 | 600000 |
| 00004 | 2010-04-05 | 1001 | 3000 |
| 00005 | 2010-04-05 | 1001 | NULL |
+----------+------------+----------+----------+

★★★★#P485 条件を満たさないデータの検索★★★★
SELECT * FROM 受注 WHERE NOT 顧客番号='1001';
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------+----------+----------+
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
+----------+------------+----------+----------+
| 00002 | 2010-04-02 | 1006 | 518000 |
| 00003 | 2010-04-02 | 1003 | 600000 |
+----------+------------+----------+----------+

★★★★#P485 NULLを含むレコードの検索★★★★
SELECT 受注番号,受注合計 FROM 受注 WHERE 受注合計 IS NULL;
■■■■■■■■■結果■■■■■■■■■■■
+----------+----------+
| 受注番号 | 受注合計 |
+----------+----------+
| 00005 | NULL |
+----------+----------+

★★★★#P485 NULLを含まないレコードの検索★★★★
SELECT 受注番号,受注合計 FROM 受注 WHERE 受注合計 IS NOT NULL;
■■■■■■■■■結果■■■■■■■■■■■
+----------+----------+
| 受注番号 | 受注合計 |
+----------+----------+
| 00001 | 640000 |
| 00002 | 518000 |
| 00003 | 600000 |
| 00004 | 3000 |
+----------+----------+

★★★★#P486 2つの値の間にあるデータを含むレコードの検索★★★★
SELECT 受注番号,受注合計 FROM 受注
WHERE 受注合計 BETWEEN 600000 AND 1000000;
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------+----------+----------+
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
+----------+------------+----------+----------+
| 00001 | 2010-04-01 | 1001 | 640000 |
| 00003 | 2010-04-02 | 1003 | 600000 |
+----------+------------+----------+----------+

★★★★#P486 リストの値と一致するデータを含むレコードの検索★★★★
SELECT 受注番号,受注合計 FROM 受注 WHERE 受注番号 IN ('00001','00004');
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------+----------+----------+
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
+----------+------------+----------+----------+
| 00001 | 2010-04-01 | 1001 | 640000 |
| 00004 | 2010-04-05 | 1001 | 3000 |
+----------+------------+----------+----------+

★★★★#P486 リストの値のすべてと一致しないデータを含むレコードの検索★★★★
SELECT 受注番号,受注合計 FROM 受注
WHERE 受注番号 NOT IN ('00001','00004');
■■■■■■■■■結果■■■■■■■■■■■
+----------+----------+
| 受注番号 | 受注合計 |
+----------+----------+
| 00002 | 518000 |
| 00003 | 600000 |
| 00005 | NULL |
+----------+----------+

★★★★#P487 文字列の一部を条件とした検索★★★★
SELECT 商品番号,商品名 FROM 商品 WHERE 商品名 LIKE 'ラ__';
+----------+--------+
| 商品番号 | 商品名 |
+----------+--------+
| S05 | ラジオ |
+----------+--------+
SELECT 商品番号,商品名 FROM 商品 WHERE 商品名 LIKE '%液晶%';
■■■■■■■■■結果■■■■■■■■■■■
+----------+--------------------+
| 商品番号 | 商品名 |
+----------+--------------------+
| A01 | テレビ(液晶大型) |
| A11 | テレビ(液晶小型) |
+----------+--------------------+

★★★★#P487 表の結合★★★★
#下準備
DELETE FROM 受注 WHERE 受注番号='00005';
■■■■■■■■■結果■■■■■■■■■■■


★★★★#P488 2つの表の結合★★★★
SELECT 受注番号,受注.顧客番号,顧客名 FROM 受注,顧客
WHERE 受注.顧客番号=顧客.顧客番号;

******INNER JOINを使った場合*****
SELECT 受注番号,受注.顧客番号,顧客名 FROM 受注
INNER JOIN 顧客
WHERE 受注.顧客番号=顧客.顧客番号;

■■■■■■■■■結果■■■■■■■■■■■
:::::::::受注テーブル::::::::
+----------+------------+----------+----------+
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
+----------+------------+----------+----------+
| 00001 | 2010-04-01 | 1001 | 640000 |
| 00002 | 2010-04-02 | 1006 | 518000 |
| 00003 | 2010-04-02 | 1003 | 600000 |
| 00004 | 2010-04-05 | 1001 | 3000 |
| 00005 | 2010-04-05 | 1001 | NULL |
+----------+------------+----------+----------+
:::::::::顧客テーブル:::::::::
+----------+------------------+-----------------------------+--------
| 顧客番号 | 顧客名 | 住所 | 電話番号
+----------+------------------+-----------------------------+--------
| 1001 | 株式会社冨田貿易 | 東京都港区芝浦1-XX-XX | 03-3256
| 1003 | 宇宙商事株式会社 | 東京都足立区神明22-XX | 03-5126
| 1006 | 有限会社吉野物産 | 大阪府大阪市中央区城見23-XX | 06-6112
+----------+------------------+-----------------------------+--------
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
+----------+----------+------------------+
| 受注番号 | 顧客番号 | 顧客名 |
+----------+----------+------------------+
| 00001 | 1001 | 株式会社冨田貿易 |
| 00004 | 1001 | 株式会社冨田貿易 |
| 00005 | 1001 | 株式会社冨田貿易 |
| 00003 | 1003 | 宇宙商事株式会社 |
| 00002 | 1006 | 有限会社吉野物産 |
+----------+----------+------------------+
★★★★#P488 3つ以上の表の結合★★★★
SELECT 受注.受注番号,受注.顧客番号,顧客名,受注明細.商品番号,商品名,単価,数量,受注小計
FROM 受注,顧客,受注明細,商品
WHERE 受注.顧客番号=顧客.顧客番号 AND 受注.受注番号=受注明細.受注番号 AND 受注明細.商品番号=商品.商品番号;
*********下記のテーブルを結合してSQLを実行します。*********
:::::::::::::::受注:::::::::::::::
+----------+------------+----------+----------+
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
+----------+------------+----------+----------+
| 00001 | 2010-04-01 | 1001 | 640000 |
| 00002 | 2010-04-02 | 1006 | 518000 |
| 00003 | 2010-04-02 | 1003 | 600000 |
| 00004 | 2010-04-05 | 1001 | 3000 |
| 00005 | 2010-04-05 | 1001 | NULL |
+----------+------------+----------+----------+
::::::::::::::顧客:::::::::::::
+----------+------------------+-----------------------------+--------------+
| 顧客番号 | 顧客名 | 住所 | 電話番号 |
+----------+------------------+-----------------------------+--------------+
| 1001 | 株式会社冨田貿易 | 東京都港区芝浦1-XX-XX | 03-3256-XXXX |
| 1003 | 宇宙商事株式会社 | 東京都足立区神明22-XX | 03-5126-XXXX |
| 1006 | 有限会社吉野物産 | 大阪府大阪市中央区城見23-XX | 06-6112-XXXX |
+----------+------------------+-----------------------------+--------------+
::::::::受注明細::::::::::::
+----------+----------+------+----------+
| 受注番号 | 商品番号 | 数量 | 受注小計 |
+----------+----------+------+----------+
| 00001 | A01 | 2 | 400000 |
| 00001 | G02 | 3 | 240000 |
| 00002 | A11 | 10 | 500000 |
| 00002 | S05 | 6 | 18000 |
| 00003 | A01 | 3 | 600000 |
| 00004 | S05 | 1 | 3000 |
+----------+----------+------+----------+
::::::::商品:::::::::::
+----------+--------------------+--------+
| 商品番号 | 商品名 | 単価 |
+----------+--------------------+--------+
| A01 | テレビ(液晶大型) | 200000 |
| A11 | テレビ(液晶小型) | 50000 |
| G02 | DVDレコーダー | 80000 |
| S05 | ラジオ | 3000 |
+----------+--------------------+--------+
↓↓↓↓上記のテーブルを結合して実行するSQL文↓↓↓↓
SELECT 受注.受注番号,受注.顧客番号,顧客名,受注明細.商品番号,商品名,単価,数量,受注小計
FROM 受注,顧客,受注明細,商品
WHERE 受注.顧客番号=顧客.顧客番号 AND 受注.受注番号=受注明細.受注番号 AND 受注明細.商品番号=商品.商品番号;
■■■■■■■■■結果■■■■■■■■■■■
+----------+----------+------------------+----------+--------------------+--------+------+----------+
| 受注番号 | 顧客番号 | 顧客名 | 商品番号 | 商品名 | 単価 | 数量 | 受注小計 |
+----------+----------+------------------+----------+--------------------+--------+------+----------+
| 00001 | 1001 | 株式会社冨田貿易 | A01 | テレビ(液晶大型) | 200000 | 2 | 400000 |
| 00003 | 1003 | 宇宙商事株式会社 | A01 | テレビ(液晶大型) | 200000 | 3 | 600000 |
| 00002 | 1006 | 有限会社吉野物産 | A11 | テレビ(液晶小型) | 50000 | 10 | 500000 |
| 00001 | 1001 | 株式会社冨田貿易 | G02 | DVDレコーダー | 80000 | 3 | 240000 |
| 00004 | 1001 | 株式会社冨田貿易 | S05 | ラジオ | 3000 | 1 | 3000 |
| 00002 | 1006 | 有限会社吉野物産 | S05 | ラジオ | 3000 | 6 | 18000 |
+----------+----------+------------------+----------+--------------------+--------+------+----------+



★★★★#P489 データの集計★★★★
★★★★#P489 レコード数の表示★★★★
SELECT COUNT(*) FROM 受注;
■■■■■■■■■結果■■■■■■■■■■■
+----------+
| COUNT(*) |
+----------+
| 5 |
+----------+

★★★★P#490 指定した項目の合計値の表示★★★★
SELECT SUM(受注合計) FROM 受注;
■■■■■■■■■結果■■■■■■■■■■■
+---------------+
| SUM(受注合計) |
+---------------+
| 1761000 |
+---------------+


★★★★#P490 指定した項目の平均値の表示★★★★
SELECT AVG(受注合計) FROM 受注;
■■■■■■■■■結果■■■■■■■■■■■
+---------------+
| AVG(受注合計) |
+---------------+
| 440250.0000 |
+---------------+

★★★★#P490 指定した項目の最大値の表示★★★★
SELECT MAX(受注合計) FROM 受注;
■■■■■■■■■結果■■■■■■■■■■■
+---------------+
| MAX(受注合計) |
+---------------+
| 640000 |
+---------------+


★★★★#P490 指定した項目の最小値の表示★★★★
SELECT MIN(受注合計) FROM 受注;
■■■■■■■■■結果■■■■■■■■■■■
+---------------+
| MIN(受注合計) |
+---------------+
| 3000 |
+---------------+

★★★★#P491 データのグループ化★★★★
★★★★#P491 項目ごとにグループ化して表示★★★★
SELECT 受注年月日,COUNT(*),SUM(受注合計) FROM 受注 GROUP BY 受注年月日;
■■■■■■■■■結果■■■■■■■■■■■
+------------+----------+---------------+
| 受注年月日 | COUNT(*) | SUM(受注合計) |
+------------+----------+---------------+
| 2010-04-01 | 1 | 640000 |
| 2010-04-02 | 2 | 1118000 |
| 2010-04-05 | 2 | 3000 |
+------------+----------+---------------+
★★★★#P491 データのグループ化★★★★
★★★★#P491 項目ごとにグループ化して表示★★★★
SELECT 顧客番号,COUNT(*),SUM(受注合計) FROM 受注 GROUP BY 顧客番号;
+----------+----------+---------------+
| 顧客番号 | COUNT(*) | SUM(受注合計) |
+----------+----------+---------------+
| 1001 | 3 | 643000 |
| 1003 | 1 | 600000 |
| 1006 | 1 | 518000 |
+----------+----------+---------------+

★★★★#P492 項目ごとにグループ化して条件を絞り込んで表示★★★★
SELECT 受注年月日,COUNT(*),SUM(受注合計)
FROM 受注
GROUP BY 受注年月日
HAVING SUM(受注合計)>1000000;
■■■■■■■■■結果■■■■■■■■■■■
+------------+----------+---------------+
| 受注年月日 | COUNT(*) | SUM(受注合計) |
+------------+----------+---------------+
| 2010-04-02 | 2 | 1118000 |
+------------+----------+---------------+

★★★★#P492 データの並べ替え★★★★
★★★★#P493 ひとつの項目による並べ替え★★★★
SELECT 受注番号,顧客番号,受注合計
FROM 受注
ORDER BY 受注合計;
■■■■■■■■■結果■■■■■■■■■■■
+----------+----------+----------+
| 受注番号 | 顧客番号 | 受注合計 |
+----------+----------+----------+
| 00005 | 1001 | NULL |
| 00004 | 1001 | 3000 |
| 00002 | 1006 | 518000 |
| 00003 | 1003 | 600000 |
| 00001 | 1001 | 640000 |
+----------+----------+----------+

★★★★#P492 複数の項目による並べ替え★★★★
SELECT 受注番号,顧客番号,受注合計
FROM 受注
ORDER BY 顧客番号
ASC,受注合計 DESC;
■■■■■■■■■解説■■■■■■■■■
顧客番号順に並べ受注合計が多い多い順に表示
■■■■■■■■■結果■■■■■■■■■■■
+----------+----------+----------+
| 受注番号 | 顧客番号 | 受注合計 |
+----------+----------+----------+
| 00001 | 1001 | 640000 |
| 00004 | 1001 | 3000 |
| 00005 | 1001 | NULL |
| 00003 | 1003 | 600000 |
| 00002 | 1006 | 518000 |
+----------+----------+----------+


★★★★#P492 副問い合わせ★★★★
★★★★#P493 単一行問い合わせ★★★★
SELECT * FROM 顧客
WHERE 顧客番号=
(SELECT 顧客番号 FROM 受注 WHERE 受注番号='00001');
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------------+-----------------------+--------------+
| 顧客番号 | 顧客名 | 住所 | 電話番号 |
+----------+------------------+-----------------------+--------------+
| 1001 | 株式会社冨田貿易 | 東京都港区芝浦1-XX-XX | 03-3256-XXXX |
+----------+------------------+-----------------------+--------------+

★★★★#P493 複数行問い合わせ★★★★
SELECT * FROM 顧客 WHERE 顧客番号 IN
(SELECT 顧客番号 FROM 受注 WHERE 受注合計>=600000);
■■■■■■■■■結果■■■■■■■■■■■
+----------+------------------+-----------------------+--------------+
| 顧客番号 | 顧客名 | 住所 | 電話番号 |
+----------+------------------+-----------------------+--------------+
| 1001 | 株式会社冨田貿易 | 東京都港区芝浦1-XX-XX | 03-3256-XXXX |
| 1003 | 宇宙商事株式会社 | 東京都足立区神明22-XX | 03-5126-XXXX |
+----------+------------------+-----------------------+--------------+

★★★★#P495 相関副問い合わせ★★★★
#下準備
INSERT INTO 商品 VALUES ('Z01','冷蔵庫','150000'),('Z11','エアコン','98000');
■■■■■■■■■結果■■■■■■■■■■■
+----------+--------------------+--------+
| 商品番号 | 商品名 | 単価 |
+----------+--------------------+--------+
| A01 | テレビ(液晶大型) | 200000 |
| A11 | テレビ(液晶小型) | 50000 |
| G02 | DVDレコーダー | 80000 |
| S05 | ラジオ | 3000 |
| Z01 | 冷蔵庫 | 150000 |
| Z11 | エアコン | 98000 |
+----------+--------------------+--------+


★★★★#P495 複数の表で一致するレコードの検索★★★★
SELECT 商品番号,商品名 FROM 商品 WHERE EXISTS
(SELECT * FROM 受注明細 WHERE 商品.商品番号=受注明細.商品番号);

********解説********
EXISTS は TRUE になり、NOT EXISTS は FALSE になります。

■■■■■■■■■結果■■■■■■■■■■■
+----------+--------------------+
| 商品番号 | 商品名 |
+----------+--------------------+
| A01 | テレビ(液晶大型) |
| A11 | テレビ(液晶小型) |
| G02 | DVDレコーダー |
| S05 | ラジオ |
+----------+--------------------+


★★★★#P496 複数の表で一致しないレコードの検索★★★★
SELECT 商品番号,商品名 FROM 商品 WHERE NOT EXISTS
(SELECT * FROM 受注明細 WHERE 商品.商品番号=受注明細.商品番号);
■■■■■■■■■結果■■■■■■■■■■■
::::::商品テーブル::::::::
+----------+--------------------+--------+
| A01 | テレビ(液晶大型) | 200000 |
| A11 | テレビ(液晶小型) | 50000 |
| G02 | DVDレコーダー | 80000 |
| S05 | ラジオ | 3000 |
| Z01 | 冷蔵庫 | 150000 |
| Z11 | エアコン | 98000 |
+----------+--------------------+--------+

::::::受注明細テーブル::::::::
+----------+----------+------+----------+
| 受注番号 | 商品番号 | 数量 | 受注小計 |
+----------+----------+------+----------+
| 00001 | A01 | 2 | 400000 |
| 00001 | G02 | 3 | 240000 |
| 00002 | A11 | 10 | 500000 |
| 00002 | S05 | 6 | 18000 |
| 00003 | A01 | 3 | 600000 |
| 00004 | S05 | 1 | 3000 |
+----------+----------+------+----------+
↓↓↓↓↓結果↓↓↓↓↓
+----------+----------+
| 商品番号 | 商品名 |
+----------+----------+
| Z01 | 冷蔵庫 |
| Z11 | エアコン |
+----------+----------+

2011年6月1日水曜日

ありがちな受注管理システムのmysql文

*********************************************
ありがちな受注管理システムのmysql文です。
今回xamppのmysqlを使いました。

#初回にrootユーザのパスワード設定コマンド
mysqladmin -u root password mysql

#rootユーザでmysqlにログイン
mysql -u root -p

#P476 データベースの作成
CREATE DATABASE 受注管理;

#MySQLのコマンド。カレントデータベースを変更する。
use 受注管理;

#P476 テーブルの作成
CREATE TABLE 顧客 (
顧客番号 CHAR(4) PRIMARY KEY,
顧客名 VARCHAR(20),
住所 VARCHAR(50),
電話番号 CHAR(15));

CREATE TABLE 受注 (
受注番号 CHAR(5) PRIMARY KEY,
受注年月日 DATE NOT NULL,
顧客番号 CHAR(4),
受注合計 DECIMAL,
FOREIGN KEY(顧客番号) REFERENCES 顧客(顧客番号));



CREATE TABLE 商品 (
商品番号 CHAR(3) PRIMARY KEY,
商品名 VARCHAR(20),
単価 DECIMAL );

CREATE TABLE 受注明細 (
受注番号 CHAR(5),
商品番号 CHAR(3),
数量 INTEGER,
受注小計 DECIMAL,
PRIMARY KEY(受注番号,商品番号),
FOREIGN KEY(受注番号) REFERENCES 受注(受注番号),
FOREIGN KEY(商品番号) REFERENCES 商品(商品番号));

#P496 レコードの挿入(1件のみ)
INSERT INTO 顧客 (顧客番号,顧客名,住所,電話番号)
VALUES ('1001','株式会社冨田貿易','東京都港区芝浦1-XX-XX','03-3256-XXXX');

#カラムを指定せずに複数行を挿入
INSERT INTO 顧客 VALUES
('1003','宇宙商事株式会社','東京都足立区神明22-XX','03-5126-XXXX'),
('1006','有限会社吉野物産','大阪府大阪市中央区城見23-XX','06-6112-XXXX');

INSERT INTO 商品 VALUES
('A01','テレビ(液晶大型)','200000'),
('A11','テレビ(液晶小型)','50000'),
('G02','DVDレコーダー','80000'),
('S05','ラジオ','3000');

INSERT INTO 受注 VALUES
('00001','2010/04/01','1001','640000'),
('00002','2010/04/02','1006','518000'),
('00003','2010/04/02','1003','600000'),
('00004','2010/04/05','1001','3000');

INSERT INTO 受注明細 VALUES
('00001','A01','2','400000'),
('00001','G02','3','240000'),
('00002','S05','6','18000'),
('00002','A11','10','500000'),
('00003','A01','3','600000'),
('00004','S05','1','3000');

#P497 挿入(INSERT文)
INSERT INTO 顧客 (顧客番号,顧客名)
VALUES ('2001','株式会社こあら百貨店');

#P497 更新(UPDATE文)
UPDATE 顧客 SET 住所='埼玉県入間市東町1-XX' WHERE 顧客番号='2001';

#P498 削除(DELETE文)
DELETE FROM 顧客 WHERE 顧客番号='2001';

#P479 ビューの定義
CREATE VIEW 顧客名簿 AS SELECT 顧客番号,顧客名 FROM 顧客;

#P480 検索系のデータ操作(SELECT文)
#P481 全ての項目の検索
SELECT * FROM 受注;

#P481 特定の項目の検索
SELECT 受注番号,受注合計 FROM 受注;

#P481 計算結果の表示
SELECT 受注番号,受注合計*1.05 FROM 受注;

#P482 ひとつの項目で重複するデータを除いた検索
SELECT DISTINCT 受注年月日 FROM 受注;

#P482 複数の項目で重複するデータを除いた検索
SELECT DISTINCT 受注年月日,顧客番号 FROM 受注;

#P482 条件を指定したデータの検索
#前準備
INSERT INTO 受注 (受注番号,受注年月日,顧客番号) VALUES ('00005','2010/04/05','1001');

#P484 条件を満たすデータの検索
SELECT * FROM 受注 WHERE 顧客番号='1001';

#P484 すべての条件を満たすデータの検索
SELECT * FROM 受注 WHERE 顧客番号='1001' AND 受注合計>=600000;

#P484 いずれかの条件を満たすデータの検索
SELECT * FROM 受注 WHERE 顧客番号='1001' OR 受注合計>=600000;

#P485 条件を満たさないデータの検索
SELECT * FROM 受注 WHERE NOT 顧客番号='1001';

#P485 NULLを含むレコードの検索
SELECT 受注番号,受注合計 FROM 受注 WHERE 受注合計 IS NULL;

#P485 NULLを含まないレコードの検索
SELECT 受注番号,受注合計 FROM 受注 WHERE 受注合計 IS NOT NULL;

#P486 2つの値の間にあるデータを含むレコードの検索
SELECT 受注番号,受注合計 FROM 受注
WHERE 受注合計 BETWEEN 600000 AND 1000000;

#P486 リストの値と一致するデータを含むレコードの検索
SELECT 受注番号,受注合計 FROM 受注
WHERE 受注番号 IN ('00001','00004');

#P486 リストの値のすべてと一致しないデータを含むレコードの検索
SELECT 受注番号,受注合計 FROM 受注
WHERE 受注番号 NOT IN ('00001','00004');

#P487 文字列の一部を条件とした検索
SELECT 商品番号,商品名 FROM 商品 WHERE 商品名 LIKE 'ラ__';

SELECT 商品番号,商品名 FROM 商品 WHERE 商品名 LIKE '%液晶%';

#P487 表の結合
#下準備
DELETE FROM 受注 WHERE 受注番号='00005';

#P488 2つの表の結合
SELECT 受注番号,受注.顧客番号,顧客名 FROM 受注,顧客
WHERE 受注.顧客番号=顧客.顧客番号;

#P488 3つ以上の表の結合
SELECT 受注.受注番号,受注.顧客番号,顧客名,受注明細.商品番号,商品名,単価,数量,受注小計
FROM 受注,顧客,受注明細,商品
WHERE 受注.顧客番号=顧客.顧客番号 AND 受注.受注番号=受注明細.受注番号 AND 受注明細.商品番号=商品.商品番号;

#P489 データの集計
#P489 レコード数の表示
SELECT COUNT(*) FROM 受注;

#490 指定した項目の合計値の表示
SELECT SUM(受注合計) FROM 受注;

#P490 指定した項目の平均値の表示
SELECT AVG(受注合計) FROM 受注;

#P490 指定した項目の最大値の表示
SELECT MAX(受注合計) FROM 受注;

#P490 指定した項目の最小値の表示
SELECT MIN(受注合計) FROM 受注;

#P491 データのグループ化
#P491 項目ごとにグループ化して表示
SELECT 受注年月日,COUNT(*),SUM(受注合計) FROM 受注 GROUP BY 受注年月日;

#P492 項目ごとにグループ化して条件を絞り込んで表示
SELECT 受注年月日,COUNT(*),SUM(受注合計) FROM 受注 GROUP BY 受注年月日
HAVING SUM(受注合計)>1000000;

#P492 データの並べ替え
#P493 ひとつの項目による並べ替え
SELECT 受注番号,顧客番号,受注合計 FROM 受注 ORDER BY 受注合計;

#P492 複数の項目による並べ替え
SELECT 受注番号,顧客番号,受注合計 FROM 受注 ORDER BY 顧客番号 ASC,受注合計 DESC;

#P492 副問い合わせ
#P493 単一行問い合わせ
SELECT * FROM 顧客 WHERE 顧客番号=
(SELECT 顧客番号 FROM 受注 WHERE 受注番号='00001');

#P493 複数行問い合わせ
SELECT * FROM 顧客 WHERE 顧客番号 IN
(SELECT 顧客番号 FROM 受注 WHERE 受注合計>=600000);

#P495 相関副問い合わせ
#下準備
INSERT INTO 商品 VALUES ('Z01','冷蔵庫','150000'),('Z11','エアコン','98000');

#P495 複数の表で一致するレコードの検索
SELECT 商品番号,商品名 FROM 商品 WHERE EXISTS
(SELECT * FROM 受注明細 WHERE 商品.商品番号=受注明細.商品番号);

#P496 複数の表で一致しないレコードの検索
SELECT 商品番号,商品名 FROM 商品 WHERE NOT EXISTS
(SELECT * FROM 受注明細 WHERE 商品.商品番号=受注明細.商品番号);






2011年5月29日日曜日

eclipseでRuby環境を作成

色々とeclipseとRubyの開発環境構築のサイトはありますが、
情報がまちまちだったり
ダウンロードサイトが変わっていたりと、、、、
一応 私が2011年05月に開発環境を構築した手順を掲載いたします。

①http://mergedoc.sourceforge.jp/より
Full All in One (JRE あり)の Ultimateをダウンロードします。
すでに日本語化もしてあります。

②ダウンロードしたeclipse.exeをクリックしインストします

③ 次にeclipseのメニューより「ウインドウ」→「設定」→「一般」→「機能」→「クラシック更新」→
「適用」 →「Ok」

④ 次にeclipseのメニューより「ヘルプ」→「ソフトウエアの更新」→「検索とインストール」
→「追加」→「http://download.aptana.com/tools/radrails/plugin/install/radrails-bundle」と入力し
後は指示にしたがってインストールします。
これで完了です。
おつかれさまでした。


2011年5月27日金曜日

スタックとキュー とは?と多重配列



arr = [],[]
p arr[0][0] = 12
p arr[0][1] = 11
p arr[0][2] = 11
p arr[0][3] = 13

p arr[1][0] = 02
p arr[1][1] = 01
p arr[1][2] = 01
p arr[1][3] = 03
p arr
p arr << [1,2]
p arr 


###結果####
12
11
11
13
2
1
1
3
[[12, 11, 11, 13], [2, 1, 1, 3]]
[[12, 11, 11, 13], [2, 1, 1, 3], [1, 2]]
[[12, 11, 11, 13], [2, 1, 1, 3], [1, 2]]

#####用語#####
スタックポインターとは?
データの位置を格納しているポインター

プッシュとは?
データをスタック領域に格納する作業

キューとは?
行列です

エンキューとは?
 配列に追加

デキューとは?
配列から削除

2011年5月23日月曜日

Ruby言語 でじゃんけん

pc = ["グー","チョキ","パー"]
pcnum = rand(3)
puts "PCは#{pc[pcnum]}"
puts "私は#{pc[name]}"
puts "シャンケンの判定は"
ans = ((name - pcnum)+3)%3//
if(ans == 0)
puts "アイコ"
elsif(ans == 2)
puts "勝ち"
elsif(ans == 1)
puts "負け"
end

Ruby言語 ループ

p "■■■hello1■■■"
def hello1(num,i=0)
(i..num-1).each do |i|
puts "Hello world"
end
end
hello1(3)

p "■■■hello2■■■"
def hello2(num)
array = ["Hello world"]*num
array.each do |item|
p item
end
end
hello2(3)

p "■■■hello3■■■"
def hello3(num)
num.times do
puts "Hello World"
end
end
hello3(3)

p "■■■hello4■■■"

def hello4 (num,str,i=0)
while i < num puts str i +=1 end end hello4(3,"Hello") p "■■■hello5■■■" def hello5(num) 1.upto(num) do puts "Hello World" end end hello5(3) p "■■■file■■■" File.open("hello.txt","r") do |txt| puts txt.read end p "■■■file2■■■" File.open("hello.txt","r") do |txt| txt.each_line do |line| puts line end end


2011年5月17日火曜日

Ruby 変数と定数とスコープ

puts "###############試験対策ソース###############"

puts "###############変数と定数とスコープ1###############"
x = 1
def ans
x = 4 #xを初期設定していない場合、xを呼び出す場合NameErrorが返されます。
puts x #=>4 xのスコープはメソッド内だけです。
end
ans
puts x #=>1


puts "###############変数と定数とスコープ2###############"

def ans2
x = 100 if false #この場合xへの代入は実行されないが、宣言はされます。
puts x #=>nil
end

ans2

puts "###############変数と定数とスコープ3###############"

def ans3
x = 0 #ブロックの外で初期設定
(0 ... 11).each do |i|
puts x += i #ブロック内でも有効です
end
end

ans3

puts "###############変数と定数とスコープ4###############"
def ans4
o = 0 #初期化を行っていない変数に代入を行うとNameErrarが吐き出されます。
for i in 1..10
o += i
end
puts o
end

ans4
★★★★★★実行結果★★★★★★
###############試験対策メ[ス###############
###############変数と定数とスコープ1###############
4
1
###############変数と定数とスコープ2###############
nil
###############変数と定数とスコープ3###############
0
1
3
6
10
15
21
28
36
45
55
###############変数と定数とスコープ4###############
55

2011年5月16日月曜日

Ruby技術者認定試験対策 その①

puts "##############Ruby真偽#################2
puts "■■■■■■■■真偽ソース■■■■■■■■■"
puts "########  0  #######"
num = 0
if num
    puts "0 は true"
else
    puts "0 は false"
end

puts "########  ''  #######"


str = ''
if str
    puts "空文字列はtrue"
else
    puts "空文字列はfalse"
end

puts "########  nil  #######"

ni = nil

if ni
    puts "nilはtrue"
else
    puts "nilはfalse"
end

puts "########  false  #######"

fal = false

if fal
    puts "falseはtrue"
else
    puts "flaseはfalse"
end

puts "########  true  #######"

tr = true

if tr
    puts "trueはtrue"
else
    puts "trueはfalse"
end

puts "########  null  #######"

nulls = "null"

if nulls
    puts "nullはtrue"
else
    puts "nullはfalse"
end

puts "★★★★★★★ 結果 ★★★★★★★"
########  0  #######
0 は true
########  ''  #######
空文字列はtrue
########  nil  #######
nilはfalse
########  false  #######
flaseはfalse
########  true  #######
trueはtrue
########  null  #######
nullはtrue

///////  まとめ  ////////
Rubyではnilとfalse以外はtrueになります。

最近見たWeb開発で役にたつサイトをまとめた

#############################注目PC##############################
9,800円のAndroidノートが発売CPUはVIA製
http://akiba-pc.watch.impress.co.jp/hotline/20110514/etc_via.html 

#############################注目HTML便利サイト##############################
CSSの知識をもっと深める30+2の小技テクニック集
http://weboook.blog22.fc2.com/blog-entry-260.html



ブラウザのデフォルトのスタイルをCSSでリセットする方法
http://ps60.blog109.fc2.com/blog-entry-31.html



#############################注目統合開発便利サイト##############################
TML/CSS/PHP等のコーディングに、無料のNetBeansが快適過ぎる件
http://stocker.jp/diary/netbeans/


#############################注目SEO対策サイト##############################
WEB屋が使う最高の無料SEOツール40個
http://swat9.com/seo/seo%E3%83%84%E3%83%BC%E3%83%AB40/


#############################注目仮想環境便利サイト##############################
無料の仮想化ソフト「VirtualBox」を使ってWindows上でLinuxなどを動作させる方法
http://9jp.info/archives/9319


#############################注目サーバ管理サイト##############################
ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編)http://tanaka.sakura.ad.jp/2011/05/centos-linux-apache-php-perl-mysql-lamp.html

#############################注目Rubyサイト##############################
Ruby入門勉強ルームhttp://www.mapee.jp/ruby/

2011年5月12日木曜日

XHTMLの注意点

##############XHTM1.0宣言文 ###########
<?xml version=”1.0″ encoding=UTF-8″?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<!-- 空間名の指定 -->
<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”ja” lang=”ja”>




############## 終了タグ ###########

XHTMLでは終了タグの省略はできません。
ですので
<br /><img src="xxxx" />と記述し、
pタグなどもきちんと閉じましょう。

############## 属性値 ###########

属性値はダブルコーテイションで囲みましょう。
また、属性名と属性値が同じ時、HTMLは省略記述できますが、
XHTMLでは省略できません、

############## 要素名 属性名 ###########
XHTMLでは要素名と属性名は小文字で記述しましょう。




2011年5月11日水曜日

Ruby言語 ファイル

puts "################出入力###################"
puts "引数に1 2 3を渡す"
expression = ARGV.join(' + ')   #joinで文字列の結合
total = ARGV.inject(0){|subtotal, arg|   #inject(0)はsubtotalの初期値で、argに要素を渡します。
    p subtotal
    p arg
    subtotal + arg.to_i
}

puts expression   #=>1 + 2 + 3
puts total    #=>6


puts "################ファイル###################"

i = 0
File.open("opentext.txt"){|text|  #openでファイルを開きます
    puts "読み込み開始します"
    contents = text.read
    print contents + "\n"
    puts "読み込み終了します"
}


puts "################ファイル###################"

File.open("opentext.txt",'a'){|text|
    puts "書き込み開始します"
    text.puts Time.now
    puts "書き込み終了します"
}

puts "################ファイル###################"

File.open("opentext2.txt",File::WRONLY|File::CREAT){|text|
    puts "書き込み開始します"
    text.puts Time.now
    puts "書き込み終了します"
}


puts "################ファイル###################"
File.open("opentext2.txt"){|text|
    puts "読み込み開始します"
    text.each_line do |line|   #一行ずつ読み込み ブロックに行の内容を渡す。
        p text.lineno    #現在の行番号
        if(line == "\n")
            puts "\\nです"
        end
        p line#.chomp    #現在の行を表示chompは改行を削除します
    end
    puts "読み込み終了します"
}


puts "################ファイル###################"
File.open("opentext2.txt",'r+b'){|text|
    print "#{text.pos}"    #ファイルポインタの現在の位置を整数で返します
    print text.gets
    print "#{text.pos}"
    puts bytes = text.read(3)
    print "#{text.pos}:\n"
    text.pos -= 3
    print "#{text.pos}:\n"
    text.write bytes
    print "#{text.pos}"
    text.pos = 0
    print text.gets    #1行取得
    print "#{text.pos}:"
    text.seek(-3,File::SEEK_END)#最後の行へ移動し3バイト戻る
    print "#{text.pos}"
    puts text.getc     #1バイト読み込み
    print "#{text.pos}"
    p text.getc
    print "#{text.pos}"
    #readcharは読み取るバイトが存在しないとき例外を発生することを除き同じ動き
    puts text.readchar #読み取り行がない場合例外
}


puts "################ファイル###################"

p $stdin
p $stdout
p $stderr
$stderr.printf("%X\n",0xcafe)


puts "################ファイル###################"
File.open("opentext2.txt",'w'){|text|
    p text
    $stdout = text    #標準出力先をコマンドラインから指定ファイルに変更
    p $stdout
    puts "Welcome to Glubbdubdrib"
    p text
    p STDOUT
    $stdout = STDOUT  #標準出力をもとにもどす
    p $stdout
}

puts "################ファイルIO###################"

require 'stringio'#stringioの読み込み、StringIOを使うため
buffer = String.new#StringIOで使うStringオブジェクト bufferとはデータの蓄積先

sio = StringIO.new(buffer)#StringIOに渡す
p $stdout
$stderr = $stdout = sio#出力先を変更
puts "untuh"
warn "outed"
$stdout = STDOUT
puts buffer
puts sio
$stderr = STDOUT

Ruby 単語説明

名前の検索とは?
 オブジェクトにメッセージが渡された時の振る舞い、狭いスコープ範囲から広い範囲へと探していく。

*特異メソッドとは


*メソッドのオーバーロード? Rubyはオーバーロードはありません


*メタプログラミングとは?


*特異クラスとは?


*ダックタイピングとは? オブジェクトが同じように振舞うなら区別する必要はないと考える意味

Ruby言語 オブジェクトとクラス

puts "##########アクセス########1"      

class Yapoo

    def public_method; end
   
    private
    def internal_use
        puts "成功"
     end
   
    public
    def public_api
        return internal_use
    end
end
    yapoo = Yapoo.new
    yapoo.public_api
    #yapoo.internal_use
   
   
puts "##########特異メソッド 特異クラス########"
     
message = "Hello"
def message.build_greeting(target)  #特異メソッド オブジェクト専用のメソッド
    #return "#{self}, #{target}."

end

p message.build_greeting("world")
p message2 = "Hello"
#p message2.build_greeting("world")  #エラーが出ます。メソッドはありません「undefined method....」と


puts "##########クラスメソッドとメタクラス########"

class Duration1
    def initialize(since,till)
        puts "kita"
        puts since
        puts till
        @since = since
        @till = till
    end
    #attr_accessor :since, :till
    class << self  #特異クラスを定義Duration1
        p self #デバック
        def week_from(from)#クラスメソッド
            puts "kita2"
            return self.new(from, from+7*24*60*60)#一週間の秒数
        end
    end
end

#Duration1.new(Time.now,Time.now)
p  Duration1.week_from(Time.now)




Ruby言語 クラス定義

puts "##########クラスメソッドの定義########1"      

class Duration
    def display; puts self end    #インスタンスメソッド
end

duration = Duration.new    #インスタンスの生成
duration.display      #=>#<Duration:0x2855850>

puts "##########クラスメソッドの定義########2"

class Duration1
    def Duration1.print(x); p x end    #クラスメソッド
end

Duration1.print 2     #=>2


puts "##########クラスメソッドの定義########3"

class Duration3
    p self
   
    def self.print(x); #selfはクラス自身を指す
    p x
    p self
    end    #クラスメソッド
    def self.test(x ); p x += x end    #クラスメソッド
end

Duration3.print 2   #=>1
Duration3.test 2   #=>1
Duration3.test 2   #=>1

puts "リファクタリングとはプログラムの機能を変更しない修正の事"


puts "##########インスタンス化########4"

class Duration4
    def initialize(since,till)  #javaで言うコンストラクター的なもの
        @since = since
        @until = till
    end
    attr_accessor :since, :until    #指定したインスタンス変数に、seter/getterメソッドを組み込む
end

duration4 = Duration4.new(Time.now, Time.now + 3600)
p duration4.until
p duration4.since
p duration4.since = Time.now + 4600

puts "##########インスタンス化########5"

class Duration5
    def initialize (since,till)
        @since = since
       @till = till
 end

 def since=(value); @since = value end


 def till=(value);@till = value end

 def since
     return @since
 end

 def till
     return @till
 end

end


duration5 = Duration5.new(Time.now,Time.now + 3600)
p duration5.since
p duration5.till
p duration5.since = Time.now + 3600
p duration5.since


puts "##########クラス定義の追加########6"

class String
    def caesar; tr 'a-zA-Z', 'n-za-mN-ZA-M' end
end

puts "Learning Ruby".caesar

puts "##########クラス定義の追加########7"


class Fixnum
    alias original_addition + #元の定義を別のメソッドで退避、(別名で定義)
    def +(rhs) #再定義
        original_addition(rhs).succ #succは次の整数を返す
    end
end

p 1+ 1 #=>3
p 5 + 2  #=>8


puts "##########クラス定義の追加########8"

class Duration8
    def initialize (since,till)
        @since = since
       @till = till
 end
attr_accessor :since, :till  #アクセサメソッド
    def display(target=$>)
        super #Objyectクラスのdisplayをよびだす オーバーライドする
        target.write "(#{self.since}-#{self.till})" #displayの引数に渡す
    end
end


duration8 = Duration8.new(Time.now,Time.now + 3600)
duration8.display

puts "#########インスタンス変数########"

class Duration9
    def initialize (since,till)
        @since = since
       @till = till
 end
    def print_since;p @since end
end

duration9 = Duration9.new(Time.now-7,Time.now)
duration10 = Duration9.new(Time.now+7,Time.now + 14)
duration9.print_since
duration10.print_since


puts "#########クラス変数########"

class Foo
    @@class_variable = "foo"
    def ttt
        p @@class_variable
    end
end

class Bar < Foo
    p @@class_variable
    @@class_variable = "bar"
    def print
        p @@class_variable
    end
end

#foo = Foo.new
#foo.ttt
#bar = Bar.new
#bar.print

2011年5月6日金曜日

Ruby メソッドとは

puts "##########メソッド########1"     


str = "abcd<efgh>ijkl mnop"

esca_str = str.gsub(/&/, '&amp;').gsub(/</, '&lt;').gsub(/>/, '&gt;').gsub(/ /, '&ensp;')

puts esca_str

puts "##########レシーバの省略########1"

class Laputa
    def hover
        puts "vibrateを呼び出します。"
        vibrate
        puts "vibrateをselfで呼び出します。"
        p self
        self.vibrate
      
        puts "名前の衝突開始"
        vibrate = 1  #名前の衝突
        p vibrate
      
        puts "selfを使い自分自身のメソッドの呼び出し"
        self.vibrate #selfを使い自分自身のメソッドの呼び出し
    end
  
    def vibrate
        p self
        puts "vibrateが呼ばれた"
        #何かの処理
    end
end

def vibrate
    puts "Laputa外の関数"
end

takalamakhan = Laputa.new #コンストラクタの呼び出し。インスタンスの生成。
taka1 = takalamakhan.hover

takalamakhan2 = Laputa.new
takalamakhan2.hover
p takalamakhan.equal? takalamakhan2   #オブジェクトが同じものか?
vibrate   #Laputa外の関数を呼び出し

puts "########## 関数的 メソッド ########1"

def functional_method(a, b)
    return [a, b, a+b]
end
p functional_method(1, 2) #=>[1, 2, 3]



puts "########## 引数展開 ########1"

def some_method(a, b)  #仮引数
    p [a, b]
end

params = [1, 2]
x, y = params    #多重代入の場合は暗黙変換される
some_method(x, y)     #=>[1, 2]
#some_method(params) #配列から実引数リストへの自動的な展開は行われない。

puts "########## メソッドの定義 ########1"
puts "メソッド定義がdefを使う"

def sum(x, y)
    puts x + y
end

def diff x, y #括弧を省略スタイル
    puts x - y
end

def prod(x, y) puts x * y end #1行にマトメルスタイル
def quo x, y ; puts x / y end #括弧省略の1行マトメスタイル セミコロンは引数渡しの終わり

sum(1, 2)     #=>3
diff(1, 2)    #=>-1
prod(1, 2)    #=>2
quo(1, 2)     #=>0


puts "########## メソッドの定義 return ########"

def fact(n)
    return 1 if n == 0
    product = 1
    (1 .. n).each do |i|
        product *= i
        puts product
    end
    return product  #returnは必須ではありません。returnがない場合はメソッド末尾に到達すると最後の式が戻り値になります。
end

puts fact(10)   #=>3628800


puts "一行で記述した場合 メソッドの最後の式が戻り"
def fact2(n); (1 .. n).inject(1){|fe,i|fe*i} end  #fe,iはfeにiを代入している
puts fact2(10)   #=>3628800


puts "########## メソッドの定義 多値の返却 ########"

def some_method(a)
    return a, 1, 2 ,3
end
 a , b , *c = *some_method(0)
p a
p b
p c


puts "########## メソッドの定義 引数展開 ########"

def some_method(a , b , c)
    return a , b  , *c
end


array = [3 , 4 , 5]
te = some_method(1 , 2 , array)
p te


puts "########## メソッドの定義 デフォルト値 ########"

def some_method(a, b, c = 3)
    p a, b, c
end
some_method(1,2,4)  #デフォルト値を変更
some_method(1,2)    #デフォルト値がある仮引数は省略可能

puts "########## メソッドの定義 デフォルト値の評価コンテキスト ########"

def print_time(time = Time.now)
    return time
end

(0 .. 3).each do |i|
    p print_time
    sleep 0.1
end

puts "########## メソッドの定義 可変長引数 ########"


def some_method2(a, b, *c) #残りは配列で渡し
     return a, b, *c #cは展開渡し
end
some = some_method2(1,2,3,4,5,6,7,8,9,0)
p some  #=>[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]


puts "########## メソッドの定義 ブロックつきメソッド ########"


verse = "点士気喪 字時字時字時\nTESR TETTTTT\n"

count = 0 #

verse.each_line do |line|
    print line
  
    count += 1 #=>点士気喪 字時字時字時 改行されてTESR TETTTT
    p count
end

p count


puts "########## メソッドの定義 クローじゃ ########"


def some_method
    3.times {p self}  #=>main
end

some_method

puts "########## メソッドの定義 クローじゃ ########"

def create_count
    count = 1
    return Proc.new do
        count += 1
        p count
    end
end

counter = create_count #メソッドの呼び出し
p counter.class        #Procクラスの表示
counter.call  #=>2
counter.call  #=>3


counter2 = create_count
p counter2.class  
counter2.call  #=>2
counter2.call  #=>3


puts "########## メソッドの定義 クローじゃ ########"
count = 0
[[1,2],[3,4]].each do |num , nums|
    p [num , nums]
    p count += 1
end

#p [num , nums]     #ブロック変数へはブロックローカル変数外部よりできません


puts "########## メソッドの定義 ブロックつきメソッドの定義 ########"

def foo_bar_baz
 yield "foao"
 yield "barsss"
 yield "bazsss"
end

g = 0
foo_bar_baz do |item|
    p g+=1
    puts item
end


puts "########## メソッドの定義 イテレータの中のyield ########"


def foos_bars_bars2
    %w[foos bars1 bars2].each do |items|
        yield items
    end
end
g = 0
foos_bars_bars2 do |items|
    p g+=1
    puts items
end
puts "########## メソッドの定義 Enumeratorとyield ########"


def foos_bars_bars3
    p block_given? #trueかfalseを返す
    return enum_for(:foo_bar_baz3) unless block_given?  #メソッドにブロックが渡されたかで動きを変える
    %w[foo bar baz].each do |item|
        yield item
    end
end


p foos_bars_bars3   #ブロック無し

foos_bars_bars3 do |item|            #ブロックあり
     p item
end

puts "########## メソッドの定義 Enumeratorとyield ########"
def my_map
    [yield(1),yield(2),yield(3)]
end
p my_map {|i| i+1}

my_map do |i|
     p i+1
end