Hatena::ブログ(Diary)

なんだそのカオは -_-

2012-04-26

Ruby1.9でcsvファイルをダウンロード(エンコード問題にも対応)

Ruby1.9系 Rails3でcsvファイルをダウンロードする(エンコード問題にも対応)

Rails 3.2.3

ruby 1.9.3

下記ソースでひとまず動いている

require 'kconv'
require 'csv'

columns = Person.all
file_name = Kconv.kconv("sample.csv", Kconv::SJIS)
header = ["名前1", "名前2", "登録日"]

 #※1
csv_data = CSV.generate("", {:encoding => 'sjis', :row_sep => "\r\n", :headers => header, :write_headers => true}) do |csv|
      columns.each do |line|
        column = []
        column << line[:name].encode('UTF-8','Shift_JIS') #※2
        column << line[:name].force_encoding('UTF-8')     #※3
        column << line[:created_at].strftime("%Y年%m月%d日")
        csv << column
      end
    end
    #※4
    csv_data = csv_data.tosjis
    #※5
    send_data(csv_data, :type => 'text/csv; charset=shift_jis; header=present', :filename => file_name)

  ※1 :encoding ・・・ここで指定してもsjisでファイル生成されなかった。なんで?なので※4で対応

   :row_sep ・・・改行コードの指定。上はCR+LFの場合。

   :headers ・・・配列でヘッダを指定。

:write_headers ・・・ヘッダの有無を指定。

  ※2 下記のようなエラーが出た場合

invalid byte sequence in UTF-8

  ※3 下記のようなエラーが出た場合

    http://blog.livedoor.jp/yakisobakintoki/archives/51075070.html

incompatible character encodings: UTF-8 and ASCII-8BIT
C:/Ruby193/lib/ruby/1.9.1/csv.rb:1729:in `join'
C:/Ruby193/lib/ruby/1.9.1/csv.rb:1729:in `<<'

  2と3の違いはよくわからない...

  ※5これでダウンロード。第一引数CSVデータがちゃんと渡せれば、後はブラウザの保存時のポップアップが表示される。

2011-04-27

Colud Foundry を試してみた(Windows編)

Cloud Foundry上にアプリを構築をやってみた(Windows編)

  VMwareが始めたPaaS "Cloud Foundry"を試しに使ってみる。

  最初は英語のマニュアルしかなく、アカウントが発行されるまでのつなぎで

  訳したりしてたら、日本語訳がコミュニティサイトに登場↓↓

  でもWindows上の構築ではないので、Windows版として載せます。

  VMC発行の手順書(PDF:英文)

  http://cloudfoundry.zendesk.com/attachments/token/pbh3zqyppxj3w4f/?name=Getting_Started_With_VMware_Cloud_Foundry_using_vmc-1.pdf

  (参考:日本人のツィート)http://togetter.com/li/123954

  (追記4/26 日本語訳されたのが登場したので、そちらを見てください。)

  http://support.cloudfoundry.com/entries/20052147-can-i-contribute-japanese-translation-of-getting-started-guide-command-line-vmc-users

  (追記4/27 アカウントが届いた方々が続々と。参考に。)

  http://june29.jp/2011/04/24/rails-sinatra-node-on-cloudfoundry/

■何するの?

 Rubyを使ってCloud Foundryにアプリを乗せます。その手順が上記pdfに載っています。

 英語だったり、コードがWin版でなかったりするので。

■その前に・・・

・前置きで重要なのは以下の箇所

 To use the VMware hosted Cloud Foundry cloud, you must obtain an account from the Cloud Foundry website.

 (「Cloud FoundryのWebサイトからアカウント取得して」とある。)

 http://www.cloudfoundry.comからSignUpすると、メールが一先ず届く。

 それとは別にアカウントが書いてあるメールが届くはず(申請からまる一週間でようやく来た)。

 

Rubyインストール

 Windows:Download RubyInstaller from http://www.rubyinstaller.org/

■Installation:

 〜RubyGemでVMC CLIを設定〜

 ※Cドライブ

 �プロキシ設定をしている場合、

  set http_proxy=http://プロキシ:ポート番号/

 �[1]gemインストール

  gem install vmc
  ※sudoは要らない

 �環境変数パスの設定 ⇒ 方法 http://www.atmarkit.co.jp/fwin2k/win2ktips/189setenvv/setenv.html

  C:\Ruby187\lib\ruby\gems\1.8\gems\bin

  ※実行するvmcファイルまでのパスを入力

 �コマンドプロンプトを一回閉じて、また開く

  環境変数を適用させる目的。

 (※プロキシ設定をしている場合、もう一度�をする必要あり)

 �[2]APIの何か

  vmc target api.cloudfoundry.com

 �[3]ログイン 下記のコマンドを打つとアカウントとパスの入力に移る

  vmc login

  英文 http://www.cloudfoundry.comに登録されたメールアドレスパスワードを入力しろとある。

 �[4]フォルダ作成

  cd /
    mkdir hello
    cd hello

  ※英文 上述のコマンドでrootディレクトリ作成する。任意の場所でもいいよ。

 �[5]英文 コードまたはテキストエディタに次のように入力し、さっき(�)作成したフォルダの配下に"hello.rb"という名前で新規保存する。

  require 'sinatra'
    get '/' do
    "Hello from Cloud Foundry"
    end

 �[6]設定もろもろ

    vmc push

  ※〜?[Yn]と聞かれている箇所は何も入力せず一先ずEnter押下

   「Application Name:」アプリケーション名入力

   Uploading Applicationは多少時間がかかる。

 �[7]英文 ブラウザ起動して、先ほど(�)設定したURLに遷移

 �[8]hello.rbを開いて、メッセージを編集して、上書き保存

 �[9]変更をデプロイする

    vmc update hello

  英文はアプリ名とかhelloのままでというようなことが書いてあるので、手順通りしていれば気にしなくてよい。

 �[10]英文 デプロイしたアプリのテストをするので、ブラウザの更新をする。変更した文字が表示されていたらOK。

 �ヘルプコマンド

  vmc‐h

 アプリケーション名はユニークである必要があるため、helloにすると怒られる。

2011-03-13

計画停電 東京電力 電車

計画停電に関して、電車が動くか疑問に思って調べました。

以下、日経新聞へのリンク

東京電力の見解によると、各鉄道各社は自家発電を備えているため、鉄道への影響は少ないと見ている模様。

ただし、ローカル私鉄に関しては、自家発電を備えていないとこがあるため注意が必要。

マスコミはそこまで配慮した報道をしないのはなぜ?

電車は動くことは常識の範疇なのだろうか?

14日の運休を発表している鉄道会社がある。

フジテレビのスーパーに出ている。(23:32現在)


http://www.nikkei.com/news/headline/article/g=96958A9C93819696E3E1E2E49D8DE3E1E2E1E0E2E3E3E2E2E2E2E2E2

2011-02-10

JavaScript : bind()

bindメソッド

var name = new Person('man');
setTimeout(name.sayMyName, 10);

  name.sayMyNameをsetTimeoutに渡した場合、渡されるのは関数オブジェクトだけで、

  nameオブジェクトとは切り離される。

  この場合、thisを解決できず、this.nameはundefinedと表示されてしまう。

  ここでbindメソッドを使う。bindメソッドを使うとthisを束縛する。

var name = new Person('man');
setTimeout(name.sayMyName.bind(name), 10);

  参照 http://thinkit.co.jp/free/article/0702/15/4/

2011-02-07

GoogleChromeの設定をバックアップ

GoogleChromeBackUp

  GoogleChromeFireFoxMozBackupにあたるのがGoogleChromeBackUp。

  DL元のサイトもウィザードも英語だが読まずともできる。

  http://www.parhelia-tools.com/products/gcb/googlechrome.aspx

FireFoxの設定をバックアップ

MozBackup

  FireFoxの設定をバックアップできるのがMozBackup

  またThunderbirdSunbirdなどのFF以外のMozillaアプリバックアップできる。

  PCのお引越しなどの際に、わざわざカスタマイズする手間が省ける。

  http://mozbackup.jasnapaka.com/