C言語と違うところ2

  • 配列
irb(main):019:0> ary1 = [3, d-3.0, "orange"]
=> [3, 4.0, "orange"]
irb(main):020:0> ary1[0]
=> 3
irb(main):021:0> ary1[0..2]
=> [3, 4.0, "orange"]

配列は[]の中にオブジェクトを並べて定義する。

irb(main):023:0> ary1[-1]
=> "orange"
irb(main):024:0> ary1[-2]
=> 4.0
irb(main):026:0> ary2 = [a, ary1]
=> [2, [3, 4.0, "orange"]]
irb(main):027:0> ary2[1][2]
=> "orange"

配列の添え字が負の数の場合は配列を後ろから見た結果。
配列の中に配列を入れられる。

  • for文
for i in 1..5
print(i,"\n") #"puts i"も同じ
end
  • if文
a = 2
if a == 0
  puts "a is zero."
elsif a < 0
  puts "a is negative."
else
  puts "a = #{a}" #"#{a}"はaの値参照
end

# 実行結果
# a = 2
  • if修飾子

whileにもwhile修飾子がある。

s = "me"
puts "too short." if s.size < 4 #後付けif文

# 実行結果
# too short
  • case文

switch的な。

score = 35
case score
when 0..49 # 0以上49以下
  puts "failure"
when 50..79 # 50以上79以下
  puts "pass"
else # 80以上
  puts "excellent"
end

# 実行結果
# failure
  • next
for i in 1..10 # next はループ条件式直前にジャンプ
  next if i==5
  puts i
end

# 実行結果
# 1
# 2
# 3
# 4
# 6
# 7
# 8
# 9
# 10

5だけジャンプされた。
ちなみに、redoを使うと、直前(ひとつ上)にジャンプ。

C言語と違うところ1

チュートリアルを見ればいい
かもしれないけど、一応メモ(・ω・)

  • Hello, World

標準出力は
puts "Hello, World"
または
print("Hello, World\n")
しかも!
最後の「;」は要らない!!うっかりつけてしまいそう。。

  • 変数

変数というより、実際はオブジェクト

a=2 #整数オブジェクト
b=3.5 #実数オブジェクト
c="apple" #文字列オブジェクト

型宣言不要!!!

irb(main):004:0> a
=> 2
irb(main):005:0> b.class #classメソッド「型を述べよ」メッセージ
=> Float
irb(main):006:0> c.size #sizeメソッド「大きさを述べよ」メッセージ
=> 5
  • 演算
irb(main):014:0> d,e = a*b, c+"lemon"
=> [7.0, "applelemon"]

文字列の足し算もしてくれる。
いっぺんに複数のオブジェクトに対する演算が可能。
「**」演算子⇒累乗!

  • キャスト
irb(main):015:0> f = b.to_s #文字列に変換
=> "3.5"
irb(main):016:0> g = b.to_i #整数に変換
=> 3
irb(main):017:0> h = a.to_f #実数に変換
=> 2.0

データベース試作3

  • 解決

エンコーディングの問題は…
なぜかクリアしてました…
クリアした理由が分からないのが残念(;ω;)

今日覚えたことのメモ

+---------+----------------+------+-----+---------+----------------+
| Field   | Type           | Null | Key | Default | Extra          |
+---------+----------------+------+-----+---------+----------------+
| id      | int(11)        | NO   | PRI | NULL    | auto_increment | 
| conid   | int(11)        | YES  | MUL | NULL    |                | 
| name    | varchar(100)   | YES  |     | NULL    |                | 
| address | varchar(200)   | YES  |     | NULL    |                | 
| lat     | decimal(23,20) | YES  |     | NULL    |                | 
| lon     | decimal(23,20) | YES  |     | NULL    |                | 
+---------+----------------+------+-----+---------+----------------+

のdecimal(23,20)は10進数の桁数23でそのうち小数点以下が20桁、というデータ型。

データベース試作2

  • id は自動的にインクリメントしてあげたい。
mysql> alter table conveni modify id int auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table store modify id int auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
  • カラムを指定した位置に追加してあげたい。
mysql> alter table store add name varchar(100) after conid;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
  • データの格納
mysql> insert into conveni
    -> (null,'エーエム・ピーエム'),
    -> (null,'サンクス'),
    -> (null,'スリーエフ'),
    -> (null,'セブンイレブン'),
    -> (null,'デイリーヤマザキ'),
    -> (null,'ナチュラルローソン'),
    -> (null,'ファミリーマート'),
    -> (null,'ミニストップ'),
    -> (null,'ローソンストア100'),
    -> (null,'ローソン');

すると、
現在のエンコーディングutf-8に合わないデータを受信しました。
って怒られた(;;
…明日またエンコーディングの設定からやります。

データベース試作1

  • データベースの作成

試しにkomikkomikkoという名前で作ってみる。

mysql> create database komikkomikko;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| conveni            | 
| komikkomikko       | 
| mysql              | 
| test               | 
+--------------------+
5 rows in set (0.00 sec)
  • データベースの削除

そして消えてもらう。

mysql> drop database komikkomikko;
Query OK, 0 rows affected (0.10 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| conveni            | 
| mysql              | 
| test               | 
+--------------------+
4 rows in set (0.00 sec)
  • テーブル作成
mysql> create table conveni(
    -> id int,
    -> name varchar(100)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> show fields from conveni;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | YES  |     | NULL    |       | 
| name  | varchar(100) | YES  |     | NULL    |       | 
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

あ゛、idを主キーにするのを忘れた。。

mysql> alter table conveni add primary key (id);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

もう一個こんなテーブルを作成。

+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | NO   | PRI | 0       |       | 
| conid   | int(11)      | YES  |     | NULL    |       | 
| address | varchar(200) | YES  |     | NULL    |       | 
+---------+--------------+------+-----+---------+-------+

store(店舗)テーブルには、conveni(コンビニの種類)を参照するためにconid(コンビニid)をもつので、

mysql> alter table store add foreign key (conid) references conveni (id) on delete cascade on update cascade;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

で関連付け。
on delete/update cascade は、削除や更新において、
整合性がちゃんと取れるようにつける。

CentOS5にRaillsインストール未遂

#wget http://rubyforge.org/frs/download.php/35283/rubygems-1.1.1.tgz
--10:09:14--  http://rubyforge.org/frs/download.php/35283/rubygems-1.1.1.tgz
rubyforge.org をDNSに問いあわせています... 失敗しました: 名前解決時の一時的な失敗.

これがまず失敗する。
そこで、Windowsでいったんダウンロードして、CentOSの方にうつした。
以下は解凍のコマンドをメモ

#tar xzf rubygems-1.1.1.tgz

rubygems-1.1.1のディレクトリに移動して
RubyGemsをインストール

#ruby setup.rb
install -c -m 0644 ubygems.rb /usr/lib/ruby/site_ruby/1.8/ubygems.rb
/usr/lib/ruby/1.8/fileutils.rb:1246:in `initialize': Permission denied - /usr/lib/ruby/site_ruby/1.8/ubygems.rb (Errno::EACCES)
        from /usr/lib/ruby/1.8/fileutils.rb:1246:in `open'
        from /usr/lib/ruby/1.8/fileutils.rb:1246:in `copy_file'
        from /usr/lib/ruby/1.8/fileutils.rb:1245:in `open'
        from /usr/lib/ruby/1.8/fileutils.rb:1245:in `copy_file'
        from /usr/lib/ruby/1.8/fileutils.rb:459:in `copy_file'
        from /usr/lib/ruby/1.8/fileutils.rb:835:in `install'
        from /usr/lib/ruby/1.8/fileutils.rb:1379:in `fu_each_src_dest'
        from /usr/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest0'
        from /usr/lib/ruby/1.8/fileutils.rb:1377:in `fu_each_src_dest'
        from /usr/lib/ruby/1.8/fileutils.rb:831:in `install'
        from /usr/lib/ruby/1.8/fileutils.rb:1510:in `install'
        from setup.rb:113
        from setup.rb:108:in `each'
        from setup.rb:108
        from setup.rb:105:in `chdir'
        from setup.rb:105

!!!!?????

Permission denied … 権限がない

ので、再チャレンジ

#sudo ruby setup.rb
Password:
---ワーっと出てきて
== Thanks

Keep those gems coming!

-- Jim & Chad & Eric (for the RubyGems team)


------------------------------------------------------------------------------

RubyGems installed the following executables:
        /usr/bin/gem

If `gem` was installed by a previous RubyGems installation, you may need
to remove it by hand.
  • Railsインストール
#gem install rails --include-dependencies
INFO:  `gem install -y` is now default and will be removed
INFO:  use --ignore-dependencies to install only the gems you list
ERROR:  could not find rails locally or in a repository

はまりました。
そもそもwgetに失敗する時点で何かがおかしい。
と思って調べていたのですが
時間がなくて断念(;;
ファイアウォールを有効にしてるのって関係ありますか??
…火曜日以降再チャレンジしてみます。

どこにどういうファイルが保存してあって、
ダウンロード・インストールするときはどこにしたらいいとか(根本!!??)
要勉強です><

アカウントとパスワード

rootのパスワードを変更するのに悩んだ話。

mysql> set password for root=password('パスワード');
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye

で、いざ、もいちどMySQLに接続!
…??パスワード変わってない(´・ω・`)


前のパスワードで入ってみてユーザを確認してみたところ。

mysql> select user,host from mysql.user;
+------------+-----------+
| user       | host      |
+------------+-----------+
| root       | %         | 
| root       | localhost | 
+------------+-----------+

rootよ。なんで2個もあるんですか。。
調べてみると、
OSで使ってる名前とMySQLで使ってるアカウントは別もので
つまり
root@localhostとroot@%は別もので
いつも接続するのはroot@localhostの方なので
こっちのパスワードを変更しないとでした。

mysql> set password for root@localhost=password('パスワード');
Query OK, 0 rows affected (0.00 sec)

これで、パスワードの変更は完了しましたっ。