IPアドレスの読み方
IPアドレスとは
- Internet Protocol Address
- パケットを送受信する危機器を判別するための番号
- つまり、インターネット上の住所みたいなもの
- IPv6
- 2128(=約340澗個)存在する
- 340兆の1兆倍の1兆倍
- 2128(=約340澗個)存在する
ネットワーク番号とホスト番号
IPアドレスは、「何丁目、何番地」というふうな二つの部分から構成されている
その二つの部分がネットワーク番号とホスト番号である
- ネットワーク番号
- 丁目を表す
- ネットワーク全体を構成する最小単位のネットワークを表す
- TCP/IPに於いてこの、最小単位のネットワークをたくさん集めて全体の大きなネットワークが出来ていると考える
- ホスト番号
- 番地を表す
- ネットワーク番号で指定されたネットワーク内の住所を表す
ネットマスク
何ビットがネットワーク番号で、何ビットがホスト番号なのかを表すのが、ネットマスクである
- ネットマスクを含めた表記
- 10.11.12.13/24
- /24というのがネットマスク
- 24ビット分がネットワーク番号ということを表す
- 他の表記
- 10.11.12.13/255.255.255.0
- こちらのネットマスクを二進数で表すと11111111.11111111.11111111.00000000となる
- 1と表記されている箇所がネットワーク番号を表す
- 10.11.12.13/255.255.255.0
- 特別な意味をあわらすIPアドレス
最後までお読みいただきありがとうございました。
ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識
- 作者: 戸根勤,日経NETWORK
- 出版社/メーカー: 日経BP社
- 発売日: 2007/04/12
- メディア: 単行本(ソフトカバー)
- 購入: 31人 クリック: 372回
- この商品を含むブログ (99件) を見る
Excel VBAマクロのオブジェクトとメソッド
今回は、プロパティに引き続いてメソッドに関してまとめたいと思います。
前回のまとめ
Excel VBAマクロのオブジェクトとプロパティ - mic_footprints
メソッドとは何か
- メソッドとは、オブジェクトに対して行う処理のこと
- つまり、ふるまい
- プロパティ同様メソッドもオブジェクトとの間を.(ドット)で繋ぐ
メソッドには引数(ひきすう)がある- プロパティにも引数はあります(あるらしい)
例えば
-
- Rangeオブジェクトの中身をクリアしたい時に使用するメソッドは「Clear」
Range("A1:A10").Clear
-
- Rangeオブジェクトを選択したい時に使用するメソッドは「Select」
Range("A1:A10").Select
メソッドの引数とは何か
- メソッドのふるまいを詳細に定義付けるもの
例えば
-
- Rangeオブジェクトのメソッドの「End」
- ふるまい的には、次にセルの値が""になる手前のセルを返す
- Rangeオブジェクトのメソッドの「End」
Range("A1").End(xlDown).Row
この場合
-
- Range("A1")がオブジェクト
- Endがメソッド
- xlDownが引数
- Rowがプロパティ
オブジェクト・プロパティ・メソッド
先程の、Endメソッドを再び例にとってオブジェクト、プロパティ、メソッドを説明します。
Range("A1").End(xlDown).Row
- Range("A1")はRangeオブジェクト
- EndはRangeオブジェクトのメソッド
- 次にセルの値が空("")になるセルを返す
- つまり、私たちが認識するべき重要なEndメソッドのふるまいは、「セルを返す」
- xlDownはEndメソッドの引数
- Endメソッドは、引数でどの方向のセルを返すかを決定している
- この場合は、下方向
- RowはRnageオブジェクトのプロパティ
- この時のRowがかかっているRangeオブジェクトは、Range("A1").End(xlDown)で表させるセル
- つまり、Endメソッドのふるまいによって返されたRangeオブジェクトのプロパティであるRowを参照している
このように、オブジェクトとプロパティとメソッドは深く密接に関係し合っています
重要なことのまとめ
- 自分が指定したものが、何オブジェクトなのかを意識する
- これにより、使用できるメソッド、プロパティがわかる
- プロパティはウォッチ式を使用することで、全容を把握できる
- 自分が取得したい値が何という名前のプロパティなのかを見ることができる
- 取得したいプロパティが何オブジェクトなのかも、把握することが大切
- メソッドのふるまいを意識することが重要
- ふるまいを意識することで、自分が今何オブジェクトを操作しているのかがわかる
- ふるまいをよく理解しなければ、思い通りの挙動を実現することは難しい
最後までお読みいただきありがとうございました。
やさしくわかるExcel関数・マクロ 改訂版 (Excel徹底活用シリーズ)
- 作者: 西沢夢路
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2007/07/25
- メディア: 大型本
- 購入: 1人 クリック: 84回
- この商品を含むブログ (13件) を見る
MySQLの入門まとめ
SQLについて学んだのでまとめてみた
参考文献
- 作者: 小野哲
- 出版社/メーカー: 技術評論社
- 発売日: 2007/12/25
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 318回
- この商品を含むブログ (17件) を見る
SQLとは
- Structured Query Languageの略称
- 日本語で言うと、構造化問い合わせ言語
- つまり、データベースへ問い合わせるための言語である
- ※公式にはSQLは何の略称でもないらしい(参照:http://ja.wikipedia.org/wiki/SQL#cite_note-0)
SQLを書くに当たって
3つの掟
SQLは英作文みたいなもの
プロセスとしては
所感
- 日本語で書けないことは、SQLでも書けない
- ということは、まず、日本語で文章化してみることが、早くアウトプットに繋がる道である
SQLの基本的な構文
SQLのもっとも基本的な構文
SELECT A FROM B WHERE C
- 上の意味はBテーブルからCという条件でAを取得する
- サンプルテーブル
mysql> use test Database changed mysql> SHOW tables; +----------------------------+ | Tables_in_saiyo_dev_branch | +----------------------------+ | users | | diaries | +----------------------------+ 2 rows in set (0.00 sec) mysql> DESCRIBE users; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | name | varchar(40) | YES | | | | +-------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql> DESCRIBE diaries; +---------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | user_id | int(11) | | | | | | title | varchar(40) | YES | | | | | body | text | YES | | | | +---------+-------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
例えば、
mysql> SELECT users.* FROM users WHERE users.id < 3; +----+------+ | id | name | +----+------+ | 1 | 太郎 | | 2 | 花子 | +----+------+ 2 row in set (0.00 sec)
- usersテーブルから、usersテーブルのidカラムが3未満であるという条件でusersテーブルの全カラムを取得する
SELECT句(select clause)
FROM句(from clause)
- 検索をかける対象の指定する句(厳密には違うが)
- エイリアスを付けるとこが出来る
- 例えば、FROM users members
- サブクエリ(副問い合わせ)でテンポラリテーブルを作成することが出来る
- テンポラリテーブル内はインデックスが使用できない
- エイリアスを付けるとこが出来る
WHERE句(where clause)
- 検索条件を指定する句
- 「=,<,>,<>,IN」などの演算子を使用する
結合
- テーブルとテーブルをある条件でくっつける
- FROM句とWHERE句で指定する
- 複数のテーブルにまたがって検索をかけたい時などに結合を利用する
- 結合することをJOINという
- 構文
mysql> SELECT A FROM B JOIN D ON E WHERE C;
テーブルDをEという条件で結合する
INNER JOIN
- もっとも基本的なJOIN
mysql> SELECT * FROM diaries JOIN users ON diaries.user_id = users.id; +----+------+----+---------+-----------+--------+ | id | name | id | user_id | title | body | +----+------+----+---------+-----------+--------+ | 1 | 太郎 | 1 | 1 | テスト | MysSQL | | 1 | 太郎 | 2 | 1 | テスト2 | SQLite | +----+------+----+---------+-----------+--------+ 2 row in set (0.00 sec)
- 結合方法
- ON以下の条件で結合を行う
- 上記の例でdiariesを持っていないuserがいたときには、JOINの対象から外れ
- つまり花子が消えている
- 「JOIN」と省略できる
LEFT OUTER JOIN
- 構文
mysql> SELECT * FROM diaries JOIN users ON diaries.user_id = users.id; +----+------+------+---------+-----------+--------+ | id | name | id | user_id | title | body | +----+------+------+---------+-----------+--------+ | 1 | 太郎 | 1 | 1 | テスト | MysSQL | | 1 | 太郎 | 2 | 1 | テスト2 | SQLite | | 2 | 花子 | NULL | NULL | NULL | NULL | +----+------+------+---------+-----------+--------+ 3 row in set (0.00 sec)
- 結合方法
- ON以下の条件で結合を行う
- 上記の例でdiariesを持っていないuserがいたときには、diariesのカラムがNULLになる
- 花子のレコードそうである
- 「LEFT JOIN」と省略できる
その他
- 以下のJOINもあるけど、使ったことがないので割愛
- RIGHT OUTER JOIN
- 結合の仕方がLEFT OUTER JOINと逆
- CROSS JOIN
- 全組み合わせでJOINする(MySQLではINNER JOINと同じ)非連結結合
- ほぼ確実に使わない
- RIGHT OUTER JOIN
最後までお読みいただきありがとうございました。
joins オプションとinclude オプションの決定的な違い
railsのfindメソッドのincludeオプションとjoinsオプションの違いに付いてまとめてみた
- 環境
- rails 1.2.3
- DB構成
mysql> DESCRIBE users; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | name | varchar(40) | YES | | | | +-------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql> DESCRIBE diaries; +---------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+---------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | user_id | int(11) | | MUL | 0 | | | body | text | YES | | | | +---------+---------+------+-----+---------+----------------+ 3 rows in set (0.00 sec) mysql> DESCRIBE comments; +----------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+---------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | user_id | int(11) | | MUL | 0 | | | diary_id | int(11) | | MUL | 0 | | | body | text | YES | | | | +----------+---------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
- リレーション
class User < ActiveRecord::Base has_many :diaries has_many :comments end class Diary < ActiveRecord::Base; belongs_to :user has_many :comments end class Comment < ActiveRecord::Base; belongs_to :user belongs_to :diary end
joins
User.find(:all, :joins => "LEFT OUTER JOIN diaries ON diaries.user_id = users.id", :conditions => ["users.id = ?", "1"])
- 発行される SQL
SELECT * FROM users LEFT OUTER JOIN diaries ON diaries.student_id = users.id WHERE users.id = 1
-
- SELECT句には*が発行される
- FROMの後にjoinsで指定した文字列が発行される
- レスポンス
[#<User:0xb6f61e0c @attributes={"id"=>"2", "name"=>"太郎", "user_id"=>"1", "body"=>"joins オプションとinclude オプションの決定的な違い"}>]
-
- Userモデルのオブジェクトの属性"@attributes"として全カラムが格納されて返ってくる
- idカラムの値が上書きされている
include
User.find(:all, :include => [:diaries], :conditions => ["users.id = ?", "1"])
- 発行される SQL
SELECT users.`id` AS t0_r0, users.`name` AS t0_r1, diaries.`id` AS t1_r0, diaries.`user_id` AS t1_r1, diaries.`body` AS t1_r2 FROM users LEFT OUTER JOIN diaries ON diaries.user_id = users.id WHERE users.id = 1
- レスポンス
[#<User:0xb6f61e0c @attributes={"id"=>"1", "name"=>"太郎"}, @diarys=[#<Diary:0xb6f61768 @attributes={"id"=>"2", "user_id"=>"1", "body"=>"joins オプションとinclude オプションの決定的な違い"}>]>]
-
- Userクラスのオブジェクトの属性"@attributes"には、usersテーブルのカラムが格納され、"@diarys"には、Diaryクラスのオブジェクトが格納され、その中には、diariesテーブルのカラムが格納されている
二つのオプションの決定的な違い
- include
- 参照をキャッシュして保存している
- SQL問い合わせ後、関連先のオブジェクトとして準備してくれる
- joins
- 併用
- includeとjoinsは併用が可能
- 注意するべき点
- joinsはSELECT句を生成しない
- includeでエイリアスが貼られてSELECT句に格納されるのは、findの対象とincludeで指定されたテーブルのみ
- つまり、joinsとincludeを併用した場合、joinsで指定して、JOINしたテーブルのカラムはSELECTされない
- 使い分け
- 実務上、includeがとても便利である
- joinsは、そのテーブルのカラムの情報自体は不要であるが、検索条件に追加したい場合などに指定すると良い
- 例えば、
User.find( :all, :joins => "LEFT OUTER JOIN comments ON comments.user_id = users.id", :include => [:diaries], :conditions => ["users.id = ? AND comments.body LIKE ?", "1", "%Rails%"] )
-
-
- 発行される SQL
-
SELECT users.`id` AS t0_r0, users.`name` AS t0_r1, diaries.`id` AS t1_r0, diaries.`user_id` AS t1_r1, diaries.`body` AS t1_r2 FROM users LEFT OUTER JOIN diaries ON diaries.user_id = users.id LEFT OUTER JOIN comments ON comments.user_id = users.id WHERE users.id = 1 AND comments.body LIKE '%Rails%'
最後までお読みいただきありがとうございました。
Excel VBAマクロのオブジェクトとプロパティ
今回は、Excel VBAをより深く理解するためにオブジェクトとプロパティについてまとめます。
VBAでのオブジェクト
VBAはVBの派生系ですから、手続き型言語です。
ですので、厳密には、オブジェクト指向言語とは異なりますが、
短時間で有効なコーディングをする上でこの違いは特に認識する必要は内容に思います。
オブジェクトとは何か
- VBAでは、操作対象となる全てのものがオブジェクト
例えば
-
- セルはRangeオブジェクト
- ワークシートはWorkSheetオブジェクト
- ブックは、Workbookオブジェクト
- Excel自体もオブジェクトで、Applicationオブジェクト
プロパティとは何か
- プロパティは、日本語で言うと「属性」
- [Object].[Property]でオブジェクトのプロパティにアクセス出来る
例えば、
たかし君は「人間オブジェクト」
たかし君の身長を知りたいとする
「人間オブジェクト」は「身長プロパティ」を持っている
つまり、"たかし君.身長"でたかし君の身長を取得することができる
このようなイメージ
実際のExcelでの、例を見てみる
Range("A1").Column ' => 1
Rangeオブジェクトには、列の情報を格納する属性があり、Columnという
プロパティは出力のみではない
例えば
a = Range("A1").Value ' aという変数にA1セルの値を出力している
-
- 入力
Range("A1").Value = "テスト" ' A1セルの値に"テスト"という文字列を入力している
(大概のプログラミング言語がそうであるが)VBAでは、左辺に右辺から値を代入するという記法を採用している
ちなみに、詳細なプロパティはVBEを立ち上げてウォッチ式で見ることが出来る☆
やさしくわかるExcel関数・マクロ 改訂版 (Excel徹底活用シリーズ)
- 作者: 西沢夢路
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2007/07/25
- メディア: 大型本
- 購入: 1人 クリック: 84回
- この商品を含むブログ (13件) を見る
働くとは何ぞや---社会人最初の半年を振り返ってみて---
今日で、社会人になって半年が経ちました。
経った時に会社にいたことはさておき(笑)、社会人最初の半年を振り返ってみようと思います。
で、働くとは何ぞやっていうのを、今の自分なりにまとめてみたいと思います。
半年前、わたしは、ただの小生意気な学生でした。
働くとは何ぞやってことなんか、わかっているなんて勘違いしていました。
というより、わかっている自分でいたかった。
でも、本当は、何にもわかっちゃいませんでした。
ただただ、未熟でした。
子供でした。
半年が経ち、いろいろな失敗をしました。
沢山の人に、迷惑をかけました。
そんな中で、周りの人にたくさん支えられて、たくさんのことを学ぶことができました。
本当に感謝しています。
で、今、私が働くことをどのように捉えているかといいますと、
それは、相手へ望みを叶え、貢献をすること
つまり、自分本位では仕事はできないということです。
そんなことは、働く前から分かっていたつもりでしたが、全然行動が伴っていなかった。
つまり、心底理解できていなかったのでしょう。
でも、今は理解出来ている気がします。
相手へ貢献することが、とても心地良く非常に楽しいということも。
そして、相手の本当の望みが相手が気付いてもいない望みであればあるほど、感動を与えられることが出来るのでしょう。
そんな感動を与えられるようなビジネスマンになりたい。
半年経って心の底から思いました。
つまり、今の段階での私の働くとは何ぞやは、「相手の望みを叶え貢献をし、そのことで自分も喜びを得るという行動」であると考えています。
私も、相手を尊重し、お互いを高めあいながら、相手へ貢献することが出来たのなら、
少しは成長したといってもらえるかもしれませんね(笑)
まだまだ、始まったばかり!
これからもっともっと自分を磨いていきたいと思った社会人7ヶ月目でした。
最後までお読みいただきありがとうございました。
sortとsort_by
今回は、Rubyに関して書きます
sortメソッド
- Arrayクラスのメソッド
- 配列内の要素を並び替えすためのメソッド
- 数の大きさ
- 行の長さ
- アルファベット順
- アルファベット逆順
- などなど
- 配列内の要素を並び替えすためのメソッド
たとえば、
array = ["a", "c", "b", "f", "d", "e"] sorted = array.sort do |a, b| a <=> b end p sorted #=> ["a", "b", "c", "d", "e", "f"]
sortメソッドは、配列の要素を余分に呼び出します。
どういう事かというと、
array = ["a", "c", "b", "f", "d", "e"] i = 0 sorted = array.sort do |a, b| i += 2 a <=> b end p sorted #=> ["a", "b", "c", "d", "e", "f"] p i #=> 20
つまり、サイズが6の配列に対して、要素の呼び出し回数が20回であり、
これが、サイズの大きい配列とかになると非常に時間がかかってしまいます。
sort_byメソッド
sortメソッドでは非常に処理に時間がかかってしまう場合に使用されるのが、sort_byメソッド
array = ["a", "c", "b", "f", "d", "e"] i = 0 sorted = array.sort_by do |item| i += 1 item end p sorted #=> ["a", "c", "b", "f", "d", "e"] p i #=> 6
sort_byメソッドは、すべての要素に対して、同じ条件でソートを行ないたい時に使用します。
実際の使用例
mysql> select * from users; +----------+--------+ | name | age | +----------+--------+ | タナカ | 22 | | スズキ | 22 | | サトウ | 21 | | ヨシダ | 22 | +--------- +--------+ 4 rows in set (0.01 sec)
sort_byメソッドは、並び替え条件に配列を指定することができる。
users = User.find(:all) sorted = users.sort_by do |u| [u.age, u.name] end p sorted.map(&:name) #=> [サトウ, スズキ, タナカ, ヨシダ]
この場合、第一条件がageで第二条件がnameです。
安定なソートと不安定なソート(stable_sort と unstable_sort)
- 安定なソート
- ソート条件が同じであった場合、もとの順序を保持したまま並び替えを行うソートのこと
- 参照:安定ソート - Wikipedia
- 不安定なソート
- ソート条件以外の条件の並び順が元の並び順とは依存しないソートのこと
で、sort_byは安定なソートではありません。
参考:プログラミング言語 Ruby リファレンスマニュアル
そこで、sort_byで安定ソートを実現する方法を紹介します。
users = User.find(:all) i = 0 sorted = users.sort_by do |u| [u.age, i += 1] end p sorted.map(&:name) #=> [サトウ, タナカ, スズキ, ヨシダ]
参考:http://blog.goo.ne.jp/minimal_room/e/91ad1e860020316a219e751502ef085e
つまり、どういう事かというと、第一条件が同じ時は第二条件であるiで並び替えます。
ということは、第一条件が同じ要素は、i(元々の配列に格納されている順に大きくなる)で並び替えるので、並び順を崩すことなく、並び替えを行うことができます。
最後までお読みいただきありがとうございました。
何か不備等ございましたら、ツッコミ等などよろしくお願い致します。
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2010/03/31
- メディア: 単行本
- 購入: 15人 クリック: 394回
- この商品を含むブログ (79件) を見る
----- 追記 -----
安定なソートと不安定なソートに関して追記しました(2011/05/02)