tag:blogger.com,1999:blog-66404389564002822802024-02-07T23:26:36.967+09:00morimorihoge's blogプログラミングとかセキュリティ、その時思ったこととか書いてます。morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.comBlogger71125tag:blogger.com,1999:blog-6640438956400282280.post-20219023402187461502014-04-26T00:33:00.000+09:002014-04-26T00:33:07.496+09:00むくりここ最近<a href="http://techracho.bpsinc.jp/">TechRacho</a>にばかり記事を書いていたのだけれど、業務と関係の無いネタを空き時間にやり始めたのでこっちのブログも復帰しようかなと思った。<br />
気が向いたらまとめていきます。morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-87474933657986190812011-08-14T22:23:00.003+09:002011-08-14T22:30:11.600+09:00Sending Emails from CSV/TSV Formatted Data through Gmail SMTP by RubyA Japanese version of this document is in <a href="http://techracho.jp/morimorihoge/2011_08_12/4309">TechRacho</a>.
I want to send e-mails to my students from my Excel-formatted list. I don't have any SMTP servers so that I use Gmail SMTP.
The advantage of this program is:
<ul>
<li>Email from your tabular data (Excel, CSV, TSV, etc.)</li>
<li>Using Gmail SMTP (you don't worry whether your server is in spam blacklists)</li>
<li>Customizable mail template, no Ads</li>
</ul>
This program is verified on Ruby 1.8.7 + ActionMailer 3.0.3 + fastercsv 1.5.4 + tlsmail 0.0.1.
<a name='more'></a>
<h4>Install Required Gems</h4>
First of all, install gems.
<pre class="brush: bash; auto-links: false;">
$ gem install rails
$ gem install fastercsv
$ gem install tlsmail
</pre>
<h4>Convert List of Data</h4>
Then, you have to convert your tabular data to TSV(because CSV might cause some troubles in parsing especially multibyte data).
If you use Japanese (or other multibyte encoded language), convert it to UTF-8.
For example, Excel's default output encoding in Japanese is MS932(Shift-JIS), We use NKF(Nihongo Kanji Filter) to convert it.
<pre class="brush: bash; auto-links: false;">
$ brew install nkf
$ nkf -w data.tsv > data-utf8.tsv
</pre>
<h4>Program and Setup</h4>
Save below source code as send_email.rb:
<pre class="brush: ruby; auto-links: false;highlight: [29, 39, 43,44,45,46,47,48,49,50,51,55]">
# encoding: UTF-8
require 'rubygems'
require 'action_mailer'
require 'fastercsv'
# for Gmail SMTP
require 'tlsmail'
if ARGV.count != 2
puts "usage: ruby send_email.rb [Gmail Account] [Gmail Password] < TSV"
exit -1
end
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.smtp_settings = {
:enable_starttls_auto => true,
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'gmail.com',
:authentication => :plain,
:user_name => ARGV[0],
:password => ARGV[1]
}
class CustomMailer < ActionMailer::Base
def createMessage(toAddress, mySubject, myBody)
from 'your_email_address@your_domain.com'
recipients toAddress
subject mySubject
body myBody
end
end
FasterCSV.parse(
STDIN.read(100000000).to_s,
:col_sep => "\t",
:headers => %w(email name a b c d e f g your file format here)
) do |h|
to = h['email']
body =<<EOS
Dear #{h['name']},
Some message.
If you want to insert TSV parameter, write #{h['header_name']}.
--
Signatures
EOS
puts to
puts body
CustomMailer.createMessage([to, "your_email_address@your_domain.com"], "Subject for #{h['name']}", body).deliver
end
</pre>
Please replace highlighted lines.
Line 29: The email address in the from header. If you don't want to use your gmail address, you must setup to enable the address before (<a href="http://mail.google.com/support/bin/answer.py?answer=22370">Details here</a>).
Line 39: ":headers" is key strings for your tabular data.
For example, the data is formatted by [email, name] like below:
<pre class="brush: ruby; auto-links: false;">
hoge@example.com Hoge
huga@example.com Huga
foo@example.com Foo
</pre>
Then you can refer them by h['email'] or h['name'] below:
<pre class="brush: text; auto-links: false;">
:headers => %w(email name)
</pre>
Line 43-51: Mail body
Line 55: If he first argument is array, you can use multiple TO addresses. The second argument is a subject.
<h4>Sending Email</h4>
If you are ready, execute below command in your terminal.
<pre class="brush: text; auto-links: false;">
$ ruby send_email.rb 'GMAIL_ACCOUNT@gmail.com' 'PASSWORD' < data-utf8.tsv
</pre>
The Gmail SMTP is not so fast SMTP, the sending rate is about 10 mails/a minute.
morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-52675387412347397692011-08-04T12:31:00.003+09:002011-08-14T22:30:22.168+09:00[Eclipse]: Autocomplete Feature Shows only "No Default Proposals" on EclipseA Japanese version of this document is in <a href="http://techracho.jp/morimorihoge/2011_08_04/4218">TechRacho</a>.
I got new MacBookAir (Mid 2011, Lion) and build my development environment from scratch.
When I installed Eclipse 3.7.0 + ADT, the code assist feature (autocomplete) does not work. It shows only "No Default Proposals" and no any other nominations available.
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJv_UUSsqgOT7aUqQwrxtRMD0RYYBdBjyUJIDof8UJJE8Vdzkv9aoXZ6ofZUwg04w_Hej9p0rXc88KznPio4A2ULzXOIW8dwdCdmRSAafa_m_AZCruju43qthyeGqeoawaetWGVsegTe4/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2011-08-04+11.53.08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJv_UUSsqgOT7aUqQwrxtRMD0RYYBdBjyUJIDof8UJJE8Vdzkv9aoXZ6ofZUwg04w_Hej9p0rXc88KznPio4A2ULzXOIW8dwdCdmRSAafa_m_AZCruju43qthyeGqeoawaetWGVsegTe4/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2011-08-04+11.53.08.png" width="286" /></a></div>
I solved this problem. This may not be ADT dependent, it may apply to all other Eclipse-based IDE.<br />
<br />
<a name='more'></a>
Open ".metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs" in your workspace directory, then find a row including "content_assist_disabled_computers" and comment it out by "#".
If you cannot find this file, you can find it by the command below:
<pre class="brush: shell">
$ cd workspace
$ for x in `find . -type f`;do grep -l "content_assist_disabled_computers" $x;done
</pre>
Then restart Eclipse application, the autocomplete feature will be working correctly.
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9nzpCDfmotYY_3BStC22Nz1PsT7C2KB7gEbW68WPyNtVjVc-u215aO9tpe-Ji4iEsTpHeC7i1wZptmyPU7O_Bxol_H4iTIkxSIcOSwJAekiNmZZxfgaHDzmzakJUW6Vu8yMGujxPIEdc/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2011-08-04+11.52.29.png" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="123" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9nzpCDfmotYY_3BStC22Nz1PsT7C2KB7gEbW68WPyNtVjVc-u215aO9tpe-Ji4iEsTpHeC7i1wZptmyPU7O_Bxol_H4iTIkxSIcOSwJAekiNmZZxfgaHDzmzakJUW6Vu8yMGujxPIEdc/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2011-08-04+11.52.29.png" /></a></div>
morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-66923663365307753902011-07-15T18:25:00.000+09:002011-07-15T18:25:18.036+09:00[iPhone]: トルコでSoftbankの海外パケットし放題を使ってみた先日出張でトルコのイスタンブールに行く機会があり,Softbankの海外パケットし放題を使う機会があったので軽くレポ.<br />
<a name='more'></a>まず,<a href="http://mb.softbank.jp/mb/international/roaming/area_price/packet/">海外パケットし放題の概要はこちら</a>.基本的な内容としては,
<br />
<ul>
<li><a href="http://mb.softbank.jp/mb/international/roaming/area_price/packet/list_of_companies.html">定額対象事業者</a>のネットワークに繋がるときのみ有効</li>
<li>990KBの通信まで従量課金(1,980円以下)</li>
<li>25MBまで定額1,980円</li>
<li>25MBを越えたら定額2,980円</li>
<li><b>世界対応ケータイ及びS!ベーシックパックに加入している必要がある</b></li>
</ul>
といったところ.最後の条件は普通にSoftbankでiPhoneを契約していれば付いているはず.不安なら<a href="https://my.softbank.jp/msb/d/top">My Softbank</a>で確認すれば良い.<br />
<br />
Nexus Sを持っていったので,最初はイスタンブール空港あたりでデータ通信が使えるSIMを1週間くらいのプランで買って使おうと思ったのだが,3事業者(Vodafone, Turkcell, AVEA)とも端末を買わずにSIMだけ買えるデータ通信のプランは無いと言われてしまった.どうも端末のActivationが必要みたいなことを言われてしまい,SIMロックフリーの端末を使う場合はインターネット接続なしの通話プランならあるが,ネット接続できるプランは無いらしい(ちなみにトルコの携帯事業者は空港でも英語が通じるかどうかやや怪しかった.AVEAに普通に通じる人がいたので説明してもらった).<br />
<br />
海外で移動するときはGoogle MapsやWeb検索ができないと非常に不便なので,どうにか繋ぎたいと思い,割高かなーと思いつつSoftbankのサービスを使うことに.<br />
<br />
設定方法は<a href="http://mb.softbank.jp/mb/iphone/service/international/roaming/packet/">このページ</a>を見ておけば問題ない.基本的にやることは現地に着いたらキャリア設定を手動にし,1分位待つと接続可能なキャリア一覧が現れるので「<b>Vodafone TR</b>」を選択すれば,問題なく繋がる.<br />
ちなみに,Vodafone TRのネットワークに接続した時に一度SMSが届くようになっている.料金案内などはそのSMSにリンクがあるので,そちらを参照しても良い.<br />
<br />
というわけで,現地滞在5日間を含む月の明細は以下のようになった.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh325AjIT89IjKplGVqyciZG1ncF2wgJ9uTufSH4ktEHUgfZbxnW5z32qJ2A-rM80V4DReRp84t4UsKP8883bLqmtac_k_9Xpoalxro_RfnThD7cZ07__l8HuPQAXoQDmIJCDLF8iBK-EQ/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-07-15+17.46.12%25EF%25BC%2589.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh325AjIT89IjKplGVqyciZG1ncF2wgJ9uTufSH4ktEHUgfZbxnW5z32qJ2A-rM80V4DReRp84t4UsKP8883bLqmtac_k_9Xpoalxro_RfnThD7cZ07__l8HuPQAXoQDmIJCDLF8iBK-EQ/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-07-15+17.46.12%25EF%25BC%2589.png" width="320" /></a></div>
音声通話は帰りのチケットのリコンファームに使った.ちなみにイスタンブールから同市内に電話をかけるときは,市外局番はいらないみたいだった.なので,トルコ航空にかけるときは「212-444-0849」ではなく「44-0849」で繋がる.<br />
<br />
問題の金額だが,現地でそこそこ頻繁にTwitter/Gmail/Google Mapsを使ってこの料金ならまあ許容範囲内かなと感じた.何より普段から使っているiPhone4が使えるのが大きい.<br />
ちなみに,ホテルと用務先はWiFiのネットワークがあったので,そこまで大量の通信をしていないのはその辺りも関係していると思う.<br />
<br />
後気づいたのは,都市圏であるイスタンブール市内でも,場所によってはかなり電波が繋がりにくくなったということ.また,パケット通信の速度もかなり遅く,時にはGoogle Mapsの表示にかなり待たされることもあった.これはもしかしたらSoftbank-Vodafone TRの間のローミング契約の問題なのかもしれない.ローミングにしては安すぎるし.<br />
<br />
以上,もし近々トルコに行く人がいれば参考になるかも.morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-47013079628594406152011-07-12T21:18:00.000+09:002011-07-12T21:18:06.440+09:00[Rails]: Generate Complex OR Query on Rails 3 with ArelOn the Rails 3, ActiveRecord generate QSL through DSL "Arel".
There are many simple query sample codes are available, but complex one is a little.
This post shows how to generate complex "OR" query.
<a name='more'></a>
I want to write such a code below (like Propel for PHP):
<pre class="brush: ruby">
def foo
# generate condition A
# generate condition B
some_array.each do |h|
# generate condition A to N
end
# return condition which is concatenated by "OR" clause.
end
</pre>
One simple idea, I wrote (like Doctrine for PHP):
<pre class="brush: ruby">
Foo.where(CONDITION1).or(CONDITION2).or(CONDITION3)
</pre>
But it does not work.
A correct answer is below (use "scoped"):
<pre class="brush: ruby">
conds = Array.new
f = Foo.scoped
conds << f.tables[:field_name].eq('FOO')
some_array.each do |c|
conds << f.tables[:field_name].SOME_METHOD()
end
cond = nil
conds.each do |c|
if not cond
cond = c
else
cond = cond.or(c)
end
end
return Foo.where(cond)
</pre>
The code generates "(((COND1 OR COND2) OR COND3) OR COND4)" where clause.morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-68527869333760715852011-06-28T05:31:00.004+09:002011-06-28T06:07:19.904+09:00[Rails]: Generate Ajax remote link for Rails 3 + will_paginate 3.0.pre2The <a href="https://github.com/mislav/will_paginate/wiki">will_paginate 3.0.pre2</a> Gem does not support remote tag (like :remote => true).<br />
You need to create custom renderer but currently available posts do not work well.<br />
<br />
<ul>
<li><a href="http://www.tricksonrails.com/2010/04/rails3-and-will_paginate-doing-easy-remote-links-rails3-tricks-02/">Rails3 and will_paginate, Doing easy remote links – Rails3 Tricks #02</a></li>
<li><a href="http://thewebfellas.com/blog/2008/8/3/roll-your-own-pagination-links-with-will_paginate">Roll your own pagination links with will_paginate</a></li>
</ul>
<br />
I have solved this problem.<br />
<br />
<a name='more'></a>lib/remote_pagination_list_link_renderer.rb<br />
<pre class="brush: ruby">
class RemotePaginationListLinkRenderer < WillPaginate::ViewHelpers::LinkRenderer
private
# :remote => true
def link(text, target, attributes = {})
if target.is_a? Fixnum
attributes[:rel] = rel_value(target)
target = url(target)
end
attributes[:href] = target
attributes["data-remote"] = true
attributes["data-method"] = :get
tag(:a, text, attributes)
end
end
</pre>
<br />
Then, call will_paginate helper like below.
<pre class="brush: html">
<%= will_paginate @posts,
:renderer => RemotePaginationListLinkRenderer %>
</pre>
If you want to set this renderer as default,
config/initializers/will_paginate.rb
<pre class="brush: ruby">
# for :remote option
WillPaginate::ViewHelpers.pagination_options[:renderer] =
'RemotePaginationListLinkRenderer'
</pre>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-26102034295332593852011-06-24T06:39:00.001+09:002011-06-24T07:23:12.650+09:00[Mac]: 捗るコマンドライン・ターミナル環境iTerm2僕の周囲のエンジニアもほとんどがMacを使うようになり,今まで頑なにWindowsで開発してきた人たちも「そんなにいいなら試してみようかな・・・」といった感じでMacを試している人が最近増えている気がする.<br />
初めてMacを使う人が困るのが,どんな環境を揃えれば良いのかがわからんという事だと思う.Windows時代に使って慣れていたGUI系のソフトウェアが使えないので,開発効率が落ちてしまわないかが心配になるというのもありそう.<br />
そんなわけで,主にコマンドライン実行環境に絞って最近の自分の開発に使っているソフトや設定を晒してみる.主にWindowsでは<a href="http://yebisuya.dip.jp/Software/PuTTY/">putty(jp)</a>や<a href="http://ja.poderosa.org/">Poderosa</a>を使っていた人が対象になるかと思う.<br />
<br />
<a name='more'></a><h4>
なにはともあれiTerm2</h4>
OS X標準のTerminal.app(アプリケーション->ユーティリティに入ってる奴)も,昔に比べて非常に良くなった.具体的にはタブ表示に対応したことや,あちこちバギーだったのが安定してきたことがある.ただ,それでも標準のTerminal.appはマルチバイト文字の表示をしていると表示がバグったり,4つ以上のタブの切り替えがショートカットキー一発で出来ないなど,地味に不便なところがある.<br />
そんなわけで使っているのが<a href="http://code.google.com/p/iterm2/">iTerm2</a>.元々Terminal.appがショボかったころから<a href="http://iterm.sourceforge.net/">iTerm</a>があったこともあり,まだBetaではあるが安定している(特にクラッシュしたことはない).<br />
紹介記事なんかは<a href="http://journal.mycom.co.jp/articles/2010/09/07/iterm2-for-macosx/index.html">マイコミジャーナルの記事</a>あたりを見れば良いと思うが,使えば使うほどTerminal.appよりもいい感じ.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAKUuXFjLY-cltwjXB7h3IcVwYS_LdXFf9ts5dxPpgomfQI33HUvpxa9UxtLxBZJKQD7mxX9-iaZAdLUf37ZfbOjEsqR1Nj65aRlnR4mUixNNHGw3Lxn2F5wTuzpKp4f6OhVPYBbN8Zz8/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-06-24+6.17.46%25EF%25BC%2589.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAKUuXFjLY-cltwjXB7h3IcVwYS_LdXFf9ts5dxPpgomfQI33HUvpxa9UxtLxBZJKQD7mxX9-iaZAdLUf37ZfbOjEsqR1Nj65aRlnR4mUixNNHGw3Lxn2F5wTuzpKp4f6OhVPYBbN8Zz8/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-06-24+6.17.46%25EF%25BC%2589.png" width="320" /></a></div>
<h4>
軽い</h4>
標準のTerminal.appを使っていて切り替えるとじわじわ感じるのだが,iTerm2はかなり軽い.例えば,タブを切り替えたときなんかにもたつくことが無い.Railsのログをtail -fでずっと垂れ流しているターミナルを眺める時なんかも追随性が良い印象.<br />
<h4>
4つ以上のタブ間でのショートカットキーによる一発切り替え</h4>
僕がiTerm時代から使っている最大の利点はここ.Terminal.appにも複数タブ間の切り替えショートカットキーはあるのだが,前のタブを選択(Command + {)と次のタブを選択(Command + })しか出来ないので,タブを4つ以上開いたときに一発で目的のタブに移動することが出来ないことがある.それに,「前の/次の」というのは相対的な位置関係になるので,タブを移動したときに思っていたタブじゃなかったなんていうこともある.<br />
一方,iTerm2でタブ切り替えのショートカットキーは「Command + [1-9の数字キー]」に割り当てられている.これは地味に重要で,Command + 1を押したときは常に左はじのタブに移動できるという安心感がある.特にショートカットキーを連打しがちな人には重要.ちなみに僕は以下のようにタブを使い分けている.<br />
<br />
<ol>
<li>メインの作業用Shell.localhostでscreenを立ち上げて使う</li>
<li>screen無しのlocalhost用Shell.主にtail -f専用で,Railsのログ出力など流れが早いものはホイールスクロールで履歴を見たいので使っている</li>
<li>これ以降はリモートにログインするとき用のShell.1番目のタブは基本的にリモートログインをしない.これはローカルだと思って危険なコマンドをリモートで実行しないための対策.</li>
</ol>
<div>
こうしておくと,基本的には1番目のタブで作業し,Logを見るときはCommand + 2,リモートで作業するときはCommand + 3以上,迷子になったらとりあえずCommand + 1でメイン環境に戻る,といった使い方ができる.</div>
<br />
ちなみに,Terminal.appにもCommand + [1-9]によるショートカットキーは<br />
あるのだが,なぜかウィンドウ間切り替えに割り当てられているので,ウィンドウは一つに統一してタブで作業する人には向かない.<br />
<h4>
他にも色々</h4>
それ以外にも,検索機能や入力補完機能,ショートカットキーのカスタマイズやショートカットキーによる一発呼び出しなど,Terminal.appに無い機能が揃っている.ただ,僕はあまりこの手の機能を使ってないので,使いたい人は使えばいいと思う.<br />
<h4>
まとめ</h4>
というわけで,以下のような人にはぜひiTerm2がオススメ<br />
<br />
<ul>
<li>まだTerminal.appのショートカットキーに指が慣れていない人</li>
<li>複数ウィンドウを開かず,主にタブで作業する人</li>
<li>Terminal.appより高機能なターミナルが欲しい人</li>
</ul>
<div>
最近Beta 3になったので,そろそろリリース版が出るかな.wktk</div>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-65098584692190165852011-04-06T16:09:00.000+09:002011-04-06T16:09:34.231+09:00[LaTeX]: IEEETran環境でcopyright noticeを追加する方法<div class="separator" style="clear: both; text-align: left;">
IEEEに会議論文を投稿する時にはIEEETranというLaTeXスタイルを使うのだが,カメラレディ投稿時には一枚目の左下にcopyright noticeを追加するように言われる.</div>
<div class="separator" style="clear: both; text-align: left;">
下図の位置に,カンファレンス毎に指定された文字列を入れる事になっているみたい.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV3-Nc7DPBR3Mk4eCvqUIJAGCLnoeFgpcv0EyPlxtTN97-KM3CiQs4yv-5wSH0V71WszQG5wBOSa_53p6laEv3BlcuHdTEoENN-RVC-SftqGX-yMjxFzaV-9Gi_AdpqrScRhVGTgu1o9M/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-04-06+15.58.17%25EF%25BC%2589.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV3-Nc7DPBR3Mk4eCvqUIJAGCLnoeFgpcv0EyPlxtTN97-KM3CiQs4yv-5wSH0V71WszQG5wBOSa_53p6laEv3BlcuHdTEoENN-RVC-SftqGX-yMjxFzaV-9Gi_AdpqrScRhVGTgu1o9M/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-04-06+15.58.17%25EF%25BC%2589.png" width="314" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
ここで,どのコマンド指定で設定すれば良いかが分からなかったのでしばらく調べてみたら,ちゃんとコマンドが用意されていた.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<a name='more'></a>そのコマンドは\IEEEpubid{}という物なのだが,そのまま使うとdouble columnのペーパーの場合,左側のカラムしか下部を空けてくれない.<br />
<div class="separator" style="clear: both; text-align: left;">
なので,開いた左側の部分にだけコピーライト表示を収めるには,以下の様に記述すれば良い.</div>
<code class="highlight">
¥IEEEpubid{
¥makebox[¥columnwidth]{ conference別に定められた文字列 ¥$26.00 ¥copyright 2011 IEEE ¥hfill}
¥hspace{¥columnsep}¥makebox[¥columnwidth]{}
}
</code>
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
これでページ下部に左寄せでコピーライトが置かれる.右寄せにしたければ\hfillの位置を文字列の前に持ってくれば良い.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-81963602992116799272011-03-31T16:54:00.004+09:002011-03-31T16:58:18.196+09:00[VPS]: さくらのVPSが安いのは分かっていてもEC2を使う理由<a href="http://vps.sakura.ad.jp/">さくらのVPS</a>が正式サービス化され,国内の低RTTサーバをそれなりのスペックで使えるようになった.<br />
さくらのVPSはあちこちのVPSサービスに比べて実使用上のパフォーマンスが相当高い.具体的には以下の記事を見てみると良いと思う.<br />
<br />
<a href="http://tanaka.sakura.ad.jp/2011/02/vps-sakura-saases-serversman.html">格安の低価格VPSを比較する</a><br />
<br />
VPSサービスは仕様上の性能はいいことを書いておいて,実際使ってみるとI/Oパフォーマンスが異常に悪かったりするひどいサービスもあるのだが,さくらのVPSはその点値段以上のパフォーマンスが出ているといえる.<br />
<br />
そんな状態でもEC2を使いたいというシチュエーションがあったので,まとめておく.<br />
<br />
<a name='more'></a>
<h4>各VPSサービスの整理</h4>
<br />
まず,さくらのVPSの利点は主に下記の点にある.<br />
<ul>
<li>月額単価が安く,定額(+初期費用も安い)</li>
<li>国内にサーバがあり,国内向けのサービスには良いRTT性能を発揮する</li>
<li>性能的なコストパフォーマンスが非常に高い</li>
<li>自分の好きなディストリビューションを選択できる</li>
</ul>
<br />
一方,Amazon EC2の利点は次の通り.<br />
<br />
<ul>
<li>AMIを使った「オレオレVM」を作成し,使い回すことでセットアップのコストを圧縮できる</li>
<li>1時間単位で課金されるので,使わないときはVMをshutdownしておけばお金がかからない</li>
<li>VMの性能別プランが複数あるのに加え,EBSによりほぼ無限にストレージを拡張可能</li>
<li>ELB, CloudFrontやS3など,スケーリングに対応したオプションサービスが豊富</li>
<li><a href="http://www.atmarkit.co.jp/aig/04biz/sla.html">SLA(Service Level Agreement)</a>99.5%保証</li>
</ul>
<br />
色々あって分かり難いので,表にしてみた.
<br />
<iframe frameborder="0" height="400" src="https://spreadsheets1.google.com/pub?hl=en&hl=en&key=0AqPiQlLOEclcdHlUWlIxNVRoeHA1N1pyLURnU0w5Ync&single=true&gid=0&output=html&widget=true" width="600"></iframe>
<br />
<br />
<ul>
<li>※1:Tokyo Regionを使えばさくらと同等のRTTが出せる</li>
<li>※2:公式サポート外のOSでもfstabを弄ったりして無理やり動作可能</li>
</ul>
<div>
<br />
<h4 class="post-subtitle">EC2の方が向いているケース</h4>
<div>
こうしてまとめてみると,さくらのVPSに比べてEC2が強いシチュエーションは以下のケースが考えられる.</div>
<div>
<ul>
<li>大量のストレージ(数百GB〜)を必要とする,またはその見込みがある</li>
<li>SLAによる稼働率保証が欲しい</li>
</ul>
</div>
</div>
こうした要求にばっちりマッチするのが,それなりに<b>人数の多いメールサーバ</b>だったりする.<br />
メールサーバは組織の扱うデータの性質にも寄るが,ある程度以上の規模になると色々と頭を悩ませる点が多くなってくる.<br />
主には,<br />
<br />
<ul>
<li>メールボックスのサイズ増大によるストレージの追加コスト</li>
<li>バックアップ管理,及び障害対応のコスト</li>
<li>停電や障害時でも高い稼働率を要求される事による運用コスト</li>
</ul>
<div>
といったものがシステム管理上大変なものになる.</div>
<div>
<br /></div>
<div>
<a href="http://www.google.com/apps/intl/ja/business/index.html">Google Apps</a>を使うという選択肢もあるが,メールの配送が微妙に遅延したり,自前サーバでないとできないことをやろうとすると結局別にサーバを用意しないといけなくなったりするという問題がある.</div>
<div>
さらに,ビジネス向けは1アカウント辺り年間6,000円なので,12アカウントも作れば月額6,000円になってしまい,アルバイト,契約社員を含めて多くの従業員が居て,柔軟に人数が増減する環境ではコスト高になってしまう.</div>
<h4 class="post-subtitle">メールサーバにはEC2?</h4>
<div>
というわけで,メールサーバとしてEC2を使うのはオススメできると思う.EBSなら数TB単位のストレージをボタン一発で確保できるし,バックアップもスナップショットを使えば簡単に取れる.</div>
<div>
何より,途中でストレージが足りなくなったときにOSの再インストールや機材の発注などの面倒なことをする必要がないというのは良い点だと思う.</div>
<div>
<br /></div>
<div>
また,EC2はスパムメールサーバに使われやすいことから,そのままメール設定をするだけだとスパムブラックリストに入ってしまうので,以下のサイトを参考にDNSの逆引き設定を行う必要がある.</div>
<div>
<br /></div>
<div>
<a href="http://d.hatena.ne.jp/rx7/20100319/p1">Amazon EC2のサーバからメール送信をするまでにやるべきこと (スパムメール扱いを回避する!)</a></div>
<div>
<h4 class="post-subtitle">まとめ</h4>
</div>
<div>
そんなわけで,今後の夏の計画停電に向けて,会社にメールサーバがある会社は真剣にVPSへの移行を検討しても良いのではないかと思う.</div>
<div>
計画停電が無いにしても,今後電気代が上がるのは避けられない状況でもあるし,各社に節電対応が求められるようにもなってくるだろう.そんな時の選択肢として頭に留めておく価値はあるだろう.</div>
<div>
<br /></div>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-21404588426772602382011-02-03T04:07:00.002+09:002011-07-12T21:04:00.649+09:00[Rails]: Rails3のActiveRecordで複雑なOR文生成Rails 3のActiveRecordはArelというDSLを使ってクエリを生成するのだが,単純なクエリであればともかく,複雑なクエリを実行しようと思うと色々と四苦八苦しないといけなくなる.<br />
# この辺はどのORMでも同じだけど
今回,複雑なSQL文を作る必要が出たのでその方法をまとめておく.<br />
<a name='more'></a>
やりたいことは,以下のような感じ.よくあるたくさんの条件をORで繋いで検索する様なケース.
<pre class="brush: ruby">
def hoge
# 条件1の作成
# 条件2の作成
some_array.each do |h|
# 条件3〜nの作成
end
# 条件1〜nをORで接続してreturn
end
</pre>
これをやろうとして,
<pre class="brush: ruby">
Hoge.where(CONDITION1).or(CONDITION2).or(CONDITION3)
</pre>
ということが出来れば良かったのだが,これはできない.正しくは,scopedを使って,
<pre class="brush: ruby">
conds = Array.new
h = Hoge.scoped
conds << h.tables[:field_name].eq('HOGE')
some_array.each do |c|
conds << h.tables[:field_name].SOME_METHOD()
end
cond = nil
conds.each do |c|
if not cond
cond = c
else
cond = cond.or(c)
end
end
return HogeModel.where(cond)
</pre>
とやるといけた.<br /><br />
生成されるSQL文は「(((COND1 OR COND2) OR COND3) OR COND4)」という形式になるが,論理和演算なので括弧は特に気にしなくても良い.
結局このへんで3時間近くハマってしまった.Rails3系はまだ情報が少ないのが辛いなあ.morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-80674755379492736372011-02-01T19:09:00.006+09:002011-02-03T04:05:30.745+09:00[Rails]: Deviseで二段階パスワード認証RailsのDeviseはメールアドレス認証などの便利機能が付いていて非常に便利なのだが,オールインワン過ぎてちょっと挙動を弄ろうとするとどこから手をつけていいのか分からなくなる.<br />
例えば,Amazonなんかでやられているような二段階のパスワード認証をやろうとしたのだが,イマイチ事例が見つからなかったので色々とやってみた.<br />
<br />
<a name='more'></a>
最終的には以下のコードでできた.User.valid_password?を使えば良いみたい.<br />
<code class="highlight language-ruby">
# controller
def hoge
if current_user.valid_password?(params[:password])
# password is valid
else
# password is invalid
end
end
</code>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-72632171884174450642010-09-16T09:10:00.001+09:002010-09-16T09:17:11.518+09:00[VPS]: 自宅サーバとVPSの運用コスト比較前回の記事でも書いたとおり,EC2 Micro InstanceやさくらVPSなど,1000円前後のVPSサービスが最近熱い.<br />
<div>そこで,これだけ安くなってくると自宅サーバの電気代を下回るのではないかと思い,ざっくりコスト計算をしてみることにした.</div><div><br />
</div><h4 class="post-subtitle">前提など</h4><div>シナリオとしては3通り.EC2はドル払いになるので為替変動の影響を受けるのと,転送量などの従量課金特性があるので今回は定額の<a href="http://vps.sakura.ad.jp/">さくらVPS</a>を指標として利用した.</div><div><ul><li>さくらVPSで運用</li>
<li>自宅サーバ(デスクトップPC)で運用.初期投資は既存のものを使いまわすので無料</li>
<li>自宅サーバ(ノートPC)で運用.初期投資は既存のものを使いまわすので無料</li>
</ul><div><a name='more'></a><div>PCの電気代についてだが,PCの電源ユニットには最大300Wとか450Wが出力できるものが使われているが,実際に消費される電力は負荷によって大きく変動する.</div><div>CPUやHDDは稼働しているときに大きな電力を使うので,サーバの利用用途によって実際の消費電力は異なるのに注意して欲しい.</div><div><br />
</div>電気代だが<a href="http://pc.usy.jp/wiki/index.php?PowerEdge/SC440">こちらのサイト</a>を見てみると,一昔前のDellのSOHO用デスクトップマシン <a href="http://www1.jp.dell.com/jp/ja/home/servers/pedge_sc440/pd.aspx?refid=pedge_sc440&cs=jpdhs1&s=dhs">SC440</a>では50W前半という話が出ている.Windows XPのアイドル時で50W程度とのことなので,多少多めに見積もって60Wということで計算する.</div></div><div><br />
</div><div>また,ノートPCについては<a href="http://www.tdtsh.com/blog/archives/34">こちらのサイト</a>によると,<a href="http://www-06.ibm.com/jp/pc/thinkpad/tpx60s/tpx60sa.shtml">Thinkpad X60s</a>の標準時消費電力が9.3Wとのことなので,こちらも多少余裕を見て10Wで計算する.</div><div><br />
</div><h4 class="post-subtitle">計算結果</h4><br />
<div>さて,そんな状況下で24ヶ月分のコストを見積もってみたのが以下の図である(電気代の計算には<a href="http://kunisan.jp/denki/">消費電力計算君</a>を用いた).</div><div><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjSb87Lsi62pLI0AATtSo26RrwBVqJ5hfYVHaCj6685mbouqN2SdmE8A-JmyPLpKYmTg4UAv6bxDEgsp0NprnCfJ5dPfbA_5m3IXrltQmLoocnjIzaHLjuRD_rQRrdzLyN70tOAxJt9CA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-09-16+8.39.48%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjSb87Lsi62pLI0AATtSo26RrwBVqJ5hfYVHaCj6685mbouqN2SdmE8A-JmyPLpKYmTg4UAv6bxDEgsp0NprnCfJ5dPfbA_5m3IXrltQmLoocnjIzaHLjuRD_rQRrdzLyN70tOAxJt9CA/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-09-16+8.39.48%EF%BC%89.png" /></a></div><div><br />
</div><div>見てみるとわかるが,さくらVPSはデスクトップPCとほとんど同じ運用コストになっていることが分かる.実際に,さくらVPSは980円/月,60WのデスクトップPCでは950円/月と,30円しか違いが無かった.</div><div>一方,ノートPCの消費電力は圧倒的に小さく,160円/月という計算になった.しかも,ノートPCの電気代にはディスプレイの消費電力が含まれているので,ディスプレイの電源を落とすことでさらに電気代は抑えることができるだろう.</div><div><br />
</div><h4 class="post-subtitle">考察</h4><br />
<div><div>ここから言えることは,現状デスクトップPCで自宅サーバを運用している場合,自宅内LANの転送速度が必要だとか,高速なファイルサーバが必要といった事情が無ければ1000円前後のVPSに移行した方が良いという結論になる.</div></div><div>実際に自宅サーバを運用するにはハードウェア故障や冷却などの追加コストやリスクが発生するので,デスクトップPCからVPSに移行するモチベーションは高い.</div><div><br />
</div><div>一方,ノートPCで運用する場合にはさくらVPSに比べて1年間で9,840円のコスト的メリットがある.</div><div>仮に既に使っていないノートPCがあり,ハードウェア故障や回線障害の問題を気にしなければこちらの方が安いということになる.</div><div>しかし,1度HDDが故障すれば吹っ飛んでしまう様な違いなので,対して変わらないとも言える.</div><div><br />
</div><div>結論として,これまで安いからという理由だけで自宅サーバを運用してきた人や小企業にとっては,VPSへの移行を考えても良い時期になったのではないかと思う.</div><div>ファイルサーバなどはNASのような専用機器が一般化してきているので,現状自宅サーバがやっていることは恐らくWebの公開やFTPサーバといったサービスだろう.</div><div>こうしたサービスであれば,安定稼働かつ広帯域でハードウェア故障の危険性のないVPSに移行するメリットは十分あるのではないだろうか.</div><div><br />
</div><div>引き続きVPS周りはwatchしていきたいと思う.</div>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-18299406118293932672010-09-12T14:37:00.000+09:002010-09-12T14:37:41.122+09:00EC2 Micro InstanceとSmall Instanceのコスト比較先日AmazonがEC2のMicro Instanceという新しいInstance Typeを発表した.<br />
EC2というのはAmazonの提供しているレンタルサーバサービス(VPS)のようなもの.<br />
Instance TypeというのはEC2用語でスペック別のサーバタイプに相当する.<br />
<br />
今回はこれまで最小スペックだったSmallと新しく発表されたMicroの間でコスト比較をしてみる.<br />
<br />
<br />
<a name='more'></a><br />
<br />
まず,基本情報としてEC2の値段表はこちら<br />
<a href="http://aws.amazon.com/ec2/pricing/">http://aws.amazon.com/ec2/pricing/</a><br />
<br />
また,スペックはこちらに一覧されている<br />
<a href="http://aws.amazon.com/ec2/instance-types/">http://aws.amazon.com/ec2/instance-types/</a><br />
<br />
EC2の値付けはちょっと特殊で,普通のレンタルサーバのように月額固定費というわけではなく,サーバを起動している時間,リソース(ネットワーク/Disk要領,IO)の消費量によっても課金される.<br />
なのでここで計算する値はあくまでも試算になる.<br />
<br />
まず,サーバの起動にかかる費用だが,<br />
<br />
<br />
Small+APAC@シンガポール,Spot Instance(完全従量課金)を利用した場合,Smallだと0.095 USD/hになるので,<br />
0.095 * 24 * 30 = <b>68.4</b> USD/month<br />
<br />
に対して,Micro Instanceだと<br />
0.025 * 24 * 39 = <b><span class="Apple-style-span" style="color: red;">18</span></b> USD/month<br />
<br />
さらに,1年間一部金額を前払いするReserved Instanceを使うと,Smallなら<br />
( 227.5 + 0.04 * 24 * 365 ) / 12 = <b>48.16</b> USD/month<br />
<br />
の所を,Microだと<br />
( 54 + 0.01 * 24 * 365 ) / 12 = <b><span class="Apple-style-span" style="color: red;">11.8</span></b> USD/month<br />
<br />
3年間前払いのReservedだと,Smallが<br />
( 350 + 0.04 * 24 * 365 * 3 ) / 36 = <b>38.92</b> USD/month<br />
<br />
Microは<br />
( 82 + 0.01 * 24 * 365 * 3 ) / 36 = <b><span class="Apple-style-span" style="color: red;">9.58</span></b> USD/month<br />
<br />
になる.<br />
<br />
SmallとMicroのスペック差は<br />
・Small<br />
1.7 GB memory<br />
1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit)<br />
160 GB instance storage (150 GB plus 10 GB root partition)<br />
32-bit platform<br />
I/O Performance: Moderate<br />
<br />
・Micro<br />
613 MB memory<br />
Up to 2 EC2 Compute Units (for short periodic bursts)<br />
EBS storage only<br />
32-bit or 64-bit platform<br />
I/O Performance: Low<br />
<br />
<br />
になるが,そこまでユーザ数の多く無いサービスや,計算量がそれほどいらないといったサービスであればMicroでも十分だと言える.<br />
例えば,テストサーバ,バックアップサーバなどにも使いやすいだろう.<br />
<br />
なお,実際にEC2でサーバを利用する際には別途EBS(Elastic Block Store)というストレージサービス(仮想HDDの様なもの)も使うことになる.こちらは月0.1 USD/GBなので,50GBのストレージを確保すれば余計に5 USD/monthかかるので注意.<br />
他にも,ネットワークI/Oと上記のEBSへのI/O不可が高くなるとそれなりの課金が発生するので,予算見積をするときには考慮に入れる必要がある.<br />
<br />
僕としてはとりあえずは人柱待ちだが,テストやバックアップなどのバックエンド系であればもう使っても良いかなと思う.<br />
<a href="http://vps.sakura.ad.jp/">さくらのVPS</a>が月額980円なので価格だけ見ればそちらの方が安いが,EC2はVMイメージ(AMI)の使い回しや,Spot Instance(時間課金で必要なときだけ起動できる)があるので,その柔軟性も考慮に入れるのであれば,運用の仕方によってはEC2の方が良い,というケースも出てくるように思う.morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-78578382628057088692010-08-13T20:54:00.000+09:002010-08-13T20:54:34.906+09:00[Git]: gitサーバマシン上で行う初期設定<a href="http://git-scm.com/">Git</a>や<a href="http://subversion.tigris.org/">Subversion</a>はもはやチーム開発に無くてはならないツールとして定着してきているが,Subversionがインストールしただけでとりあえず動くのに対し,Gitは初期設定をしてやらないとうまく動かない.<br />
といってもそんなに面倒なわけではないので,とりあえず以下のコマンドを実行しておけば問題ない.<br />
<br />
<pre class="shell" name="code">git config --global user.name "Your Name"
git config --global user.email youremail@example.com
git config --global core.editor emacs
git config --global color.ui true
</pre><br />
特にcolor.uiの設定をするのとしないのではコンソールで作業をするときの効率が大きく違ってくる.<br />
core.editorも設定しておかないと,debian系ディストリビューションだったりすると<a href="http://www.nano-editor.org/">nano</a>が起動したりしてワケが分からなくなるので自分の使っているエディタに設定しておくべき.morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-31410575660920914762010-08-06T15:15:00.001+09:002010-08-06T15:16:49.430+09:00[Qt]: Qt Creatorを使ったオブジェクト指向プログラミング授業資料今更だが,去年にQtを使った授業資料を作成したことを思い出した.せっかくなのでここでURLを晒してみる.<br />
<br />
<a href="http://web.sfc.keio.ac.jp/~morimori/op/">オブジェクト指向プログラミング</a><br />
<br />
当時1.0系が出た直後のQt Creatorを使ってやってみたのだが,かなり難航したのを覚えている.<br />
僕は教育体験という形で授業資料を作ったのだが,Javaとは違い人によって動いたり動かなかったりしたのが大変だったなあ.<br />
# なぜかARMの開発環境をインストールしている学生がいて,GCCがconflictしてたりなんてこともあった<br />
<br />
そんなわけで,もう1年も経って情報は古いけど,見てみたい人はどうぞ.サポートはしません.<br />
内容としては,初めてオブジェクト指向プログラミングをやる人のための授業なので,詳しい人は見る価値はあまり無いです.morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-19632830250601202362010-08-06T14:15:00.000+09:002010-08-06T14:15:17.301+09:00[iPhone]: データ通信が不安定なときの対処法iPhoneを使っているとたまに3Gデータ通信が不安定になり,完全に繋がらなくなる時がある.<br />
特に大容量のデータ通信を続けて行なったときなんかに多い.<br />
そういった時は「設定」メニューから「機内モード」を一時的にONにし,3Gが一時停止したのを確認したあとOFFにすることで,3G周りを再起動すると繋がるようになることが多い.<br />
<br />
個人的な推測になるが,Softbank側で帯域制限か何かをやっているのではないかと思う.3Gを再起動することで,新しいIPを拾うので,それで回避できるのかも.<br />
でもまあ,本気で帯域制限しようと思ったらSIM IDを使って帯域制限するだろうと思うので,この予想は外れてる気がしないでもない.<br />
<br />
とりあえずの対症療法ということで.morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-37244894101153580152010-08-05T20:06:00.006+09:002010-08-06T11:10:05.747+09:00[Mac]: 17インチMacBook Proでのノマドワーキング<a href="http://www.amazon.co.jp/gp/product/B003H4PRUE?ie=UTF8&tag=prognagger-22&linkCode=as2&camp=247&creative=7399&creativeASIN=B003H4PRUE">17インチMacBook Pro Mid 2010</a>を買ってからそれまでのコーディングライフが大きく変わった.<br />
これまで自宅や仕事先など,大画面ディスプレイがないとがっつりコーディングするつもりになれなかったのが,このマシンのおかげでどこでも作業できるようになった.<br />
<br />
いわゆる最近流行りの<a href="http://d.hatena.ne.jp/keyword/%E3%83%8E%E3%83%9E%E3%83%89%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0">ノマドワーキング</a>への一歩を踏み出して2ヶ月ほど経ったので,僕なりに考えた利点や使っているツールなどを書いていこうと思う.ツールなどはWebアプリケーション向けだが,ノマドワーキングの利点などは他の分野でも同じだと思う.<br />
<br />
<a name='more'></a><br />
<script type="text/javascript">
<!--
google_ad_client = "pub-7732117947701838";
/* 468x60, 作成済み 10/07/29more */
google_ad_slot = "0311334659";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><br />
<br />
<div><h4 class="post-subtitle">ノマドワーキングの利点:割り込みを減らす</h4>僕がノマドワーキングを初めて大きな利点だと感じたのは,<b><span class="Apple-style-span" style="color: red;">割り込みが減ること</span></b>だ.これは電話や質問相談などの事務系処理によるものもあるが,自宅で作業しているときにありがちな<b>娯楽への誘惑</b>も含めることができる.<br />
<br />
僕らのようなソフトウェア開発を行う人間の作業において,いかに効率的に<b><a href="http://ja.wikipedia.org/wiki/%E3%83%95%E3%83%AD%E3%83%BC">フロー状態</a></b>を継続するかは仕事の効率に大きく影響する.<br />
フロー状態とは,作業を行っていて完全に没入している状態のことである.ソフトウェア開発をある程度やったことのある人であれば経験したことがあると思うが,完全に集中しており,いつもとは明らかに違う勢いでコーディングが進む,あの状態のことである.<br />
フロー状態に入っている時は完全にその時のコードに集中しているため,その時に書いたコードは自然と質も良くなっていることが多い.<br />
しかし,フロー状態の大きな弱点は<b><span class="Apple-style-span" style="color: red;">割り込みに弱いこと</span></b>なのだ.<br />
<br />
フロー状態に入るには30分程度かかるため,一度割り込みが発生するとまた30分は効率の悪い時間が発生する.しかし意外と30分も割り込みのない環境というのは少なかったりする.<br />
どうしても作業をしていると仕事場においては自分宛てでない電話の対応をしたり,来客の対応,同僚の相談などが発生する.自宅においても意志が弱い自分にとっては休憩という名の誘惑が常に割り込みシグナルを送ってくる.<br />
<br />
まとめると,仕事場においては外的要因が割り込み要因となり,自宅においては自分の甘えが割り込み要因となりうるわけだ.<br />
<br />
一方,ノマドワーキングにおいてはそれらの要因が程々にカットされる.<br />
まず,仕事場において発生する電話対応などは最小限になる.かかってくるにしても自分宛の電話だったりするので,少なくとも他人宛の電話や伝言を預かるために割り込みが発生する心配はない.<br />
自宅において発生する甘えについても,喫茶店などであれば「外」であり,他人の目が存在するためにあまりにもだらけた状態にはなれないという作用が働く.つまり少々気を緩めたとしてもニコニコ動画を観始めたりするようなことはない.せいぜいTwitterのTLを数分眺める程度だ.<br />
<br />
割り込みの発生頻度をうまく調整することができるという点において,ノマドワーキングの利点は大きいと言える.<br />
<br />
<h4 class="post-subtitle">ノマドワーキングの為のツール:ハードウェア編</h4>ノマドワーキングを始めるにあたって,用意すべきものは二つある.<br />
<br />
<ol><li>自分が作業するのに十分な解像度とバッテリ寿命を持ったPC</li>
<li>低速でも良いのでインターネットに繋ぐ回線</li>
</ol><br />
1については特に言うまでもないかもしれないが,<b>自分が作業するのに十分な</b>という部分は大事だ.特に,普段大画面を使ってでソースコードを同時に2,3ウィンドウも開いて作業をしているような人は,小さい画面というだけで作業にストレスを感じてしまう.結果,作業を始めてもイライラしてしまい,メールの処理程度で飽きてしまうことになる.<br />
また,バッテリ容量についても,5時間以上は保つバッテリを積んでいるマシンが望ましい.バッテリ残量というのは意外と気になるもので,作業していて残り残量が30%位になってくるとチラチラ見てしまうものだ.なので,バッテリについては全く気にしなくて良い位容量のあるマシンが良いだろう.<br />
僕は冒頭に挙げた通り17インチ版MacBook Proを使っている.重いが優秀なマシンだ.<br />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=prognagger-22&o=9&p=8&l=as1&m=amazon&f=ifr&md=1X69VDGQCMF7Z30FM082&asins=B003H4PRUE" style="height: 240px; width: 120px;"></iframe><br />
<br />
2については必須ではないが,コーディングしていてオンラインのAPIドキュメントやソースコード検索をしたいことは頻繁にあるので,まともにコーディングするには必要だと思う.<br />
僕は<a href="http://prognagger.blogspot.com/2010/07/iphoneb-mobile-b-mobile-simiphone.html">こちらの記事</a>で書いたときのb-mobileの回線を使っている.300kbpsは結構遅いが,テキストベースの検索には必要十分である.<br />
<br />
<h4 class="post-subtitle">ノマドワーキングの為のツール:ソフトウェア編</h4>ここからはプログラミングの分野によっても違ってくると思うが,僕はWebアプリケーションを書くことが多いのでそちらの例で書こうと思う.<br />
<br />
<ul><li>git or git-svn</li>
</ul><div>バージョン管理された開発においては必須.gitの何より良いところは<b>オフラインでもコミットできる</b>所だ.外でごりごりコードを書いて,仕事場でまとめてmergeする,といった使い方が出来るのはgitならではだろう.Subversionではこうはいかない.</div><div><ul><li>MacPortsでインストールしたPHP+Apache+MySQL環境</li>
</ul><div><a href="http://www.apachefriends.org/jp/xampp.html">XAMPP</a>を使うという方法もあるのだが,以前PHPのImageMagick拡張であるIMagickを使おうとしたときにどうしてもうまくいかなかったので,<a href="http://www.macports.org/">MacPorts</a>からインストールしたものを使っている.</div></div><div>XAMPPはダウンロードした状態のまま使うのであれば非常に良いツールなのだが,ちょっと外部のライブラリをリンクさせようとした途端にうまくいかなくなることがあるので注意したい.</div><div><ul><li>Mac OS X標準のpostfix</li>
</ul><div>Webアプリケーションを書いてて良くあるのはメールを送信する処理であるが,ローカル開発の場合,メール送信の環境を自前で整えなくてはいけない.</div></div><div>その点,Snow Leopardからは標準でpostfixが搭載されたので,<a href="http://earlybirds.ddo.jp/namahage/inegalog/article.php?id=15">こちらの記事</a>などを参考にローカルにメールサーバを立ててしまう.</div><div>これで,回線さえ繋がっていればメール送信のテストまで問題なく行うことができる.</div><div><ul><li>VMWare FusionとWindowsをインストールしたVM</li>
</ul></div><div>IEでの動作確認に必要.面倒だが一応世の中の大半の人はIEを使っているのでチェックすることに.</div><div><br />
</div><br />
大体これくらいあればローカルでのWebアプリケーション開発が可能だ.<br />
ノマドワーキングのための環境作りというよりは,一般的なローカル開発のための環境構築になっている気がするが,実際開発においてはこれくらいで良かったりする.<br />
<br />
<h4 class="post-subtitle">ノマドワーキングの行き先探し</h4>さて,環境は整ってもどこで作業をするのかという問題が残る.<br />
僕的オススメスポットは単価が高いのが難点だがスタバだ.スタバは少人数向けの席構成が多く,自分と同じように資格試験の勉強をしに来ている人もいたりして,割合静かな方である.もちろん例外もあるが.<br />
あちこち行ってみて,自分に合う場所と時間帯を見つけるのが良いだろう.あまり混んでいるときに席をずっと占領するのも悪いので,お店の空気も読みつつ.<br />
<br />
ある程度作業していて「集中できないな」と思ったときは,移動すると気分転換になる.駅前ならいくつかお店を見てまわるのも良いと思う.<b>気分転換の幅が広い</b>のもノマドワーキングの利点かもしれない.<br />
<br />
後は,電車の中も意外と集中できる場所である.もちろん満員電車の中でやるのはオススメしないが,昼下がりの人の少ない長距離移動の際など,30分以上乗車時間があればモジュールの一つ位は書ける.<br />
ただ,電車移動中はネット回線が不安定になるので,sshでの作業やgit push,git pullはあまりオススメしない.<br />
<br />
<b><span class="Apple-style-span" style="font-size: x-large;">家を出る前に気をつけておきたいこと</span></b><br />
最後に,家を出る前に気をつけておきたいことを挙げておく.<br />
<br />
<ul><li>バッテリの充電状況のチェック</li>
<li>git pullしておく</li>
<li>ケーブル類に過不足が無いか(モバイルルータとの接続など)</li>
</ul><div>これだけチェックしておけばとりあえず大丈夫だと思う.後は自分用に色々と調整してみるのがいいだろう.</div><br />
<br />
</div>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-55348698915401779232010-07-29T09:28:00.003+09:002010-07-30T01:36:33.472+09:00[iPhone][b-mobile]: b-mobile SIMをiPhone 3Gに刺してiPad Wifiを繋ぐ今更ながら<a href="http://www.bmobile.ne.jp/sim/">b-mobileSIM U300</a>を買ってみた.目的はiPhone 3GをWifiテザリング端末として利用すること.<br />
<br />
iPad Wifiは自炊した本を読んだりするのには非常に便利なのだが,ちょっと大きい画面でTwitterを見たり,Evernoteのノート更新をしたいと思ったときにいちいちWifiのあるところまで行くのがなかなか面倒だったりする.<br />
と言ってもiPad 3Gの為だけに新しくもう一回線契約するのも固定費がかさむ.現状iPad Wifiをインターネットに繋ぐにはWifi経由でインターネットに接続するしか無いので,<a href="http://k-tai.impress.co.jp/docs/news/20100526_369649.html">こちらの記事</a>にあるようなモバイルルータという機器を使う事になる.<br />
<br />
しかし,このモバイルルータが実は結構高い.大体3万円〜5万円くらいするので,2年で減価償却すると考えても月1500円程度の固定費が発生するのと同じになる.<br />
モバイルルータとは別に3G網の回線契約も必要になるので,このコストはちょっと受け入れ難い.<br />
<br />
そんな時,手元にiPhone 3Gがあれば,これをモバイルルータとして使う事ができるので,その方法をまとめてみた.<br />
接続イメージは下図の様な形になる.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwF973boVFzQD13eXyOuzeADpUHYsaZ-3j0NpWyxZ6R5-vy3-K7LphiHnYS4fyTa7bTbvLUFyUo8TZh14kfYYVQGOPOwyYS1c0Tn540753I4h3IOwAkoRGaQ5sLap26jL_8KBrC4otCL0/s1600/bmobile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwF973boVFzQD13eXyOuzeADpUHYsaZ-3j0NpWyxZ6R5-vy3-K7LphiHnYS4fyTa7bTbvLUFyUo8TZh14kfYYVQGOPOwyYS1c0Tn540753I4h3IOwAkoRGaQ5sLap26jL_8KBrC4otCL0/s400/bmobile.png" width="400" /></a></div><br />
<a name='more'></a><span class="Apple-style-span" style="color: red;"><br />
<script type="text/javascript"><!--
google_ad_client = "pub-7732117947701838";
/* 468x60, 作成済み 10/07/29more */
google_ad_slot = "0311334659";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
<b>以下の手順(特にJailbreak周り)を行う際は自己責任の元行うこと!最悪iPhoneが文鎮化する可能性がある.</b></span><br />
<a href="http://blog.iphone-dev.org/post/862193913/getting-out-of-jail-is-free">Jailbreakは米国では合法と認められたという話</a>があるが,当然Appleが公式にサポートするかどうかは全くの別問題なので,at your own riskで行うこと.<br />
<br />
最初に注意しておくが,iPhoneをモバイルルータ化するには端末をJailbreakしておく必要がある.現状ではJailbreakするのに割と細かい条件があるので,b-mobile SIMを買う前に確認しておくべきである.<br />
以下に現状でのJailbreak条件を述べておく.特にiPhone 3GSの場合はかなり条件が厳しいので注意.<br />
<br />
<ul><li>iPhone 3Gの場合</li>
<ul><li>現在のOSバージョンやファームウェアバージョンに関係なく,問題なく可能.「iPhone 3G Jailbreak」などで検索すればやり方は見つかるはず.</li>
</ul><li>iPhone 3GSの場合</li>
<ul><li>iOS 4にアップデート済み</li>
<ul><li><a href="http://kurohime.homeip.net/kuro/archives/2010/07/iphone-3gs-ios4-jailbreak.php">iPhone OS 3.1.xの時のSHSHが保存してあれば可能</a>だが,現時点では基本的には不可能</li>
</ul><li>iPhone OS 3.1.xのまま</li>
<ul><li><a href="http://taisyo.seesaa.net/article/148569367.html">この辺のツール</a>を使えばできるっぽいが,紐付きJailbreakなど,色々問題があったはずなので,実行前に情報を集めてからやる方が良さそう</li>
</ul></ul><li>iPhone 4の場合</li>
<ul><li>現時点でJailbreak可能なツールは出まわっていないので不可能</li>
</ul></ul><br />
詳しいJailbreakの方法については各自適当に調べて欲しい.<br />
以下はJailbreak済みのiPhone 3Gで行っているので,他の環境の場合は人柱覚悟でやって欲しい.<br />
<br />
ここから本題.<br />
<br />
まずは,b-mobile SIMを入手する必要がある.b-mobile SIMは大手家電量販店で扱っているらしいので,店舗で買う場合はそちらが良いだろう.<a href="http://www.bmobile.ne.jp/personal/shop/shop.html">公式の販売店リストはこちら</a>.<br />
僕の場合はb-mobileの<a href="http://www.bmobile.ne.jp/sim/">オンラインサイト</a>から購入した.<br />
納期については27日の朝9時に注文したら同日23時くらいに出荷のお知らせメールが届き,28日には届いた.これだけスムーズに出荷してくれるので,急な出張の時にも重宝しそうだ.<br />
<br />
梱包を開くと,こんな感じのパッケージが出てくる.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguTOB137_qbKXU5rDOyRx9Kj0_XSidS1Kr12lOqUt2T8-ksSaGE6cIVxWmu-trLJJqEEzli33nc5D2Otjq8mrTm6fmMiS-6TWfQaU4vF8ZW7n-hYOYQ07h3yyxAHa020zp6ULo3nTcK3w/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.04.34%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguTOB137_qbKXU5rDOyRx9Kj0_XSidS1Kr12lOqUt2T8-ksSaGE6cIVxWmu-trLJJqEEzli33nc5D2Otjq8mrTm6fmMiS-6TWfQaU4vF8ZW7n-hYOYQ07h3yyxAHa020zp6ULo3nTcK3w/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.04.34%EF%BC%89.png" /></a></div><br />
中を開けるとSIMカードがこんな感じにパッケージされている.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzMru7NFe2HY949s34qgUXNtEdp2pXI4wqC-phSEdFiNaRMG9Lgi1sIBg3K1Q8QBB0YMK1XeHyfwAT5wzIaqTTQFJTO4aRm38_UAkwHyGvk7rssms1MpaQ_5hIWEFjagZoHc1CzRz2F_Y/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.05.53%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzMru7NFe2HY949s34qgUXNtEdp2pXI4wqC-phSEdFiNaRMG9Lgi1sIBg3K1Q8QBB0YMK1XeHyfwAT5wzIaqTTQFJTO4aRm38_UAkwHyGvk7rssms1MpaQ_5hIWEFjagZoHc1CzRz2F_Y/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.05.53%EF%BC%89.png" /></a></div><br />
プラモを作るときの要領で,SIMカードを切り離したら,それをiPhone 3Gにセットする.<br />
SIMカードスロットにアクセスするときは,先の細いクリップのようなものが必要になる.iPhoneを買った時のパッケージにも工具が入っているはずだが,僕は無くしてしまったので下図に示す電子工作用のブレッドボード配線材を使っている.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0_azWMK4wzmEKkj4kspEO-VTWYlso0EBYUxT3rM1g_C_uAHINA5kKLZF6OnMttxgjMsws6UHxglnCA49-Ruw5uXv5O_xsFIwedO9-_c22xEOh195fLVzqDUXuItc_qu44Dt0vN1fiVKA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.07.21%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0_azWMK4wzmEKkj4kspEO-VTWYlso0EBYUxT3rM1g_C_uAHINA5kKLZF6OnMttxgjMsws6UHxglnCA49-Ruw5uXv5O_xsFIwedO9-_c22xEOh195fLVzqDUXuItc_qu44Dt0vN1fiVKA/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.07.21%EF%BC%89.png" /></a></div>これを<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid0NP9RwhI0cdwMCqofQsocsloQAVb4F2sWqKaU-VMvsiqYJmfGJX-t0dBL3xw3Tv18LkMCW_xWbnnaR0Ds8KQ4C4k443XhY_yBcHQwsRrGuFixmcOdZvXnWPF1T0cLxguB0i7QqnwFHI/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.09.29%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid0NP9RwhI0cdwMCqofQsocsloQAVb4F2sWqKaU-VMvsiqYJmfGJX-t0dBL3xw3Tv18LkMCW_xWbnnaR0Ds8KQ4C4k443XhY_yBcHQwsRrGuFixmcOdZvXnWPF1T0cLxguB0i7QqnwFHI/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.09.29%EF%BC%89.png" /></a></div>こんな感じに刺して<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh7bCKh4wBNkB2wmUDOhkOH6thYWgRuPqMbn5TVHaqOzWRjOnhvX1pEwndV-Lc6HlevHA4nYZpaX8CdqalBGcqdcLMH5WSWpgAvr52uGFKL7hhQp6xVJCTI30KRZQqyObsE8mLS5FLnno/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.10.43%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh7bCKh4wBNkB2wmUDOhkOH6thYWgRuPqMbn5TVHaqOzWRjOnhvX1pEwndV-Lc6HlevHA4nYZpaX8CdqalBGcqdcLMH5WSWpgAvr52uGFKL7hhQp6xVJCTI30KRZQqyObsE8mLS5FLnno/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.10.43%EF%BC%89.png" /></a></div><br />
b-mobile SIMをこんな感じにセットして,戻す.<br />
<br />
すると,iPhone側でSIMカード自体は認識するのだが,電波強度の表示は最低状態で表示される.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsI782Eua_eWVbE_lsGYdORl7GpdgOrp1lG_EEJK2LVwkd_EH418HWS7VCnS8rTRBY9yTHT6KxUyETnOc3LmxSmmWq07HRE_2EaQGguZO00TpkU6UF4aq6z2HubjwsJFjHN2ltCYjnE2s/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.12.11%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsI782Eua_eWVbE_lsGYdORl7GpdgOrp1lG_EEJK2LVwkd_EH418HWS7VCnS8rTRBY9yTHT6KxUyETnOc3LmxSmmWq07HRE_2EaQGguZO00TpkU6UF4aq6z2HubjwsJFjHN2ltCYjnE2s/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.12.11%EF%BC%89.png" /></a></div>SIMカード自体が存在しない場合は「SIMなし」と表示されるので,SIMカード自体は認識している.<br />
<br />
次に,APNの設定をする.APNは携帯キャリアに接続するときの設定で,<b><span class="Apple-style-span" style="color: red;">SIMロックフリー化していないと設定できない</span></b>.<br />
SIMロックフリー化していない場合,iPhoneの「設定->一般->ネットワーク」では以下のように表示される.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEievRTI9QfCU0lf3CcQ2BLme9eopAaSJNXSv2XRmPHaJR_VXp4iIbkWfIEahf9pNxZV0CVeXgwSdVkXTLvTI_PcsaZ6of6z3rGWTQxcG8ZUaqRdJrrDOcMWfJ9J7vAXiy8pulaH7-5LHPY/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.14.56%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEievRTI9QfCU0lf3CcQ2BLme9eopAaSJNXSv2XRmPHaJR_VXp4iIbkWfIEahf9pNxZV0CVeXgwSdVkXTLvTI_PcsaZ6of6z3rGWTQxcG8ZUaqRdJrrDOcMWfJ9J7vAXiy8pulaH7-5LHPY/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.14.56%EF%BC%89.png" /></a></div><br />
これが,Cydiaからultrasn0wをインストールしてロック解除すると,こんな感じになる.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic3pSWF46rvF57N9-KJzvXXeZIn3XVmMR7B2I1CB7gFN9d3Qxu4XfIQ9Z1Rva39fLRi2T4IgcXVTp8Sl5gdLOhwTcBFjsjl7FYJg3qYYDbqD891JgXLtqZwx41W_6bzRriIdYbGurW_Lk/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.15.40%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic3pSWF46rvF57N9-KJzvXXeZIn3XVmMR7B2I1CB7gFN9d3Qxu4XfIQ9Z1Rva39fLRi2T4IgcXVTp8Sl5gdLOhwTcBFjsjl7FYJg3qYYDbqD891JgXLtqZwx41W_6bzRriIdYbGurW_Lk/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.15.40%EF%BC%89.png" /></a></div>「パケット通信」というのが追加されているのがわかると思う.これがAPN設定を行う部分になる.<br />
<br />
APNの設定内容については,同梱の説明書に書いてある通り設定した.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN1utqSev_jMz8SZ-cC7udjkKE9aKxd-yBW87fdbbrNQsHW3YciPm9Ol8zxIbk2fzk0J_ibaIsCyLzkUbHE8y-KzAkVdJklfHliB-ZT-p8DpYtMfLETtDwCnKsrCJottAJdXQJxdo11n4/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.16.25%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN1utqSev_jMz8SZ-cC7udjkKE9aKxd-yBW87fdbbrNQsHW3YciPm9Ol8zxIbk2fzk0J_ibaIsCyLzkUbHE8y-KzAkVdJklfHliB-ZT-p8DpYtMfLETtDwCnKsrCJottAJdXQJxdo11n4/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.16.25%EF%BC%89.png" /></a></div><br />
この状態でSafariを起動して適当なページにアクセスしようとすると,今度は「bモバイル開通手続きについて」というページに強制リダイレクトされる.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg32CBU6ME-uTABvd8aCiraQjX0a8UNGnfM5Vp701dRthTo7uuR0K_Aiaoh7zxjHk4kAuOQMk-UsVRpHG0qp9U54N5brBIXMxSdOkM71kPXkCjDnP5S_E-uOSBdeHVby2bYkLWFKJ5xsbA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.17.25%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg32CBU6ME-uTABvd8aCiraQjX0a8UNGnfM5Vp701dRthTo7uuR0K_Aiaoh7zxjHk4kAuOQMk-UsVRpHG0qp9U54N5brBIXMxSdOkM71kPXkCjDnP5S_E-uOSBdeHVby2bYkLWFKJ5xsbA/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.17.25%EF%BC%89.png" /></a></div>このページにある通り,携帯電話or固定電話経由でb-mobile SIMのアクティベーションを行うと,しばらく経ってから繋がるようになった.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG1KaNZtZiVrQW2GAq3tY25GQVECeROW3J5BVlj55FdJSmZ1eDdkoKaRhDV6ElRE2F2mMVzs0DgUG9UYV1rgvqHru2qyYh869IgoUhoz-QIowfLHFEVwllj3ifZHQVhWh9Y3eqbNsr3g8/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.18.47%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG1KaNZtZiVrQW2GAq3tY25GQVECeROW3J5BVlj55FdJSmZ1eDdkoKaRhDV6ElRE2F2mMVzs0DgUG9UYV1rgvqHru2qyYh869IgoUhoz-QIowfLHFEVwllj3ifZHQVhWh9Y3eqbNsr3g8/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.18.47%EF%BC%89.png" /></a></div>電波強度の表示は最低のままだが,問題なく接続できている.<br />
<br />
回線速度はこんな感じだった.上りも下りも30〜40KB/secくらいだと思って使うのが良さそう.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjxJewnQZIeGrq_EUJ2ggIBeFNV6EWaWX25IYv7h8zwx4g29-CrhXrzpFfGNtkB_J3MwIG-kxxtxyZBemrwqK_NBMzBtFS_JSDuTvcZnk1nKQff3hsATjbsxjna1X-PzmX6rzel8qO1kw/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.19.49%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjxJewnQZIeGrq_EUJ2ggIBeFNV6EWaWX25IYv7h8zwx4g29-CrhXrzpFfGNtkB_J3MwIG-kxxtxyZBemrwqK_NBMzBtFS_JSDuTvcZnk1nKQff3hsATjbsxjna1X-PzmX6rzel8qO1kw/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.19.49%EF%BC%89.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxmRYQBosZ4ige-UydIHP8xD8QDa1qPiGtbJvp9TQHXcv6ImrsZUiOs1tKpvFoKRllKUNxvWyTBthB4R3ddEFnF1BlFjGav3gy-4UXdqNHc-DWAC9d1pxGTp6KVrHeelIq_kmE0IBTRTQ/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.20.44%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxmRYQBosZ4ige-UydIHP8xD8QDa1qPiGtbJvp9TQHXcv6ImrsZUiOs1tKpvFoKRllKUNxvWyTBthB4R3ddEFnF1BlFjGav3gy-4UXdqNHc-DWAC9d1pxGTp6KVrHeelIq_kmE0IBTRTQ/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.20.44%EF%BC%89.png" width="400" /></a></div><br />
これでiPhoneが3Gネットワークに繋がるようになったので,次はWifiテザリングの設定をする.<br />
使ったのはMyWi 4.0というJailbreakアプリで,<a href="http://apple-voice.com/wordpress/2010/05/iphone-how-to-tethering-mywi-mac-windows/">こちらのページに詳しい設定方法がある</a>ので,設定方法については割愛する.<br />
トライアルとして7〜10日位は無料で使え,その後は19.9USDのアクティベーションを行わないと使えなくなる.支払い方法はPaypalが使えるので,そちらで支払いをした.<br />
<br />
そんなこんなでiPadとiPhoneを無線LAN経由で繋いでスピードテストをしてみた.結果は以下の通り.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGl7JXW2CreoLy6nVQ6ZRBehO4X6CuqYfHGH4IMk-b3uJipBS9nG51ljFpUK8Ts55Vi7aj07n-NArgVOVyO8dSE6MVa-SeHyUdVeYbgseil_gq1rSDC2nAhgz292smsUvZLJjASAFH3QM/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.24.45%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGl7JXW2CreoLy6nVQ6ZRBehO4X6CuqYfHGH4IMk-b3uJipBS9nG51ljFpUK8Ts55Vi7aj07n-NArgVOVyO8dSE6MVa-SeHyUdVeYbgseil_gq1rSDC2nAhgz292smsUvZLJjASAFH3QM/s640/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.24.45%EF%BC%89.png" width="640" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibgY55Qf42cCj2nJYUsFaOKZq_GM96T5oFHWphl9xU2CQwkMD8N4nfRgTYHhbXXpErI8l2ZGBQ4M4Jq1B7zjjHo2waFHNeCH7R8IKDBA2k6BYOPwRIWqT8uTeebIOEthBs240xtJV6DxA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.25.08%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibgY55Qf42cCj2nJYUsFaOKZq_GM96T5oFHWphl9xU2CQwkMD8N4nfRgTYHhbXXpErI8l2ZGBQ4M4Jq1B7zjjHo2waFHNeCH7R8IKDBA2k6BYOPwRIWqT8uTeebIOEthBs240xtJV6DxA/s640/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-29+9.25.08%EF%BC%89.png" width="640" /></a></div><br />
テザリングによるCPU消費などは特にボトルネックになっていないことがわかる.<br />
<br />
とりあえず200kbps以上は普通に出ているので,128kbpsのネットラジオを聞いたり,テキスト中心のWebブラウジングをするのには必要十分だろう.<br />
<br />
ではでは.morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-17255777439597783172010-07-26T07:48:00.010+09:002010-07-30T01:37:19.629+09:00[Mac OS X]: Kasperskyが重くて色々と不具合が起きる時には最近Mac OS X用のアンチウイルスソフトとして<a href="http://www.justsystems.com/jp/products/kasperskymac/">Kaspersky Anti-Virus (Mac OS X)</a>を使い始めたのだが,どうもこいつがお行儀が悪い.<br />
具体的には,常にCPUの1コアを占有して100%の負荷がかかった状態になり,バッテリをバカ食いしてしまうというもの.<br />
もちろん,CPUを1コア占有しているので,他の処理もそれに引っ張られて重くなってしまっている.<br />
<br />
最初は定期的に行われる全スキャンか何かが原因かと思ったのだが,数日たっても一向に終わらないので何かおかしいと思っていた.<br />
その内SpacesやExposeの挙動までおかしくなり始め,にっちもさっちも行かなくなってしまった.<br />
そんな時の対処法をまとめてみた.<br />
<br />
<a name='more'></a><br />
<script type="text/javascript"><!--
google_ad_client = "pub-7732117947701838";
/* 468x60, 作成済み 10/07/29more */
google_ad_slot = "0311334659";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
<br />
<br />
まず,Kasperskyが本当に悪さをしているのかどうかを確かめるには,アクティビティモニタから「kav」というプロセス名のプロセスを探す.これがKasperskyのバックグランドプロセス名だ.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkdNBTZD_by5XtCZ76ayBQB996RStRqYQzAvC3JITQ_iKG853RID_BFKfOU6FwxzYNxnkpBy2eS8wWhkPxHbVDAvv2of4EGw0bq5ehhcUk8FSQmBfHzIyZjqVKaMclTxVi56W8m9eowRI/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+7.54.07%EF%BC%89.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497981027267469586" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkdNBTZD_by5XtCZ76ayBQB996RStRqYQzAvC3JITQ_iKG853RID_BFKfOU6FwxzYNxnkpBy2eS8wWhkPxHbVDAvv2of4EGw0bq5ehhcUk8FSQmBfHzIyZjqVKaMclTxVi56W8m9eowRI/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+7.54.07%EF%BC%89.png" style="cursor: hand; cursor: pointer; display: block; height: 11px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><br />
<br />
こいつのCPUが100近くリソースを消費していれば,何かがおかしい可能性がある.もちろん単に全スキャンを実行している最中だったりすることもあると思うので,一概には言えない.<br />
<br />
次に,DockやExposeの不具合の原因がKasperskyの原因にあるかどうかを確かめるには,一時的にKasperskyを無効にしてみればわかる.<br />
Kasperskyをインストールしてあれば,メニューバーにKasperskyのアイコンがあると思うので,その中から「プロテクションを無効にする」を選択する.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkEckFLEMa09bP52msgChgI25eSZmbaQMaw2WJJic5ARQS0Gn3dMHOCuOXbthXdUcbc6UjwnRfErBHfJZJUKZwkK2YzmCRRwK-E_9hpiekIKlcIydiYg52lppyyp_zvgrHULLxWqrBs34/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+7.56.37%EF%BC%89.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497981818128696546" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkEckFLEMa09bP52msgChgI25eSZmbaQMaw2WJJic5ARQS0Gn3dMHOCuOXbthXdUcbc6UjwnRfErBHfJZJUKZwkK2YzmCRRwK-E_9hpiekIKlcIydiYg52lppyyp_zvgrHULLxWqrBs34/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+7.56.37%EF%BC%89.png" style="cursor: hand; cursor: pointer; display: block; height: 241px; margin: 0px auto 10px; text-align: center; width: 226px;" /></a><br />
<br />
プロテクションを無効にした直後にSpacesやExposeの動作が正常化した場合,不具合の原因がKasperskyにあることが予想される.<br />
<br />
次に,Kasperskyの設定を見なおしてみる.下図のアイコンをクリックしてKasperskyの環境設定を開く.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyJYhoFQNZ2lChiojGCOnMmfXf8mFz7UIfDLXWKOIP4ksWDN2HWVkCCEEpIpWjKewCpAN41lRIVhun13Ar8GM561wdeia2HRbXrRcwJhYs6Bg8GeUmAIKgnU-euglC8W1cBDm7k-HY_Y4/s1600/kaspersky.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497982673471254946" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyJYhoFQNZ2lChiojGCOnMmfXf8mFz7UIfDLXWKOIP4ksWDN2HWVkCCEEpIpWjKewCpAN41lRIVhun13Ar8GM561wdeia2HRbXrRcwJhYs6Bg8GeUmAIKgnU-euglC8W1cBDm7k-HY_Y4/s400/kaspersky.png" style="cursor: hand; cursor: pointer; display: block; height: 259px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><br />
<br />
次に「プロテクション」タブの「セキュリティレベル」にある「カスタマイズ」ボタンをクリックする.<br />
その中に「スキャン範囲」という項目があるのだが,ここから「全てのネットワークドライブ」のチェックを外す.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJXQRdckiw5kOc5M4V6AkuqaEqhi85onnhMG6SO9577iqrD9dl1esuOFQQho99CidiyvyN6Leeqaxf5PXIaGdUhKHl9pDUGhmk74YpG3fLenHLJKMfsZzYDLNainNUHdIDpdNf5hVFH4E/s1600/kas2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497983355144073346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJXQRdckiw5kOc5M4V6AkuqaEqhi85onnhMG6SO9577iqrD9dl1esuOFQQho99CidiyvyN6Leeqaxf5PXIaGdUhKHl9pDUGhmk74YpG3fLenHLJKMfsZzYDLNainNUHdIDpdNf5hVFH4E/s400/kas2.png" style="cursor: hand; cursor: pointer; display: block; height: 339px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><br />
<br />
これで,TimeCapsuleなどの大容量ネットワークドライブが接続してある時に,そちらをスキャンしにいくようなことは無くなった.<br />
僕の環境ではこの設定にしてから,とりあえず今のところは再び暴走すること無く動作している.<br />
<br />
全ての不具合の原因がこれとは限らないが,KasperskyとTimeCapsuleなどの大容量NASをネットワークドライブとして運用している人は設定を見なおしてみると良いかもしれない.morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-18296720416051030032010-07-26T00:25:00.015+09:002010-07-30T01:37:39.394+09:00[Mac OS X]: Lyrics Master - iTunesの曲に歌詞を自動設定し,iPhone/iPodで閲覧する仕事にプライベートに,音楽を聴きながら何か作業をすることは非常に多いが,たまにはじっくり歌詞を見ながら曲を聴きたいこともある.特に,iPhoneやiPodに歌詞を登録しておいて,移動中などのスキマ時間に読みたいということはあるだろう.<br />
<br />
そんな時,<a href="http://www.utamap.com/">うたまっぷ</a>や<a href="http://www.uta-net.com/">歌ネット</a>などのサービスを使って歌詞を調べ,一つ一つ設定していくということはできなくもない.<br />
ただ,歌詞サイトは大体コピペできないような設定がされているので,これが実に面倒だったりする.<br />
<br />
これを自動化してくれるソフトが<a href="http://www.kenichimaehashi.com/lyricsmaster/">Lyrics Master</a>だ.<br />
<br />
Lyrics Masterを起動した状態でiTunesの曲を流していれば,自動的に歌詞を収集,登録してくれる.<br />
<br />
<a name='more'></a><br />
<script type="text/javascript"><!--
google_ad_client = "pub-7732117947701838";
/* 468x60, 作成済み 10/07/29more */
google_ad_slot = "0311334659";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
<br />
<br />
<h4>インストール方法</h4><br />
<a href="http://www.kenichimaehashi.com/lyricsmaster/">Lyrics Masterのホームページ</a>へ行き,最新版をダウンロード,アプリケーションフォルダにコピーする.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXpmh_RZWTCqGB0WaC1z_aedPEMvHjOtOjJDUeu55_kPRCLEguhQnsiEomyvBY8t3KdG_wHANc8NfG7nDmBAKj64NBou9eI4_t2KS_eEMSFmv96NUol92Is4cirt4kK353WDEJtxVJEgM/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.35.46%EF%BC%89.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497868114905178546" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXpmh_RZWTCqGB0WaC1z_aedPEMvHjOtOjJDUeu55_kPRCLEguhQnsiEomyvBY8t3KdG_wHANc8NfG7nDmBAKj64NBou9eI4_t2KS_eEMSFmv96NUol92Is4cirt4kK353WDEJtxVJEgM/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.35.46%EF%BC%89.png" style="cursor: hand; cursor: pointer; display: block; height: 235px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><br />
<br />
次に,<span style="font-weight: bold;">Lyrics Master/iTunes Scripts</span>に入っている<span style="font-weight: bold;">インストーラ</span>を起動すると,以下のようなウィンドウが現れるので,インストールを実行する.<br />
この作業は必須ではないが,iTunesからLyrics Masterを起動したり操作することができるようになるので,入れておいた方が何かと便利.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6ArgRiyy2gqB_VE6mDhIq7gXbY3lmjxfxP6G9XAtqLxhDr7dCMjj6lzo_w_rSKk0_wvbtmWjwpBtslH3I2eB3alm6fXOtOXdnyUqk1PFxXg9ld4U8n6bPWnSvXKSxEXs8CF3a1FY06nA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.32.16%EF%BC%89.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497868572786379058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6ArgRiyy2gqB_VE6mDhIq7gXbY3lmjxfxP6G9XAtqLxhDr7dCMjj6lzo_w_rSKk0_wvbtmWjwpBtslH3I2eB3alm6fXOtOXdnyUqk1PFxXg9ld4U8n6bPWnSvXKSxEXs8CF3a1FY06nA/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.32.16%EF%BC%89.png" style="cursor: hand; cursor: pointer; display: block; height: 307px; margin: 0px auto 10px; text-align: center; width: 363px;" /></a><br />
<br />
これでインストールは完了.<br />
<br />
<h4>使い方</h4><br />
<br />
前述のインストーラからiTunesスクリプトをインストールしてあれば,iTunesのスクリプトメニューからLyrics Masterを起動できる.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIFTa0RpxgLlBixgxK0FqchZQuKRHBBZmUn7hJHa4Cl_yuR90c3SI5skfhGIcOC56nn828sXAoaWKjjnt1BfJ9xhW0VG8qU9qly5LwX-7WdxkrfiLIkuZ_gPXogB6Yqi25Mq059YC3YIw/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.40.11%EF%BC%89.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497869379900672434" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIFTa0RpxgLlBixgxK0FqchZQuKRHBBZmUn7hJHa4Cl_yuR90c3SI5skfhGIcOC56nn828sXAoaWKjjnt1BfJ9xhW0VG8qU9qly5LwX-7WdxkrfiLIkuZ_gPXogB6Yqi25Mq059YC3YIw/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.40.11%EF%BC%89.png" style="cursor: hand; cursor: pointer; display: block; height: 202px; margin: 0px auto 10px; text-align: center; width: 226px;" /></a><br />
<br />
初回起動時には規約の認証などが表示されるので,一通り目を通して起動すると,以下のようなウィンドウが現れる.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRzuLnnzIcUItrkdpXMw1-w0IuyIPRiubflLgfEpuhukyQFcUkxo_mTHSbaHhc3R62IHCRW9xF3W0cOT2TVXwt2GF9LcsMcIPEVa1lKsHcbRuDVqPng9lZycp92CkLFxWhlDnkTCCILiU/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.42.10%EF%BC%89.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497870489067469186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRzuLnnzIcUItrkdpXMw1-w0IuyIPRiubflLgfEpuhukyQFcUkxo_mTHSbaHhc3R62IHCRW9xF3W0cOT2TVXwt2GF9LcsMcIPEVa1lKsHcbRuDVqPng9lZycp92CkLFxWhlDnkTCCILiU/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.42.10%EF%BC%89.png" style="cursor: hand; cursor: pointer; display: block; height: 377px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><br />
<br />
ここで,検索ボタンを押して歌詞を検索することもできるが,iTunesに戻り,スクリプトメニューから「Lyrics Masterと連携スタート」を選択すると,iTunesで再生している曲の歌詞を自動で検索するモードになる.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV8vrZuDI1euQOmnmVUmGEv4aO8CiggrRrF1E8sitjibPUZTxpybfHzn745txDbuM2LDO6nWRdSwlZe0bpzX-Gke7MTSqSEEyVAkLSr_da25HzJUC1lZ90iEAK8ESptIDgFeIjdy-4j7g/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.45.58%EF%BC%89.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497870850236021714" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV8vrZuDI1euQOmnmVUmGEv4aO8CiggrRrF1E8sitjibPUZTxpybfHzn745txDbuM2LDO6nWRdSwlZe0bpzX-Gke7MTSqSEEyVAkLSr_da25HzJUC1lZ90iEAK8ESptIDgFeIjdy-4j7g/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.45.58%EF%BC%89.png" style="cursor: hand; cursor: pointer; display: block; height: 202px; margin: 0px auto 10px; text-align: center; width: 224px;" /></a><br />
<br />
この状態で,適当な楽曲を再生して「検索」ボタンを押してみると,以下のように表示される.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0v_vlX3k3FoPkMv_REIM7saB32kdtODSrup6g73qohYUZi1dg79mpZntuM5NgCaQI8BUtHDEvz3AeRT0XPEYJtcDyoFXaWV7hDQsY9GehNTOR0DqA-2BRNQYuOZSvO5ugKqk-xdOMI_4/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.47.59%EF%BC%89.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497871544347504690" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0v_vlX3k3FoPkMv_REIM7saB32kdtODSrup6g73qohYUZi1dg79mpZntuM5NgCaQI8BUtHDEvz3AeRT0XPEYJtcDyoFXaWV7hDQsY9GehNTOR0DqA-2BRNQYuOZSvO5ugKqk-xdOMI_4/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.47.59%EF%BC%89.png" style="cursor: hand; cursor: pointer; display: block; height: 343px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><br />
<br />
これは,曲名で検索したときに複数の歌詞サイトが引っかかったことを表しているので,この中から正しいものをダブルクリックすると,そのサイトの歌詞を設定して良いかのダイアログが開く.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj63eAYZ62WA84dN6fYxCq1aZbK1K1uzIg8WG0JofdSzEKrTeLchthVbYH1sfz3alPr-fVATiWjbUHCZoBP-yU2LP_k55b4cr_kbitN0MmDUk06Ev9wG3r5MXGeM74HneNO1kIeAxx-ho0/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.50.53%EF%BC%89.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497872136289284930" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj63eAYZ62WA84dN6fYxCq1aZbK1K1uzIg8WG0JofdSzEKrTeLchthVbYH1sfz3alPr-fVATiWjbUHCZoBP-yU2LP_k55b4cr_kbitN0MmDUk06Ev9wG3r5MXGeM74HneNO1kIeAxx-ho0/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.50.53%EF%BC%89.png" style="cursor: hand; cursor: pointer; display: block; height: 137px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><br />
<br />
ここで「続ける」を選択すれば,歌詞がiTunesの曲に登録される.<br />
<br />
登録された歌詞は,iTunesで曲を選び「情報を見る」を開き,「歌詞」のタブで確認できる.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKU5XNon-ChRr5j4vde_k87pAnGlLR5bSy1N6Lbjw0Rtsn8_aM-M6v8m9klywhp28y8sR8mepWSzcNw8pJUcRIzfdbF6WJm1uLejJ2WfKYyB81192zsiZD6rtAuHg5hVjhaZOGIveaiQM/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.52.21%EF%BC%89.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497872489788078370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKU5XNon-ChRr5j4vde_k87pAnGlLR5bSy1N6Lbjw0Rtsn8_aM-M6v8m9klywhp28y8sR8mepWSzcNw8pJUcRIzfdbF6WJm1uLejJ2WfKYyB81192zsiZD6rtAuHg5hVjhaZOGIveaiQM/s400/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-26+0.52.21%EF%BC%89.png" style="cursor: hand; cursor: pointer; display: block; height: 368px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><br />
<br />
歌詞が登録された状態でiPhone/iPodと同期して再生すると,以下のように歌詞が表示される(長い歌詞は上下にスクロールして閲覧できる).<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpWmLsJieArZLcilwggI_vLaTCkGOLv7x8dAzBvAefLBBhVfNHoV66GB_DOD5fiLb-Kv6EFklxwSTP5vRmiAOcaXbd7C5lD0i7IVld5suJbAK1ycNoOrGLiNq_7IxVLGOdpjFadfwnh0k/s1600/IMG_0702.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5497876113293204818" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpWmLsJieArZLcilwggI_vLaTCkGOLv7x8dAzBvAefLBBhVfNHoV66GB_DOD5fiLb-Kv6EFklxwSTP5vRmiAOcaXbd7C5lD0i7IVld5suJbAK1ycNoOrGLiNq_7IxVLGOdpjFadfwnh0k/s320/IMG_0702.PNG" style="cursor: hand; cursor: pointer; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 214px;" /></a><br />
<br />
そんなわけで,歌詞の自動ダウンロードをしてみたい人はどうぞ.morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-86535552887080323042010-07-25T06:45:00.004+09:002010-07-25T07:00:38.879+09:00[PHP][Symfony][Doctrine]: DoctrineでIDをキーにレコードを取り出すいくつかの案件でSymfony 1.4+Doctrineを使ってみて大体勝手が分かってきたので,メモ.<div><br /></div><div>Doctrineで以下のテーブルがあったとする.</div><pre name="code" class="yaml"><br />BlogPost:<br />columns:<br />title:<br />type: string(255)<br />body:<br />type: string()<br /></pre>この場合,自動的にidというフィールドが追加され,作られるテーブルは以下の通りになる(MySQL使用時).<div><div><div><pre><br />mysql> show fields from blog_post;<br />+-------+--------------+------+-----+---------+----------------+<br />| Field | Type | Null | Key | Default | Extra |<br />+-------+--------------+------+-----+---------+----------------+<br />| id | bigint(20) | NO | PRI | NULL | auto_increment |<br />| title | varchar(255) | YES | | NULL | |<br />| body | text | YES | | NULL | |<br />+-------+--------------+------+-----+---------+----------------+<br /></pre>ここで,IDを指定して1レコードだけ引っ張ってくる方法にはいくつかある.</div></div></div><div><br /><pre name="code" class="php"><br />$q = Doctrine_Query::create()<br /> ->from('BlogPost bp')<br /> ->where('bp.id = ?', $id);<br />$records = $q->execute();<br />if(count($records) > 0){<br /> $record = $records[0];<br />}<br /></pre><br /><pre name="code" class="php"><br />$q = Doctrine_Query::create()<br /> ->from('BlogPost bp')<br /> ->where('bp.id = ?', $id);<br />$record = $q->fetchOne();<br /></pre><br /><pre name="code" class="php"><br />$record = Doctrine::getTable('BlogPost')->find($id);<br /></pre><br />最初の方法ではlimit文が付かないので,その分遅くなる.後の二つは発行されるSQLも同じ.<br />最後の方法は非常に手軽なので,覚えておくと楽.<br /></div>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-67808692651962622822010-07-21T11:07:00.003+09:002010-07-24T01:36:36.084+09:00[プログラミング]: 開発現場における怖い話<div><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxaS8bNoOfHEDPCa9y08b_OVDFkiDSW9LK3IMue5BLXd66WuiwMkYeAg2kcCq7tndRD0LGuNbNLv-CePk0a06B7Z9dsTjQmeYGkaJxvstsmQjsHV924rnPAOw6TW7I_eYBKzmUGbYaK_M/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-21+11.09.19%EF%BC%89.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 281px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxaS8bNoOfHEDPCa9y08b_OVDFkiDSW9LK3IMue5BLXd66WuiwMkYeAg2kcCq7tndRD0LGuNbNLv-CePk0a06B7Z9dsTjQmeYGkaJxvstsmQjsHV924rnPAOw6TW7I_eYBKzmUGbYaK_M/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882010-07-21+11.09.19%EF%BC%89.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5496192789557227042" /></a><div style="text-align: center;"><a href="http://www.slideshare.net/Isoparametric/c-horror-kai">C++の話(本当にあった怖い話)</a></div><div><br /></div><div>こんなのを教えてもらった.</div><div><br /></div><div>自分は幸いこういったどうしようもない開発環境で働かされたことはないが,実際にこういう環境で働いている人と話したことはある.</div><div>チーム開発ではある程度全体の規約に従ったコーディングをしないといけないのは分かるけど,どう見ても非効率な規約があったりするのも事実.</div><div><br /></div><div>エディタとかまで制限されるときついよね.</div><div><br /></div>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-34598432220552010842010-07-19T21:04:00.002+09:002010-07-19T21:08:40.041+09:00[PHP]: mb_convert_kana()がうまく動かないときPHPにはmb_convert_kana()という英数時,スペースの半角文字と全角文字を変換する関数がある.<div>この関数は日本語を処理するときに非常に便利な関数なのだが,どうもうまく動かない時があるようだ.</div><div><br /></div><div>そんな時は</div><div><blockquote></blockquote></div><blockquote><div>mb_convert_kana($str, 'as');</div></blockquote><div>としていたのを</div><div></div><blockquote><div>mb_convert_kana($str, 'as', 'utf-8');</div><div></div></blockquote><div>としてやると上手くいくことがある.もちろん第三引数の文字コードは環境に応じて変える必要がある.</div><div><br /></div><div>恐らく,PHPの文字コードauto_detectが上手く動いていないのだと思うが,自分が開発している中では結構この不具合の発生率は高い気がする.</div><div><br /></div><div>mb_convert_kana()周りで不具合があったときは確認してみるといいと思う.</div><div><br /></div>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-82649977787642506202010-02-22T16:32:00.002+09:002010-02-22T17:01:05.051+09:00[PHP][Symfony]: Symfonyプロジェクト内にSymfonyライブラリを含める<div>require_once dirname(__FILE__).'/../lib/vendor/symfony/autoload/sfCoreAutoload.class.php';</div>多数のSymfonyプロジェクトを扱っていて困るのは、既にリリースして安定稼働中のSymfonyプロジェクトと、新規で開発するSymfonyのバージョンが異なるというケースだ。<div>一応Symfony公式ページではupdate方法も書かれているが、安定稼働中の本番サイトのバージョンアップはやはりリスクが大きい。</div><div>なので、バージョンの違うSymfonyを共存させる方法を書いておく。</div><div><br /></div><div>基本的にはSymfonyのライブラリディレクトリを丸ごとプロジェクトディレクトリ内(SF_ROOT以下のどこか)にコピーし、コンフィグファイルにそのディレクトリを指定してやれば良い。</div><div><br /></div><div>古いバージョンのSymfonyだと、config/config.phpというファイルがあり、ここにSymfonyのパスを指定するようになっている。これを「dirname(__FILE__)."/../pear/symfony"」などに変えてやれば良い。</div><div><br /></div><div><div><div></div><blockquote><div>$ cat config/config.php</div><div><?php</div><div><br /></div><div>// symfony directories</div><div>$sf_symfony_lib_dir = '/usr/local/lib/php/symfony';</div><div>$sf_symfony_data_dir = '/usr/local/lib/php/data/symfony';</div><div></div></blockquote><div>最近のバージョンの場合は、config/ProjectConfiguration.class.phpというファイルに設定があるので、最初にあるinclude行を</div><div><br /></div><div><div><blockquote></blockquote>require_once dirname(__FILE__).'/../lib/vendor/symfony/autoload/sfCoreAutoload.class.php';</div><div><br /></div></div><div>といった形で書きかえる。これでプロジェクトを丸ごと他のサーバに移動したときなども、問題なくSymfonyごと移行することができる。</div></div></div>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0tag:blogger.com,1999:blog-6640438956400282280.post-15453444879648340072010-02-22T00:08:00.004+09:002010-02-22T00:20:07.050+09:00[Windows Vista]: Windows Vistaでハイパーターミナルを使う仕事でとあるシリアルデバイスを叩くことになったのだが、手元のVistaにハイパーターミナルが入っていなかった。どうやらVistaには標準でハイパーターミナルはインストールされていないらしい。<div>他のシリアル通信ソフト(<a href="http://www.vector.co.jp/soft/winnt/hardware/se359336.html">SerialDebugger</a>など)を使えば良いのだが、デバイスのマニュアルにはハイパーターミナルを使った利用方法しか書いていなかったので、一応ハイパーターミナルでいじるほうが無難と思い、調べてみた。</div><div><br /></div><div><a href="http://social.technet.microsoft.com/Forums/ja-JP/windowsvistasoftwareja/thread/2ad79c8a-f8e4-4f38-bf91-55fb6c04cbb5">Vistaでハイパーターミナルを使う</a></div><div><br /></div><div>どうやらWindows XPからhypertrm.exeとhypertrm.dllを持ってくれば動くらしい。hypertrm.exeはC:\Program Files\Windows NTにあり、hypertrm.dllはC:\WINDOWS\system32にある。</div><div>これらの二つのファイルをローカルの同じフォルダにコピーしてくれば動作する。ただ、新しい接続のプロファイルを設定する際のアイコンが以下のように全て白くなってしまう。</div><div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMeyEjA8FvsmpX-5i5l6YJh0fDB5WtKUqgK8Ocg3M0QN7rxRZQmulx39Q5WYapAT8AiLZFwjua2RVvqDkgFWTGfJ1u1fSgjUVFK1cixk0kVP6NgJdVd9N9tJ5LVz-Y0nDG4rHzeUpXVPo/s1600-h/hypertrm.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMeyEjA8FvsmpX-5i5l6YJh0fDB5WtKUqgK8Ocg3M0QN7rxRZQmulx39Q5WYapAT8AiLZFwjua2RVvqDkgFWTGfJ1u1fSgjUVFK1cixk0kVP6NgJdVd9N9tJ5LVz-Y0nDG4rHzeUpXVPo/s320/hypertrm.jpg" alt="" id="BLOGGER_PHOTO_ID_5440716433756192882" border="0" /></a><br />別に実害はないのでこのまま利用しているが、もしかすると他にも悪影響があるかもしれない。<br />ちなみに、普通にシリアルターミナルやファイルの送受信を使っている範囲では問題は出なかった。<br /></div><div><br /></div><div><br /></div>morimorihogehttp://www.blogger.com/profile/17325259432157691108noreply@blogger.com0