« 2009年5月 | トップページ | 2009年7月 »

2009年6月の17件の記事

090630-スレッドを使ってみた

新しい記事があります。

リンク: 090720-別スレッドが終了するまで待つには: Non-programmer's Ruby in Pocket.


別スレッドが終了するまで待つようにしてみた。

先日作ったGoogleカレンダーを表示するプログラムが問い合わせに時間がかかるので、ネット上の問い合わせ部分とローカルの時計を参照する部分を分けて、別スレッドにしてみた。まだタイミングを合わせるなどはまったくしていない荒削りなスクリプトだが、とりあえず動く。

続きを読む "090630-スレッドを使ってみた"

| | コメント (0) | トラックバック (0)

090629-ネットブックでタスクスケジュールがうまく動かない理由

090629taskscheduleandpower

外出先でネットブックを使っていて、ふとタスクスケジュールが動いていないことに気づいた。試行錯誤していると上のような設定項目に行き着いた。「バッテリーモードの場合は、タスクを実行しない」・・・こ、これか。さっそくチェックをはずすと無事タスクが実行されました。ふぅ。

| | コメント (0) | トラックバック (0)

090629-Windowsで今日の予定をGoogleカレンダーから取得し表示する

090629stopwatch

スクリプトを実行すると、その日の予定までの残り時間が示される。「あと15分で出なきゃ」「あと30分で休憩だ」などのように使うことができる。

ちなみに私は、タスクマネージャを使って、このスクリプトを自動的に10分おきに走らせている。「うっかり時間超過」の多い私にとってはありがたい。

ポイント1は、最初に「putsjis」というメソッドを定義している点。Windowsのコマンドプロンプトは<SJIS>だが、さまざまなネットサービスは断然<UTF-8>の方が使いやすい。そこで、スクリプトそのものや外部とのやりとりはすべて<UTF-8>でやり、コマンドプロンプトに出力するときだけ、「kconv」ライブラリの「tosjis」メソッドを使って<SJIS>を使っている。

ポイント2は、Googleカレンダーの返してきたさまざまな種類の予定から時間指定の予定だけを正規表現で取り出している点。困ったことにGoogleカレンダーは、時間も詳細も公開設定も、すべてdescriptionに入れて返してくる。仕方ないので、このdescriptionをよく見て、時間指定の予定を選び出さなければならない。

続きを読む "090629-Windowsで今日の予定をGoogleカレンダーから取得し表示する"

| | コメント (0) | トラックバック (0)

090628-WindowsでGoogleカレンダーから予定を取得するRubyスクリプト

新しい記事があります。

リンク: 090629-Windowsで今日の予定をGoogleカレンダーから取得し表示する: Non-programmer's Ruby in Pocket.

スクリプトを実行すると、その日の予定までの残り時間が示される。


090628calendar

Googleカレンダーから今日明日の予定を取得するRubyスクリプトを書いてみました。といっても、gcalapiというライブラリを使わせてもらっているので、大したことはやっていません。

$KCODE = "UTF-8"
require "kconv"
require "gcalapi"
 
# アカウントメールアドレス
mail = "xxxxxxxx@gmail.com"
# パスワード
pass = "xxxxxxxx"
# Googleカレンダーの「カレンダー設定」画面から取得した非公開URL
feed = "http://www.google.com/calendar/feeds/xxxxxxxx%40gmail.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxx/basic"
 
srv = GoogleCalendar::Service.new(mail, pass)
cal = GoogleCalendar::Calendar::new(srv, feed)
events = cal.events
 
# 今日と明日の日付の文字列を作っておく
today = Time.now.strftime("%Y/%m/%d")
tomorrow = (Time.now + 24*60*60).strftime("%Y/%m/%d")
 
# 各予定について・・・
events.each do |event|
  title = event.title
 
  # 時刻指定されている場合
  if /^(\w*): (\d{4}\/\d{2}\/\d{2}) (\d{2}:\d{2})~(\d{2}:\d{2}).*/ =~ event.desc
    type = Regexp.last_match(1).to_s
    date = Regexp.last_match(2).to_s
    starttime = Regexp.last_match(3).to_s
    endtime = Regexp.last_match(4).to_s
 
  # 時刻指定されていない場合
  elsif /^(\w*): (\d{4}\/\d{2}\/\d{2})~(\d{4}\/\d{2}\/\d{2}).*/ =~ event.desc
    type = Regexp.last_match(1).to_s
    starttime = Regexp.last_match(2).to_s
    endtime = Regexp.last_match(3).to_s
 
  # 開始日のみの場合
  elsif /^(\w*): (\d{4}\/\d{2}\/\d{2}).*/ =~ event.desc
    type = Regexp.last_match(1).to_s
    starttime = Regexp.last_match(2).to_s
  else
    raise "unexpected format: " + event.desc
  end
  
  # 今日か明日の予定を表示する
  # WindowsなのでSJISにする
  if date == today || starttime == today || date == tomorrow || starttime == tomorrow
    puts title.tosjis
    puts date.tosjis if date
    puts "開始:" + starttime.tosjis
    puts "終了:" + endtime.tosjis if endtime
  end
end

| | コメント (0) | トラックバック (0)

090627-Win32-Clipboardライブラリが扱えるのはテキスト形式のみ

090627tag


Windowsのクリップボードの中身をHTML形式で取り出したかったのだが、試行錯誤の結果、現状のWin32-Clipboardライブラリはテキスト形式しかサポートしていない模様であることが判明。VBとかだと色々できるみたい。残念。

| | コメント (0) | トラックバック (0)

090625-天気予報を取得するRubyスクリプトをWindowsで書いてみた

新しい記事があります。

リンク: 090706-ネットから天気予報を取得するスクリプト: Non-programmer's Ruby in Pocket.

天気予報を取得するスクリプトを若干改良。午前中なら当日の天気、午後なら翌日の天気を取得するようにした。


天気予報を提供するWebサービスの有名どころはlivedoorの「Weather Hacks」である。このサービスはRESTでリクエストを送るとXMLでレスポンスが返ってくるサービスなのだが、ありがたいことに既にライブラリが作られていた。「gem install weatherhacks」でインストールできる。作者のkeitaさんに感謝。

ruby-weatherhacks

ちょっと困ったのが、Windowsのコマンドプロンプトの文字コードがSJISであること。しかたないのでkconvライブラリをrequireし、リクエストを送るときはtoutf8メソッドを使い、レスポンスを表示するときはtosjisメソッドを使った。

require "weatherhacks"
require "kconv"
 
forecast = WeatherHacks.lwws("東京".toutf8, :tomorrow)
puts "明日の天気:"
puts forecast.telop.tosjis

| | コメント (0) | トラックバック (0)

090625-Windowsでのrubyの文字化け対策

今まではずっとSJISを意識せずに使っていたのだが、Googleカレンダーの予定を取得しようとして文字化けに直面した。試行錯誤の結果、以下の2点がわかった。

  • 受け取る文字コードは$KCODE(環境変数?)で指定する
  • 文字コードを変換して出力する場合は、kconvライブラリをrequireして、出力する文字列のあとに「.tosjis」のように文字コード変換メソッドを付ける。

以下のコードは、実際にGoogleカレンダーの予定を「UTF-8」で取得し、「SJIS」に変換して出力している。



$KCODE = 'UTF-8'
require 'kconv'
require 'gcalapi'
 
# アカウントメールアドレス
mail = "xxxxxxxx@gmail.com"
# パスワード
pass = "xxxxxxxx"
# Googleカレンダーの「カレンダー設定」画面から取得した非公開URL
feed = "http://www.google.com/calendar/feeds/xxxxxxxx%40gmail.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic"
 
srv = GoogleCalendar::Service.new(mail, pass)
cal = GoogleCalendar::Calendar::new(srv, feed)
events = cal.events
 
events.each do |event|
  puts event.title.tosjis
  puts event.desc.tosjis
end

| | コメント (0) | トラックバック (0)

090624-朝、家を出るまであと何分?を表示するrubyスクリプト

少し前に「今寝ると睡眠時間はどれくらいなのか」を表示するスクリプトをRubyで書いてみた。今回は、前回の機能に追加して、朝、家を出るまであと何分あるのかを表示するようにした。稚拙なスクリプトだが、遅刻癖のある方は試してみると良いかもしれない。

例によって使い方は、タスクスケジューラ(プログラム>アクセサリ>システムツール)にスクリプトを登録する。私は午前7時から8時まで5分おきに実行し、午後8時から11時まで30分おきに実行している。



now = Time.now
# 起床時刻は翌日の6時30分
getup_time = Time.local(now.year, now.month, now.day + 1, 6, 30)
# 準備開始時刻は当日の7時20分
prepare_time = Time.local(now.year, now.month, now.day, 7, 20)
# 出発時刻は当日の7時30分
going_time = Time.local(now.year, now.month, now.day, 7, 30)
 
# 現在時刻を表示して1秒待つ
puts "現在時刻:"
puts now.strftime("%H 時 %M 分")
puts
sleep 1
 
class TimeLength
  def initialize(time)
    @seconds = time - Time.now
  end
  def format
 
    flag = "あと "
    if @seconds < 0
      @seconds = -@seconds
      flag = "《超過》 "
    end
 
    minutes = (@seconds / 60).round
    hours = (minutes / 60).round
    minutes = minutes % 60
    
    flag + hours.to_s + " 時間 " + minutes.to_s + " 分"
  end
end
 
case
# 午前8時以前ならば
when now.hour <= 8
  # 現在時刻を表示して1秒待つ
  ptl = TimeLength.new(prepare_time)
  puts "準備開始時刻まで:"
  puts ptl.format
  puts
  sleep 1
 
  # 当日の起床時刻までの時間を表示
  gtl = TimeLength.new(going_time)
  puts "出発時刻まで:"
  puts gtl.format
  puts
  sleep 1
 
# 午前8時以降ならば
when now.hour > 8
  # 翌日の起床時刻までの時間を表示
  utl = TimeLength.new(getup_time)
  puts "起床時刻まで:"
  puts utl.format
  sleep 1
end
 
sleep 3

| | コメント (0) | トラックバック (0)

090615-ブログでコードを見やすく highlight.jsが手っ取り早い

090615code

ブログでプログラムコードを見やすくするには、highlight.jsというものを使うのが手っ取り早い。具体的には、コードを挿入したい記事の最初に以下のコードを挿入する。

<script type="text/javascript" src="http://your.domain/highlight.pack.js"></script>
<script type="text/javascript">hljs.initHighlightingOnLoad();</script>
<link rel="stylesheet" href="http://your.domain/default.css" />

あとは見せたいコードを以下のタグで囲めばよい:

<pre><code>・・・・・</code></pre>

注意点としては、以下の通り:

  • スタイルシートを付けないと色が付かない。スタイルシートはダウンロードしたフォルダの中の「styles」というフォルダにいくつか入っている。どれか1つ選んでアップロードしなければならない。
  • 実際に使うJavaScriptファイルは「highlight.js」ではなくて「highlight.pack.js」である(細かい違いは筆者にもわからない。ちなみに筆者は結果オーライな人間である)。
  • 一般のブログはサブタイトル部分にもコードを挿入できるが、ここに上のコードを入れても、どうもうまく動かない。毎回、記事に入れるしかないようである。これまた、筆者は「動いているから良し」としてしまう性格である。

| | コメント (0) | トラックバック (1)

090615-夜更かし防止スクリプトをRubyで書いてみた

新しい記事があります。

リンク: 090624-朝、家を出るまであと何分?を表示するrubyスクリプト: Non-programmer's Ruby in Pocket.

今回は、前回の機能に追加して、朝、家を出るまであと何分あるのかを表示するようにした。


どうも最近夜更かし気味なので、「今寝ると睡眠時間はどれくらいなのか」を表示するスクリプトをRubyで書いてみた。実際にはタスクスケジューラで15分おきに走らせている。わりあい良い感じで動いているのでご紹介。

now = Time.now
# 起床時刻は翌日の6時30分
getup_time = Time.local(now.year, now.month, now.day + 1, 6, 30)
# 出発時刻は当日の7時30分
going_time = Time.local(now.year, now.month, now.day, 7, 30)

puts "現在時刻:"
puts now.strftime("%H:%M")
puts
sleep 1

class TimeLength
  def initialize(seconds)
    @seconds = seconds
  end
  def format
    minutes = (@seconds / 60).round
    hours = (minutes / 60).round
    minutes = minutes % 60
    return hours.to_s + " 時間 " + minutes.to_s + " 分"
  end
end

# 午前8時以前ならば
if now.hour <= 8
  puts "出発時刻まで:"
  # 当日の起床時刻までの時間を表示
  tl = TimeLength.new(going_time - now)
  puts tl.format
# 午前8時以降ならば
else
  puts "起床時刻まで:"
  # 翌日の起床時刻までの時間を表示
  tl = TimeLength.new(getup_time - now)
  puts tl.format
end

sleep 10

| | コメント (0) | トラックバック (0)

090613-ネットブックの画面を広く使うには:結局このように落ち着きました

新しい記事があります。

リンク: 090703-ネットブックの画面を広く使うには(その2): Non-programmer's Ruby in Pocket.

少し前に私のネットブック用のデスクトップを紹介したが、その後少し改良したので再度ご紹介。


090613netbookdesktop01

ネットブックを使い始めた当初は画面の狭さ、特に上下方向の狭さが気になった。しかし、試行錯誤を重ねた結果、上のような画面に落ち着いた(上の画面をアプリケーションの画面と誤解しないでほしい。これはデスクトップ全体を写した画像である)。半月ほど使ってみたが、問題もなく快適に使えているので、ご紹介したい。

あまりあれこれとPCをカスタマイズするのは嫌いなので、私は以下の4点だけ変更している。

  • デスクトップ
    • タスクバーを自動的に隠す
    • winsupermaximizeでタイトルバーを消す
  • Firefox
    • ナビゲーションツールバーの中身をメニューバーに移してしまう
    • disablemenuでメニューバーを自動的に隠す

続きを読む "090613-ネットブックの画面を広く使うには:結局このように落ち着きました"

| | コメント (0) | トラックバック (0)

アクセス数は増えているのか?の、Google Analyticsでの調べ方:続編

前編の記事があります。

リンク: アクセス数は増えているのか?の、Google Analyticsでの調べ方: Non-programmer's Ruby in Pocket.

「この1ヶ月間のアクセス数は、その前の1ヶ月間とくらべてどうだったのか?増えたのか?減ったのか?」を調べる方法を、紹介する。


090613analytics04_2

前回このブログのアクセス解析を見たところ、先月と比べて今月のリピーター数が減っていた。なぜ減ったのだろう?

そこでリピーターがどんなコンテンツに来ていたのかを調べてみた。

続きを読む "アクセス数は増えているのか?の、Google Analyticsでの調べ方:続編"

| | コメント (0) | トラックバック (0)

アクセス数は増えているのか?の、Google Analyticsでの調べ方

後編の記事があります。

リンク: アクセス数は増えているのか?の、Google Analyticsでの調べ方:続編: Non-programmer's Ruby in Pocket.

リピーターがどんなコンテンツに来ていたのかを調べてみた。


090613analytics01

ようやく少しGoogle Analyticsの使い方がわかってきた。今回は、「この1ヶ月間のアクセス数は、その前の1ヶ月間とくらべてどうだったのか?増えたのか?減ったのか?」を調べる方法を、紹介する。

続きを読む "アクセス数は増えているのか?の、Google Analyticsでの調べ方"

| | コメント (0) | トラックバック (0)

うなずかされる記事 計画的陳腐化時代の終わり

090611longroad

新しい電子機器が好きだけど、衝動買いはしないで、慎重に情報を集めてから買う。

私はそういうタイプだと思うのですが、そういう人にとって、この記事はかなり興味深いです。その主張には、うなずかされるものがあります。

リンク: 【本田雅一の週刊モバイル通信】 WWDC基調講演に思う、計画的陳腐化時代の終わり.

たとえば携帯電話。半年に1度はモデルチェンジを繰り返す携帯電話は、メーカーが繰り出す新機能や新デザイン、新メカニズムが組み込まれると同時に、携帯電話会社がアップデートする新サービスに対応させることで、短いサイクルで過去の製品を陳腐化させてきた。

消費者もバカではない。携帯電話を買い換えつつも、“買わされている”側面があることには、これまでも薄々気付きながらも、新製品へと買い換えを続けてき た。

そんな中にあって、“ハードウェアの計画的長寿命化”を軸とするiPhoneの製品戦略は、多くの人にとって新鮮に感じられるのではないだろうか。

| | コメント (0) | トラックバック (0)

Yahoo Pipesでスクレイピング ポイントはRenameとRegex

090610yahoopipes
Yahoo Pipesでスクレイピングしてみた。思ったより大変だった。

続きを読む "Yahoo Pipesでスクレイピング ポイントはRenameとRegex"

| | コメント (0) | トラックバック (0)

ワンアクションでタスクバーを自動的に隠すRubyスクリプト

090606notebookpc

最近ネットブックを使っているが、画面が狭いので、自宅ではディスプレイにつなげて使っている。

普段はタスクバーを自動的に隠しているが、ディスプレイにつなげるときはタスクバーを表示させる。この切り替えをワンアクションでできるようにしたRubyスクリプト(いちおう)を作ってみた。

require 'win32ole'

shell = WIN32OLE.new("WScript.Shell")
shell.Run("rundll32.exe shell32.dll,Options_RunDLL 1")
sleep 1
shell.AppActivate("タスク バー")
shell.Sendkeys("%U{ENTER}")

ここ半月ほど使っているが、快適である。

なお、スクリプトの作成に当たっては以下のページを参考にした。

リンク: Windows Xpにて「タスクバーを自動的に隠す」機能ON/OFFの手順簡略化についての質問です - 人力検索はてな.

| | コメント (0) | トラックバック (0)

クリップボードを取得するのに、ちょっとひと苦労した

新しい関連記事があります。

リンク: 090627-Win32-Clipboardライブラリが扱えるのはテキスト形式のみ: Non-programmer's Ruby in Pocket.

現状のWin32-Clipboardライブラリはテキスト形式しかサポートしていない模様であることが判明。


クリップボードを取得したくて、るびまを参考に以下のような簡単なコードを書いたが、動かない。

require 'win32/clipboard'
include Win32

puts "The data in clipboad is: " + Clipboard.data

エラーメッセージは以下のとおり。

uninitialized constant Win32::Clipboard::Win32API (NameError)

ネットで調べるとWin32APIをrequireすれば良いことがわかった。そこで以下のように先頭に1行、追加したら、うまく動いた。

require 'Win32API'
require 'win32/clipboard'
include Win32

puts "The data in clipboad is: " + Clipboard.data

cygwin版はWin32APIをrequireしなくても動くのだろうか?ちなみに私が使っているのは「One Click installer」とかいうやつである。

それにしてもエラーメッセージから、すぐにWin32APIが足りないんだなと気づくべきだった。うーむ、修行が足りないな、俺。

| | コメント (0) | トラックバック (0)

« 2009年5月 | トップページ | 2009年7月 »