2009年6月30日火曜日

Googleと知恵袋とVBAがすっごい便利だと思う

完全にルーチンワークな作業が舞い込んできたときにこの3つのツールは本当に便利。


要はたくさんのExcelファイルから情報を読み込んで1つのシートにまとめるっていう作業がありまして。
そこまでファイル数も大きくないしなー
マクロ組むほどでもないか―
とか思いながら1個1個データを移してたら。。。


意外と時間がかかる!
てか、あとのフォルダの情報量半端ねえ!!

ってことでネット検索♪
先人たちの遺産はネット上にごろごろ転がってるわけですよ。

検索に特化したgoogleさん。
人が質問するワードに近い検索が容易な知恵袋系サービス。
そして一瞬にして問題解決を行ってくれるマクロ♪

おそらく1時間くらいかかりそうな作業が検索・ダウンロード5分。理解10分。実行&生成で10分くらいで完了しました♪


以下今回使ったソース。
フォーマットの決まったExcelファイルを一括で読み込んでその情報を1つのExcelシートにまとめる。
今回のケースはA1, A2, A3セルに情報が入ってるものとする。


Sub summary()
Sheets.Add
Set nSH = ActiveSheet
rL = 1

Set mySh = CreateObject("Shell.Application")
Set myPath = mySh.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, 0)
If myPath Is Nothing Then Exit Sub
If myPath.Items Is Nothing Then Exit Sub
If myPath.Items.Item Is Nothing Then Exit Sub
フォルダ = myPath.Items.Item.Path
Set mySh = Nothing: Set myPath = Nothing

Set myFS = CreateObject("Scripting.FileSystemObject")
For Each myCSV In myFS.GetFolder(フォルダ).Files
If LCase(myFS.GetExtensionName(myCSV)) = "xls" Then
Workbooks.Open myCSV
'For Each rSH In Sheets

For Each myCC In Range("A1, A2, A3") ' ここに取得したいセルを羅列
rC = rC + 1
nSH.Cells(rL, rC).Value = myCC.Value
Next
rC = rC + 1
nSH.Cells(rL, rC).Value = ActiveWorkbook.Name
rC = rC + 1
nSH.Cells(rL, rC).Value = ActiveSheet.Name

rL = rL + 1
rC = 0
'Next
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
End If
Next
Set myFS = Nothing: Set nSH = Nothing
MsgBox "完了"
End Sub


読めばわかるけどまだVBA慣れてない。。
これも要勉強ですね。

2009年6月28日日曜日

Windows上でUbuntuを動かしてみた。

ここのサイト参考にしてWindowsにUbuntu入れてみた。
すっげー簡単なのね。

http://www.ubuntulinux.jp/products/JA-Localized/vmware


イメージとしてはこんな感じ。
最初からOpen Officeも入ってるんですねー。




ただ、セットアップ中に

「この仮想マシンで VMware Tools パワーオンスクリプトが正常に実行されませんでした。仮想マシンにカスタムされたパワーオンスクリプトが構成されている場合は、スクリプトにエラーがないか確認してください。それ以外の場合は、サポートにご連絡してください。」

というエラーが出たのが気になる。。
問題なく動いてるからいいけど、何なんだろ?

それからもう一点。
VMwareを使ってUbuntu立ち上げるとだいぶメモリを食います。
タスクマネージャで確認したところ、およそ500MBのメモリ消費量。。

2009年6月27日土曜日

[書籍]世界で一番簡単なUnixのe本

そろそろちゃんとUnixとかサーバとか勉強しようと思ったのでタイトルに釣られて本書購入。




世界で一番簡単なというように、
非常にわかりよいイラストと解説・章ごとクイズ・まとめと解説等があって好印象。

内容としては、
そもそも情報処理とは何かとか、Unixとは何かといったことから始まり、
Unixのコマンドの紹介があったり、
WindowsでUnixを使ってみましょうという話があったり。

何よりも、こういう知識は理解しただけじゃ意味がないのでMy windowsパソコンにVM Wareあたりをインストールして使ってみようと思います。

2009年6月23日火曜日

脆弱性とは何か?-ウェブアプリに関する脆弱性のまとめ

脆弱性ってなんなん?って思ったのでちょっとまとめた。

簡単に言うと、
脆弱性とは、コンピュータやネットワークなどの情報システムにおいて、第三者が保安上の脅威となる行為(システムの乗っ取りや機密情報の漏洩など)に利用できる可能性のあるシステム上の欠陥や仕様上の問題点。

以下のサイトが詳しい。
http://www.ipa.go.jp/security/vuln/20050623_websecurity.html

で対策としては、

1. アプリと
2. サーバと
3. ネットワークを

守れと。
監視しろと。
無駄なものは省けと。

そんな感じ。



で、今回ちょっとウェブアプリに関する脆弱性についてまとめてみる。

◆ SQL インジェクション

何か:SQLコマンドを用いた攻撃

対策:SQL文の組み立てにバインド機構を使用
   利用できない場合、SQL文の変数に対しエスケープ処理
   パラメータにSQL文を直接指定しない
   エラーメッセージをブラウザに表示しない
   データベースアカウントに適切な権限を与える

◆ OS コマンド・インジェクション

何か:OSコマンドを用いた攻撃

対策:シェルを起動できる言語機能の利用を避ける
   利用する場合は、引数を構成する全ての変数に対してチェック

◆ パス名パラメータの未チェック/ディレクトリ・トラバーサル

何か:外部にwebサーバないのフォルダ構成がばれることによる攻撃

対策:外部からのパラメータにファイル名を指定しない
   固定のディレクトリを指定しディレクトリ名がばれないようにする
   ウェブサーバ内のファイルへのアクセス権限を設定
   ファイル名のチェック

◆ セッション管理の不備

何か:このセッションID の発行や管理に不備がある場合悪意のある人にロ
グイン中の利用者のセッションID を不正に取得される

対策:セッションIDを推測が困難なものにする
   セッションIDをURLパラメータに格納しないようにする
   HTTPS通信で利用するCookieにはsecure属性を加える
   ログイン成功後に、新しくセッションを開始するようにする
   ログイン成功後に、既存のセッションIDとは別に秘密情報を発行。ページの遷移毎にその値を確認
   セッションIDを固定値にしない
   セッションIDをCookieにセットする場合、有効期限の設定に注意する
 
◆ クロスサイト・スクリプティング

何か:入力値を用いて出力値を出すウェブアプリにおいて、出力値にスクリプトを埋め込まれる

解決:ウェブページに出力する全ての要素に対して、エスケープ処理
   出力は「http://」「https://」に限定
    要素の内容を動的に生成しない
   スタイルシートを外部サイトから取り込めるようにしない
   入力値の内容チェックを行う
   入力されたHTMLテキストから構文解析木を作成し、スクリプト排除
   入力されたHTMLテキストから、スクリプトに該当する文字列を排除
   HTTPレスポンスヘッダのContent-Typeフィールドに文字コード(charset)指定
   Cookie情報の漏えい対策として、TRACEメソッドを無効化し、発行するCookieにHttpOnly属性を加える
   
◆ CSRF(クロスサイト・リクエスト・フォージェリ)

何か:Webサイトにスクリプトや自動転送を仕込むことにより閲覧者に意図せず別のWebサイト上で何らかの操作を行なわせる攻撃

解決:処理を実行するページを POST メソッドでアクセス
   「hidden パラメータ」に秘密情報が挿入されるよう前のページを自動生成。
   処理実行直前のページで再度パスワードの入力を求める
   入力されたパスワードが正しい場合のみ処理を実行
   Refererが正しいリンク元かを確認し、正しい場合のみ処理を実行
   重要な操作後、ユーザーの登録済みメールアドレスに結果を自動送信
   
◆ HTTP ヘッダ・インジェクション

何か:HTTPヘッダに、任意の情報を挿入することで攻撃を行う手法

解決:ヘッダの出力を直接行わない
   ウェブアプリケーションの実行環境や言語に用意されているヘッダ出力用APIを使用
   改行コードを適切に処理するヘッダ出力用APIを利用できない場合、改行を許可しない
   外部からの入力の全てについて、改行コードを削除する
   
◆ メールの第三者中継

何か:全く関係のない第三者のメールサーバを踏み台にして送信元を偽造

解決:外部からのパラメータをメールヘッダの内容に指定しない
   外部からのパラメータをメールヘッダに指定する場合は、危険な文字を排除

2009年6月21日日曜日

クラウド勉強中③AWSをより安く使うには

Amazon EC2は同じ機能を使うにしても、料金が変わってくる。
サービス自体が従量課金であるため、ちょっとの差でも大きく変わってくる。
注意したいところ。

1. WindowsよりもLinux

AmazonEC2においてではスペックにより値段が変わる。
それは当然だとしても、同じスペックでOSの種類によって値段が変わる。
例えば、Standard Instance Smallの場合、
Windows: 0.125ドル/1h
Linux: 0.1ドル/1h

ほんの0.025ドルの差だが、これが1000hになった時には25ドル、1年間では219ドルの差になってくる。
同じスペックなのにこの値段の差。できればLinuxを使いたい。
(僕はまだLinuxは不慣れです。。)

2. ヨーロッパよりもアメリカ

Amazon S3ではデータの保存容量に対して課金がされる。
使用するサーバがどこにあるかによって料金が変わってくる。
例えば、Amazon S3の合計保存容量が50TB未満の場合、
アメリカ: 0.15ドル/1month・1GB
ヨーロッパ: 0.18ドル/1month・1GB
アメリカの方が断然安い。

Amazon Cloud Frontではアメリカに設置されてるサーバが最も安く、
0.17ドル/1month・1GB
日本に設置されてるサーバが最も高く、
0.22ドル/1month・1GB

AWSを使うときにはこの辺もしっかりと考慮しなきゃですね。

クラウド勉強中②Amazon Web Serviceで何ができるか

インフラ型のクラウド技術としてAmazon Web Serviceが有名。

AWSは何ができるかを簡単にまとめ。


1. Amazon Elastic Compute Cloud(Amazon EC2)

仮想サーバを構築できるサービス。
The New York Timesが使用。セカンドライフも使ってる。

1-1. Amazon Elastic Block Store

Amazon EC2が使用するディスクスペースを提供するサービス。外部ハードディスクのようなもの。

1-2. Elastic IP Address

Amazon EC2はIPアドレスが動的に変化するが、Amazon EC2にて固定IPを利用するためのサービス。

2. Amazon Simple Storage Service

ディスクストレージサービス。
drop boxはこのサービスを利用。twitterのプロフィール画像もここに保存。

3. Amazon SimpleDB

Webアプリケーションのデータベースサービス。

4. Amazon Simple Queue Servise(Amazon SQS)

メッセージキューイングサービス。
アプリケーション間での送信データ一時的に保管することで、処理待ち時間を減らせる。

5. Amazon CloudFront

コンテンツ配信サービス。
Amazon S3に保存されているコンテンツを高いデータ転送速度にて配信可能。
日本にもサーバがあるため転送速度が速い。


※その他オプションで気になったもの

EC2 on Rails


Amazon EC2でRailsアプリケーションを利用するためのツール。
Railsが簡単に使えるみたいですな。

2009/06/28
EC2 on Railsに関することをまとめてくれてる記事発見。

http://fromnorth.blogspot.com/2008/06/amazon-ec2s33-ec2onrails.html

クラウド勉強中①クラウドコンピューティングは何からできているか

クラウドコンピューティングについて勉強中。
以下クラウドを構成する要素についてまとめ。

グリッドコンピューティング

各地に点在するコンピュータをまとめあげてひとつのコンピュータとみなすこと。
1つ1つは小さな、スペックの小さなコンピュータではあるけれども、まとめあげることで大きな1つのコンピュータとみなすことができる。
名前の由来は電力網(Power Grid)。
うちの大学に一時期アジア最速のスパコンがありました(現在は地球シミュレータに負けましたかね?)が、それはグリッドコンピューティングにより構成されていました。

仮想化

コンピューティングリソースの抽象化を表す言葉。
1台のマシンの中に複数のOSを同時に立ち上げたり、複数のマシンで1つのOSを立ち上げたりする技術。
リソース余ってるよーていうコンピュータに処理を分けてあげたり、リソース足りないよーていうコンピュータと他のコンピュータを足してあげたりできる。

ユーティリティコンピューティング

CPUやストレージなどのコンピューティングパワーを電気やガスと同じように使った分だけ課金される仕組み。
AmazonのS3/EC2などは普通のサーバと異なり、サーバーという大きな塊を買うのではなく、サーバーを使った容量、転送量、起動したサーバーの時間数によって課金される。
初期コストが低くて済むのがポイント。家を買う金はないけどアパートには住める。そんなイメージ。

シンクライアント

ユーザが使うコンピュータには必要最低限の機能しか持たせず、処理のほとんどをサーバ側で行う形態。
gmailとかgoogle documentとかが特にいい例。
ユーザはwebブラウザを持っていればよく、ネットにつなげばメール、ドキュメント編集ができる。