スペースモラトリアムノカミサマ

日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。
(更新情報: RSS(ツッコミ付き) / RSS(ツッコミ抜き) / LIRS)

最近の TrackBack:
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|06|07|08|09|10|
2011|01|02|03|07|10|11|
2012|02|03|04|07|08|09|
2013|01|06|07|
2014|02|08|09|11|
2015|09|
2016|01|05|

2009/06/02 編集

_ [Internet][社会][政治] 「.日本」導入についてのパブコメ送った

日本語ccTLD「.日本」導入へ、「.大阪」などご当地ドメイン名も

総務省 | 21世紀におけるインターネット政策の在り方〜新たなトップレベルドメイン名の導入に向けて〜(案)に対する意見募集

4月に上記記事を見かけた時に「ハァ? これやばくね?」と思いつつその後しばらく忘れていたのだが、ふと気づくとパブコメの締切が明日17時に迫っていたので、急いで資料読んだ。

で、蓋を開けてみるとその内容は「.日本」の運用をどうするかという話が主になっていて、(どこにも明記はしてないけど)「.日本」の導入そのものは既に決定事項だよーんという空気が流れていたので、そこで敢えて空気を読まず「.日本」導入反対という路線で意見送ってみますた。

要旨はこんな感じで…

「.日本」の導入に反対する。

資料では「.日本」の導入が決定事項であるかのように記載されているが、導入するか否かを先に慎重に議論すべきではないか。(議論されたのであればその結果の要旨を載せるべきではないか)

また資料では導入のメリットのみを挙げデメリットが隠蔽されており、導入の是非の検討材料としても不十分である。

「総務省.日本」では「日本語だけ」のドメインにはなっておらず、URL 直接入力と検索、どちらの利用シーンでもメリットを見いだし難い一方で、新たな TLD 開設はフィッシング詐欺やドメイン紛争等のリスクの増加を招き、企業や自治体等の組織はその予防策として、使うあてのないドメインを多数予約するための無駄な出費を迫られることになる。

自分は一自治体の Web サイト管理を担う者として、住民保護のために無駄なドメイン維持費の支出を強制する新 TLD の創設に反対する。

まあこんな反対意見も空しく導入されるのかと思いますが。ある種税金を使わない効果的な景気対策かもしれませんね…!

もう一件、「電子政府ユーザビリティガイドライン(案)」に関するパブリックコメントの募集についてもよく確認しておきたいところですが、来週までか…


2009/06/07 編集

_ [] 新潟でベニズワイガニまみれ

井桁先生の車に乗せてもらって新潟に行ってきた。

ベニズワイガニ

まず道の駅マリンドリーム能生でベニズワイガニまみれ。

かにや横丁の各店舗は、前を通りがかるとどの店もおばちゃんがカニ足を1本剥いて試食を促してくる。そんな店舗が10ほどもあるので、下手すると試食だけでひと満足できてしまう状態。

もちろん試食だけで逃すわけもなく、きちんとした食事やお土産購入の営業も欠かさない。

最初のうちは「どう? 食べていかない?」「ちょっと待ち合わせの相手を待っているので…」…とかわしていたのだが、3店舗目で「じゃあ待ってる間小さいの食べてればいいじゃない、この800円の500円にまけてあげる、ついでにもう1つつけてあげるから」「じゃ、じゃあ…」と捕まり、定価2400円相当のカニを1000円でいただくことに。

その後前(人名)夫妻が到着した後も、「このベニズワイ4杯」と言ったらなぜか8〜9杯に倍増。

結局1人平均3〜4杯のベニズワイを平らげることになった。

あそこの定価はあってないようなものだ。うり二つの店舗がずらっと立ち並んでるのでとにかく値引き、オマケして客を取り込むんだな。原価はいったいいくらなんだろうか…。

あとはフォッサマグナミュージアムや温泉やラーメン屋でマターリして帰ってきたと。

途中の SA で見かけた萩の月のぱちもの、

東京月しずく

東京月しずく

東京月しずくと、

越後月路のしらべ

越後月路のしらべ。

その他のぱちもの→月リスト

…どんだけあるんだ…。


2009/06/09 編集

_ [Apple][iPhone][物欲] iPhone 3G S キタ

アップル、通信/動作を高速化した「iPhone 3G S」6月26日発売 -AV Watch

WWDC 2009:高速化した「iPhone 3G S」、6月26日発売──OS 3.0は6月17日配信 (1/2) - ITmedia News

[CG]iPhone 3G Sの正式発表だ!

iPhone 3G S 対 iPhone 3G 詳細比較リスト

とりあえず購入の方向で…1年間黒で使ってきたので次は気分を変えて白にしようか。

個人的に ktkr なのは

  • メインメモリ倍増? (ソース少なく信憑性微妙)
  • CPU 1.5倍? 2倍? (ソース少なく詳細不明)
  • Safari 高速化
  • コピペ標準装備
  • オートフォーカス・マクロ撮影
  • バッテリ持続時間の改善 (ただし WiFi でとのことなので 3G では変わらない可能性が高い)
  • 公式録音アプリ
  • プッシュ機能 (今後の各アプリの対応次第)

あたりか。

一番期待しているのはメモリ倍増と各種高速化だ。これでサイズの大きなページをスムーズに表示できたり各アプリが落ちなくなったりすると良いのだが…

しかし写真をメール添付するときに解像度を下げる機能もそろそろいい加減につかないもんでしょうか…

(2009/06/11追記)

「最大2倍」速い iPhone 3G S、CPUは600MHz・RAM 256MB

iPhone 3G Sのクロックは600MHz、メモリーは256MB - iPhone・iPod touch ラボ

クロック1.5倍、メモリ倍増で間違いないらしい。

本日のツッコミ(全2件) [ツッコミを入れる]

_ ぽにょりん [床もに対応するのはいつになるのでつかねぇ。 むすび丸アプリとかでたらktkrなのでつが。 ところでバクマソの単..]

_ p [ラッキーマソ!]


2009/06/15 編集

_ [Google][広告] AdSense の売り上げが激減している

5月から AdSense の売り上げが激減している。

4月以前と比べると約半分だ。

5月は GW の影響や「たまたま」という可能性を考えたが、6月になっても回復しないところを見ると一過性のものではないらしい。

これではつる屋にも行けない。ううむ。

本日のツッコミ(全1件) [ツッコミを入れる]

_ ぽにょりん [つるゃいきたいでつねぇ。 でも、健康診断でLDLとTGが。。orz]


2009/06/18 編集

_ [iPhone] iPhone OS 3.0 7A341 うp

2.0.x のグダグダな状態を数ヶ月経験した以上3.0には慎重にならざるを…と思ってましたがついカッとなって iPhone OS 3.0について語るスレ Part 14 等の事前情報を一切仕入れることなくうp。

(事前ダウンロード用リンク - iPhone1,2_3.0_7A341_Restore.ipsw)

以下初見での雑感。

  • とりあえず無事うp完了
  • コピペできるようになった
  • Eメール(i)到着時に着信音が鳴る!! さよなら MobileMe(のメール部分)!
  • アプリ起動中でもすぐにホーム画面に戻れるようになった。(間違って起動してしまった時に便利)
  • 1画面増えたのは地味に有り難い。(けど1画面ぽっちじゃあっという間に埋まるのでは…)
  • 2ch 情報では文字入力のレスポンスが2.0の再来かという報告がちらほら見られるが、自分はそのような兆候はない
  • MMS は快適そうだけど、@softbank.ne.jp のメアドが生で出て行くのがちょっとな…
  • パスワード入力ボックス出現時に自動的に英数モードにならなくなった?

コピペとメール着信音は素直に嬉しい。iPhone もやっとガラパゴスケータイ並に…。あとはサイレントモードにしていてもアラーム音が鳴る糞仕様をなんとかしていただければやっと成人ですね。

iPhone 3G S の予約、電話でできないかとヨドバシに聞いてみたがやはり身分証明を持って店頭に来いとのことだったのでそれは週末に…と思っていたが、なんだか少し満足してしまったので別に買い換えなくてもいいかという気も…。

CPU とメモリとカメラのために約5万か…。(コンパスは割とどうでもいい)

_ [iPhone] iPhone 3G S に機種変すると実質いくらかかるのか

iPhone 3G S 機種変にかかるコストは約5万と漠然とイメージしていたが、きちんと考えてみよう。

前提

  • 今使っている iPhone 3G 16GB から iPhone 3G S 16GB に機種変する
  • ヨドバシカメラで一括払いする
  • 以後2年間は解約しない
  • 契約当初からのブループラン SS プランバリューは変更しな…い…? (ここは迷うところ)

ブループラン SS プランバリューを継続した場合の試算

SS プランバリューを変えなかった場合、ホワイトプラン(i)への加入が必須な iPhone for everybody キャンペーンは適用できない。したがって…

  1. 16GB モデルの一括払いはおそらく 69,120 円(税込み)。ヨドバシ 12% ポイント還元を考慮すると実質 69,120×88% = 60,826 円相当(税込み)である。
  2. また、以後以後2年間月月割 1,920 円(税込み)を受けられるので、2年間で 46,080 円の割引となる。初期の一括払いと月月割の割引額を相殺すると、実質価格は 14,746 円(税込み)ということになる。(真っ当に分割払いすると 23,040 円なのだから、ヨドバシ様々だ)
  3. しかし、一方で旧 iPhone 3G の月月割 1,280 円(税込み)を今後受けられるはずだった12ヶ月分 = 15,360 円分を失う
  4. 機種変することにより1年間の保証期間が発生するため、旧機種で AppleCare Protection Plan for iPhone に入ったのと同等の効果があると都合良く考えれば、機種変には 7,800×88% = 6,864 円分の付加価値がある。

以上4点を合算すると、機種変にかかる真のコスト (機種変しなかった場合との差額) は 60,826 - 46,080 + 15,360 - 6,864 = 23,242 円、となる。

…あれ? 意外に安いな…。

どこか計算間違ってる…?

…問題は、月月割の金額がいくらなのかがはっきりわかっていないことだ。

そもそも、昨年の iPhone 3G 発表時の情報を振り返ってみると、特別割引は月々 1,920 円(税込み)とのことだったはずだ。今でもそのような情報が見かけられる。

しかし、現在 SBM のページに掲載されている月月割の金額は 1,280 円(税込み)。

また、自分が現在実際に引かれている月月割は 1,210 円 (税抜き。税込みにしても 1,270.5 円) なのである。

この差はいったい何なのか…?

また、らばQ:「iPhone 3G S」の価格や解約時の費用が気になってなかなか購入できない人のためのまとめによれば、俺が受けているはずの月月割は 1920 円でも 1,280 円でもなく 1,580 円なのだという。この数値はいったいどこから沸いてきたのか…?

さらに、ソフトバンクに直接聞いてみた。iPhone 3GからiPhone 3G Sへの機種変更価格 : Gizmodo Japan によれば、機種変の場合の月月割は 920 円なのだそうだ。

書いてあることがみんなバラバラで何が何だか分からない。

SBM ショップにもあまり情報が降りてきていないらしいので、根拠となる数値がはっきりするまで待ってもう一度計算し直さないとダメ、か。

…ていうか特別割引 1,920 円だったはずなのに実際は 1,270.5 円しか割り引かれてないってどういうこと? ワタシ去年 80,640×88% = 70,963 円出して iPhone 3G 買ったんですけど、その後月々 1,270.5 円しか割り引かれてないってことは、1年経過現在実質価格 55,717 円っことになりますョ? どうなってルんデスノ?

再考:iPhone 3G S に機種変すると実質いくらかかるのか」に続く。


2009/06/21 編集

_ [] 日本ブレイク工業倒産疑惑の件

日本ブレイク工業 社歌(萬Z(量産型))でかつて一世を風靡した日本ブレイク工業だが、倒産説が沸き上がっているらしい。

日本ブレイク工業が本当にブレイクしたかもという噂 from HiroIro

日本ブレイク工業が倒産とか噂になってるけど - AbyssLukeのガイドライン

NBK といえば家からチャリ2分なのでちょっと現地見に行ってきた。

…結果、郵便受けや玄関には普通に表札がついていて、外見では普通に入居している状態のように見えた。

倒産説の元は公式サイトがつながらないことから来ているのだと思うが、ただのサーバ障害なのか、Web サイトだけ閉じたのか、実は本当に倒産してるのかはわからない。

ブレイク祭り(萬Z(量産型))

こんなアルバムも出てたのか…

(2009/06/25追記)

あの「日本ブレイク工業」が社歌以上に破壊的な事態 - ITmedia News

あの「日本ブレイク工業」が本当に“解体”危機:ZAKZAK

日刊スレッドガイド : 「日本ブレイク工業」がガチでブレイク・・・社員の横領で事実上倒産

…とのこと。


2009/06/25 編集

_ [Web制作][] 詳解HTML & CSS & JavaScript辞典 第4版来た

詳解HTML & CSS & JavaScript辞典(大藤 幹/半場 方人)

数ヶ月前に見た時に第3版が品切れになってたからそろそろ第4版なのかなとは思っていたが、来た。

いや、これは「& JavaScript」が加わってる方か。第3版もいつの間にか再入荷してるし、HTML & CSS 辞典の後継ではないのかもしれない。

まあとにかくとりあえず買っとこうか。


2009/06/26 編集

_ [] サバイクラパオウマー

先月関内にオープンしたタイ料理屋、サバイクラパオが素敵だ。

そういえばこれまで関内近辺には最高のインド料理屋はあったがタイ料理屋がなかった。

これまで身近になかったのであまり意識することがなかったが、自分はタイカレーも大好きなのである。それが夜でも680円。ウマー

もちろんカレーだけでなく炒め物も大好きなのだ。空心菜ウマー

職場から激しく近い (徒歩1分) のもポイント高い。

俺的関内食べ処ベスト5

…に食い込みそうな勢い。しばらく通い詰めそうです。

関内ランチマップの管理人にも一度行っていただきたいところですね。


2009/06/27 編集

_ [プログラミング] C言語 (Win32) から Windows のバージョンを判別する (Windows 7 対応しかけ)

ちょっと必要があり C 言語から Windows の製品バージョン、エディションを取得する方法を調べた。

簡単かと思いきや、一発で取得できるような API はなく、バージョン毎にエディションを調べる方法が多様でなかなか面倒だった。

MSDN の Getting the System Version (Windows) に公式なサンプルが載っているのだが、Windows 2000 以降にしか対応していない。

C言語からWindowsのバージョンを判別する(Vistaまで) はそれをベースに改良されていていい線行っているのだが、

  • Windows 95 OSR や Windows 98 Second Edition を区別できない
  • 最近の Windows Server のエディションに対応していない

という課題があったため、2つを参考に作った改良版が下記のサンプルだ。

Windows 95、NT 3.51 から、最近リリースされた Windows Server 2008 Foundation まで対応している。(…つもりだが、検証環境がないので本当に対応できているかどうかはわからない) また、Windows 7 や 2008 R2 にもある程度対応しているが、特に 2008 R2 はエディション名がよくわからず対応しきれていない。

各種定数は Microsoft Windows 7 SDK: RC から拝借した。

Windows Server 2008 のエディションの多さは異常…。

// OS のバージョン判別 (Windows 7 あたりまで対応)
// Getting the System Version (Windows)
// http://msdn2.microsoft.com/en-us/library/ms724429.aspx
// C言語から Windows のバージョンを判別する (Vistaまで)
// http://yandyle.blog121.fc2.com/blog-entry-174.html
// を参考に改良
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <strsafe.h>
 
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "advapi32.lib")
 
// GetVersionEx() で使われる定数 (VC++2005 未定義)
#define VER_SUITE_WH_SERVER 0x00008000
 
// GetSystemMetrics() で使われる定数 (VC++2005 未定義)
#define SM_TABLETPC     86
#define SM_MEDIACENTER  87
#define SM_STARTER      88
#define SM_SERVERR2     89
 
// GetProductInfo() で使われる定数 (VC++2005 未定義)
#define PRODUCT_UNDEFINED                           0x00000000 // An unknown product
#define PRODUCT_ULTIMATE                            0x00000001 // Ultimate Edition
#define PRODUCT_HOME_BASIC                          0x00000002 // Home Basic Edition
#define PRODUCT_HOME_PREMIUM                        0x00000003 // Home Premium Edition
#define PRODUCT_ENTERPRISE                          0x00000004 // Enterprise Edition
#define PRODUCT_HOME_BASIC_N                        0x00000005 // Home Basic Edition
#define PRODUCT_BUSINESS                            0x00000006 // Business Edition
#define PRODUCT_STANDARD_SERVER                     0x00000007 // Server Standard Edition
#define PRODUCT_DATACENTER_SERVER                   0x00000008 // Server Datacenter Edition
#define PRODUCT_SMALLBUSINESS_SERVER                0x00000009 // Small Business Server
#define PRODUCT_ENTERPRISE_SERVER                   0x0000000A // Server Enterprise Edition
#define PRODUCT_STARTER                             0x0000000B // Starter Edition
#define PRODUCT_DATACENTER_SERVER_CORE              0x0000000C // Server Datacenter Edition (core installation)
#define PRODUCT_STANDARD_SERVER_CORE                0x0000000D // Server Standard Edition (core installation)
#define PRODUCT_ENTERPRISE_SERVER_CORE              0x0000000E // Server Enterprise Edition (core installation)
#define PRODUCT_ENTERPRISE_SERVER_IA64              0x0000000F // Server Enterprise Edition for Itanium-based Systems
#define PRODUCT_BUSINESS_N                          0x00000010 // Business Edition
#define PRODUCT_WEB_SERVER                          0x00000011 // Web Server Edition
#define PRODUCT_CLUSTER_SERVER                      0x00000012 // Cluster Server Edition
#define PRODUCT_HOME_SERVER                         0x00000013 // Home Server Edition
#define PRODUCT_STORAGE_EXPRESS_SERVER              0x00000014 // Storage Server Express Edition
#define PRODUCT_STORAGE_STANDARD_SERVER             0x00000015 // Storage Server Standard Edition
#define PRODUCT_STORAGE_WORKGROUP_SERVER            0x00000016 // Storage Server Workgroup Edition
#define PRODUCT_STORAGE_ENTERPRISE_SERVER           0x00000017 // Storage Server Enterprise Edition
#define PRODUCT_SERVER_FOR_SMALLBUSINESS            0x00000018 // Server for Small Business Edition
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM        0x00000019 // Small Business Server Premium Edition
#define PRODUCT_HOME_PREMIUM_N                      0x0000001A // Home Premium Edition
#define PRODUCT_ENTERPRISE_N                        0x0000001B // Enterprise Edition
#define PRODUCT_ULTIMATE_N                          0x0000001C // Ultimate Edition
#define PRODUCT_WEB_SERVER_CORE                     0x0000001D // Web Server Edition (core installation)
#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT    0x0000001E // Windows Essential Business Server Management Server
#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY      0x0000001F // Windows Essential Business Server Security Server
#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING     0x00000020 // Windows Essential Business Server Messaging Server
#define PRODUCT_SMALLBUSINESS_SERVER_PRIME          0x00000021 // Server Foundation
#define PRODUCT_HOME_PREMIUM_SERVER                 0x00000022 // Home Premium Server Edition?
#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V          0x00000023 // Server 2008 without Hyper-V for Windows Essential Server Solutions
#define PRODUCT_STANDARD_SERVER_V                   0x00000024 // Server Standard Edition without Hyper-V
#define PRODUCT_DATACENTER_SERVER_V                 0x00000025 // Server Datacenter Edition without Hyper-V
#define PRODUCT_ENTERPRISE_SERVER_V                 0x00000026 // Server Enterprise Edition without Hyper-V
#define PRODUCT_DATACENTER_SERVER_CORE_V            0x00000027 // Server Datacenter Edition without Hyper-V (core installation)
#define PRODUCT_STANDARD_SERVER_CORE_V              0x00000028 // Server Standard Edition without Hyper-V (core installation)
#define PRODUCT_ENTERPRISE_SERVER_CORE_V            0x00000029 // Server Enterprise Edition without Hyper-V (core installation)
#define PRODUCT_HYPERV                              0x0000002A // Microsoft Hyper-V Server
#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE         0x0000002B // Storage Server Express Edition (core installation)
#define PRODUCT_STORAGE_STANDARD_SERVER_CORE        0x0000002C // Storage Server Standard Edition (core installation)
#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE       0x0000002D // Storage Server Workgroup Edition (core installation)
#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE      0x0000002E // Storage Server Enterprise Edition (core installation)
#define PRODUCT_STARTER_N                           0x0000002F // Starter Edition
#define PRODUCT_PROFESSIONAL                        0x00000030 // Professional Edition
#define PRODUCT_PROFESSIONAL_N                      0x00000031 // Professional Edition
#define PRODUCT_SB_SOLUTION_SERVER                  0x00000032
#define PRODUCT_SERVER_FOR_SB_SOLUTIONS             0x00000033
#define PRODUCT_STANDARD_SERVER_SOLUTIONS           0x00000034
#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE      0x00000035 // (core installation)
#define PRODUCT_SB_SOLUTION_SERVER_EM               0x00000036
#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM          0x00000037
#define PRODUCT_SOLUTION_EMBEDDEDSERVER             0x00000038
#define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE        0x00000039 // (core installation)
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE   0x0000003F // (core installation)
#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT       0x0000003B
#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL       0x0000003C
#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC    0x0000003D
#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC    0x0000003E
#define PRODUCT_CLUSTER_SERVER_V                    0x00000040 // Cluster Server Edition without Hyper-V
#define PRODUCT_EMBEDDED                            0x00000041
#define PRODUCT_UNLICENSED                          0xABCDABCD
 
typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
 
BOOL GetOSDisplayString(LPTSTR pszOS, size_t bufsize)
{
  // GetVersionEx による基礎判別
  OSVERSIONINFOEX osvi;
  ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); // 必要あるのか?
  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
  BOOL bOsVersionInfoEx;
  if ((bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*)&osvi)) == FALSE) {
    // Windows NT 4.0 SP5 以前と Windows 9x
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    if (!GetVersionEx((OSVERSIONINFO *)&osvi)) return FALSE;
  }
 
  // Windows XP 以降では GetNativeSystemInfo を、それ以外では GetSystemInfo を使う
  SYSTEM_INFO si;
  ZeroMemory(&si, sizeof(SYSTEM_INFO)); // 必要あるのか?
  PGNSI pGNSI = (PGNSI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");
  if (pGNSI) pGNSI(&si);
  else GetSystemInfo(&si);
 
  // ここからバージョン別
  StringCchCopy(pszOS, bufsize, TEXT("")); // 念のため
  if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion >= 3) { // NT 系
 
    // Vista / 2008 / 7 / 2008 R2
    if (osvi.dwMajorVersion == 6) {
      TCHAR MajVerStr[9] = TEXT(""); // " 2008" か " 2008 R2" を入れる
      if (osvi.wProductType == VER_NT_WORKSTATION) { // Vista / 7
        if (osvi.dwMinorVersion == 0)
          StringCchCopy(pszOS, bufsize, TEXT("Windows Vista "));
        else if (osvi.dwMinorVersion == 1)
          StringCchCopy(pszOS, bufsize, TEXT("Windows 7 "));
        else
          StringCchCopy(pszOS, bufsize, TEXT("Windows NT 6.x(unknown) "));
      }
      else { // Server 2008 / R2
        StringCchCopy(pszOS, bufsize, TEXT("Windows Server"));
        if (osvi.dwMinorVersion == 0)
          StringCchCopy(MajVerStr, bufsize, TEXT(" 2008"));
        else if (osvi.dwMinorVersion == 1)
          StringCchCopy(MajVerStr, bufsize, TEXT(" 2008 R2"));
        else
          StringCchCopy(MajVerStr, bufsize, TEXT(" 6.x(unknown)"));
        StringCchCat(pszOS, bufsize, MajVerStr);
        StringCchCat(pszOS, bufsize, TEXT(" "));
      }
      // Vista 以降では GetProductInfo が使える
      PGPI pGPI = (PGPI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo");
      DWORD dwType;
      pGPI(6, 0, 0, 0, &dwType);
      switch (dwType) {
        // Windows Vista / 7
        case PRODUCT_ULTIMATE:
        case PRODUCT_ULTIMATE_N:
          StringCchCat(pszOS, bufsize, TEXT("Ultimate Edition"));
          break;
        case PRODUCT_HOME_BASIC:
        case PRODUCT_HOME_BASIC_N:
          StringCchCat(pszOS, bufsize, TEXT("Home Basic Edition"));
          break;
        case PRODUCT_HOME_PREMIUM:
        case PRODUCT_HOME_PREMIUM_N:
          StringCchCat(pszOS, bufsize, TEXT("Home Premium Edition"));
          break;
        case PRODUCT_ENTERPRISE:
        case PRODUCT_ENTERPRISE_N:
          StringCchCat(pszOS, bufsize, TEXT("Enterprise Edition"));
          break;
        case PRODUCT_BUSINESS:
        case PRODUCT_BUSINESS_N:
          StringCchCat(pszOS, bufsize, TEXT("Business Edition"));
          break;
        case PRODUCT_STARTER:
        case PRODUCT_STARTER_N:
          StringCchCat(pszOS, bufsize, TEXT("Starter Edition"));
          break;
        case PRODUCT_PROFESSIONAL:
        case PRODUCT_PROFESSIONAL_N:
          StringCchCat(pszOS, bufsize, TEXT("Professional Edition"));
          break;
        // Windows Server 2008 / R2
        case PRODUCT_STANDARD_SERVER:
        case PRODUCT_STANDARD_SERVER_CORE:
        case PRODUCT_STANDARD_SERVER_V:
        case PRODUCT_STANDARD_SERVER_CORE_V:
          StringCchCat(pszOS, bufsize, TEXT("Standard Edition"));
          break;
        case PRODUCT_DATACENTER_SERVER:
        case PRODUCT_DATACENTER_SERVER_CORE:
        case PRODUCT_DATACENTER_SERVER_V:
        case PRODUCT_DATACENTER_SERVER_CORE_V:
        StringCchCat(pszOS, bufsize, TEXT("Datacenter Edition"));
          break;
        case PRODUCT_ENTERPRISE_SERVER:
        case PRODUCT_ENTERPRISE_SERVER_CORE:
        case PRODUCT_ENTERPRISE_SERVER_V:
        case PRODUCT_ENTERPRISE_SERVER_CORE_V:
        case PRODUCT_ENTERPRISE_SERVER_IA64:
          StringCchCat(pszOS, bufsize, TEXT("Enterprise Edition"));
          if (dwType == PRODUCT_ENTERPRISE_SERVER_IA64)
            StringCchCat(pszOS, bufsize, TEXT(" for Itanium-based Systems"));
          break;
        case PRODUCT_WEB_SERVER:
        case PRODUCT_WEB_SERVER_CORE:
          StringCchCopy(pszOS, bufsize, TEXT("Windows Web Server"));
          StringCchCat(pszOS, bufsize, MajVerStr);
          break;
        case PRODUCT_CLUSTER_SERVER: // Cluster Server Edition?
          StringCchCopy(pszOS, bufsize, TEXT("Windows HPC Server"));
          StringCchCat(pszOS, bufsize, MajVerStr);
          break;
        case PRODUCT_HOME_SERVER:
        case PRODUCT_HOME_PREMIUM_SERVER: // Premium Edition?
          StringCchCopy(pszOS, bufsize, TEXT("Windows Home Server"));
          StringCchCat(pszOS, bufsize, MajVerStr);
          if (dwType == PRODUCT_HOME_PREMIUM_SERVER)
            StringCchCat(pszOS, bufsize, TEXT(" Premium Edition"));
          break;
        case PRODUCT_SMALLBUSINESS_SERVER:
        case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
          StringCchCopy(pszOS, bufsize, TEXT("Windows Small Business Server"));
          StringCchCat(pszOS, bufsize, MajVerStr);
          if (dwType == PRODUCT_SMALLBUSINESS_SERVER_PREMIUM)
            StringCchCat(pszOS, bufsize, TEXT(" Premium Edition"));
          break;
        case PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT:
        case PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY:
        case PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING:
          StringCchCopy(pszOS, bufsize, TEXT("Windows Essential Business Server"));
          StringCchCat(pszOS, bufsize, MajVerStr);
          StringCchCat(pszOS, bufsize, TEXT(" "));
          switch (dwType) {
            case PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT:
              StringCchCat(pszOS, bufsize, TEXT("Management Server"));
            case PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY:
              StringCchCat(pszOS, bufsize, TEXT("Security Server"));
            case PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING:
              StringCchCat(pszOS, bufsize, TEXT("Messaging Server"));
          }
          break;
        case PRODUCT_SMALLBUSINESS_SERVER_PRIME:
          StringCchCat(pszOS, bufsize, TEXT("Foundation"));
          break;
        case PRODUCT_SERVER_FOR_SMALLBUSINESS:
          StringCchCat(pszOS, bufsize, TEXT("for Small Business Edition"));
          break;
        case PRODUCT_SERVER_FOR_SMALLBUSINESS_V:
          StringCchCat(pszOS, bufsize, TEXT("for Windows Essential Server Solutions"));
          break;
        case PRODUCT_HYPERV:
          StringCchCopy(pszOS, bufsize, TEXT("Hyper-V Server"));
          StringCchCat(pszOS, bufsize, MajVerStr);
          break;
        case PRODUCT_STORAGE_EXPRESS_SERVER:
        case PRODUCT_STORAGE_EXPRESS_SERVER_CORE:
        case PRODUCT_STORAGE_STANDARD_SERVER:
        case PRODUCT_STORAGE_STANDARD_SERVER_CORE:
        case PRODUCT_STORAGE_WORKGROUP_SERVER:
        case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE:
        case PRODUCT_STORAGE_ENTERPRISE_SERVER:
        case PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE:
          StringCchCopy(pszOS, bufsize, TEXT("Windows Storage Server"));
          StringCchCat(pszOS, bufsize, MajVerStr);
          StringCchCat(pszOS, bufsize, TEXT(" "));
          switch (dwType) {
            case PRODUCT_STORAGE_EXPRESS_SERVER:
            case PRODUCT_STORAGE_EXPRESS_SERVER_CORE:
              StringCchCopy(pszOS, bufsize, TEXT("Express"));
              break;
            case PRODUCT_STORAGE_STANDARD_SERVER:
            case PRODUCT_STORAGE_STANDARD_SERVER_CORE:
              StringCchCopy(pszOS, bufsize, TEXT("Standard"));
              break;
            case PRODUCT_STORAGE_WORKGROUP_SERVER:
            case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE:
              StringCchCopy(pszOS, bufsize, TEXT("Workgroup"));
              break;
            case PRODUCT_STORAGE_ENTERPRISE_SERVER:
            case PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE:
              StringCchCopy(pszOS, bufsize, TEXT("Enterprise"));
              break;
          }
          StringCchCat(pszOS, bufsize, TEXT(" Edition"));
          break;
        default:
          StringCchCat(pszOS, bufsize, TEXT("Unknown Edition"));
      }
      // without Hyper-V
      switch (dwType) {
        case PRODUCT_STANDARD_SERVER_V:
        case PRODUCT_DATACENTER_SERVER_V:
        case PRODUCT_ENTERPRISE_SERVER_V:
        case PRODUCT_STANDARD_SERVER_CORE_V:
        case PRODUCT_DATACENTER_SERVER_CORE_V:
        case PRODUCT_ENTERPRISE_SERVER_CORE_V:
        case PRODUCT_SERVER_FOR_SMALLBUSINESS_V:
          StringCchCat(pszOS, bufsize, TEXT(" without Hyper-V"));
      }
      // core installation
      switch (dwType) {
        case PRODUCT_STANDARD_SERVER_CORE:
        case PRODUCT_DATACENTER_SERVER_CORE:
        case PRODUCT_ENTERPRISE_SERVER_CORE:
        case PRODUCT_WEB_SERVER_CORE:
        case PRODUCT_STANDARD_SERVER_CORE_V:
        case PRODUCT_DATACENTER_SERVER_CORE_V:
        case PRODUCT_ENTERPRISE_SERVER_CORE_V:
        case PRODUCT_STORAGE_EXPRESS_SERVER_CORE:
        case PRODUCT_STORAGE_STANDARD_SERVER_CORE:
        case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE:
        case PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE:
          StringCchCat(pszOS, bufsize, TEXT(" (core installation)"));
      }
      // x86 or x64
      if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
        StringCchCat(pszOS, bufsize, TEXT(", 64-bit"));
      else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)
        StringCchCat(pszOS, bufsize, TEXT(", 32-bit"));
    }
 
    // Windows Server 2003 / XP x64 Edition
    if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) {
      if (osvi.wProductType == VER_NT_WORKSTATION) { // Windows XP Professional x64 Edition
        StringCchCopy(pszOS, bufsize, TEXT("Windows XP Professional"));
        if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) // 必ず該当するはずだが
          StringCchCat(pszOS, bufsize, TEXT(" x64 Edition"));
      }
      else { // Windows Server 2003 ファミリー
        // Compute Cluster Server には R2 も x64 もつかない
        if (osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER)
          StringCchCopy(pszOS, bufsize, TEXT("Windows Compute Cluster Server 2003"));
        // Windows Home Server にも R2 はつかない (x64 は無い?)
        else if (osvi.wSuiteMask & VER_SUITE_WH_SERVER)
          StringCchCopy(pszOS, bufsize, TEXT("Windows Home Server"));
        else {
          // Small Business か Storage か無印か
          if (osvi.wSuiteMask & (VER_SUITE_SMALLBUSINESS | VER_SUITE_SMALLBUSINESS_RESTRICTED))
            StringCchCopy(pszOS, bufsize, TEXT("Windows Small Business Server 2003"));
          else if (osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER)
            StringCchCopy(pszOS, bufsize, TEXT("Windows Storage Server 2003"));
          else StringCchCopy(pszOS, bufsize, TEXT("Windows Server 2003"));
          // R2 か
          if (GetSystemMetrics(SM_SERVERR2))
            StringCchCat(pszOS, bufsize, TEXT(" R2"));
          // Edition
          StringCchCat(pszOS, bufsize, TEXT(", "));
          if (osvi.wSuiteMask & VER_SUITE_DATACENTER)
            StringCchCat(pszOS, bufsize, TEXT("Datacenter"));
          else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
            StringCchCat(pszOS, bufsize, TEXT("Enterprise"));
          else if (osvi.wSuiteMask & VER_SUITE_BLADE)
            StringCchCat(pszOS, bufsize, TEXT("Web"));
          else StringCchCat(pszOS, bufsize, TEXT("Standard"));
          // x64 か
          if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
            StringCchCat(pszOS, bufsize, TEXT(" x64"));
          StringCchCat(pszOS, bufsize, TEXT(" Edition"));
          // IA64 か
          if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
            StringCchCat(pszOS, bufsize, TEXT(" for Itanium-based Systems"));
        }
      }
    }
 
    // XP
    if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1) {
      StringCchCopy(pszOS, bufsize, TEXT("Windows XP "));
      if (GetSystemMetrics(SM_TABLETPC))
        StringCchCat(pszOS, bufsize, TEXT("Tablet PC Edition"));
      else if (GetSystemMetrics(SM_MEDIACENTER))
        StringCchCat(pszOS, bufsize, TEXT("Media Center Edition"));
      else if (GetSystemMetrics(SM_STARTER))
        StringCchCat(pszOS, bufsize, TEXT("Starter Edition"));
      else if (osvi.wSuiteMask & VER_SUITE_PERSONAL)
        StringCchCat(pszOS, bufsize, TEXT("Home Edition"));
      else if (osvi.wSuiteMask & (VER_SUITE_EMBEDDEDNT | VER_SUITE_EMBEDDED_RESTRICTED))
        StringCchCat(pszOS, bufsize, TEXT("Embedded"));
      else StringCchCat(pszOS, bufsize, TEXT("Professional"));
    }
 
    // 2000
    if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) {
      StringCchCopy(pszOS, bufsize, TEXT("Windows 2000 "));
      if (osvi.wProductType == VER_NT_WORKSTATION)
        StringCchCat(pszOS, bufsize, TEXT("Professional"));
      else {
        if (osvi.wSuiteMask & VER_SUITE_DATACENTER)
          StringCchCat(pszOS, bufsize, TEXT("Datacenter "));
        else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
          StringCchCat(pszOS, bufsize, TEXT("Advanced "));
        StringCchCat(pszOS, bufsize, TEXT("Server"));
      }
    }
 
    // NT 3 / 4
    if (osvi.dwMajorVersion == 4 || osvi.dwMajorVersion == 3) {
      StringCchCopy(pszOS, bufsize, TEXT("Windows NT "));
      if (bOsVersionInfoEx) { // NT 4.0 SP6 だけのはず
        if (osvi.wProductType == VER_NT_WORKSTATION) {
          if (osvi.dwMajorVersion == 4)
            StringCchCat(pszOS, bufsize, TEXT("4.0"));
          else StringCchCat(pszOS, bufsize, TEXT("3.51")); // ないはずだが
          StringCchCat(pszOS, bufsize, TEXT(" Workstation"));
        }
        else {
          StringCchCat(pszOS, bufsize, TEXT("Server"));
          if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
            StringCchCat(pszOS, bufsize, TEXT(", Enterprise Edition"));
          else if (osvi.wSuiteMask & VER_SUITE_TERMINAL)
            StringCchCat(pszOS, bufsize, TEXT(", Terminal Server Edition"));
          else if (osvi.wSuiteMask & (VER_SUITE_EMBEDDEDNT | VER_SUITE_EMBEDDED_RESTRICTED))
            StringCchCat(pszOS, bufsize, TEXT(", Embedded Edition"));
          if (osvi.dwMajorVersion == 4)
            StringCchCat(pszOS, bufsize, TEXT(" 4.0"));
          else StringCchCat(pszOS, bufsize, TEXT(" 3.51")); // ないはずだが
        }
      }
      else { // NT 4.0 SP5 以前はレジストリから取得
        HKEY hKey;
        TCHAR szProductType[9] = TEXT("");
        DWORD dwBufLen = sizeof(TCHAR) * sizeof(szProductType);
        LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"), 0, KEY_QUERY_VALUE, &hKey);
        if (lRet == ERROR_SUCCESS) {
          lRet = RegQueryValueEx(hKey, TEXT("ProductType"), NULL, NULL, (LPBYTE)szProductType, &dwBufLen);
          RegCloseKey(hKey);
        }
        if (lstrcmpi(szProductType, TEXT("LANMANNT")) == 0)
          StringCchCat(pszOS, bufsize, TEXT(" Server"));
        if (lstrcmpi(szProductType, TEXT("SERVERNT")) == 0)
          StringCchCat(pszOS, bufsize, TEXT(" Server, Enterprise Edition"));
        if (osvi.dwMajorVersion == 4)
          StringCchCat(pszOS, bufsize, TEXT("4.0"));
        else StringCchCat(pszOS, bufsize, TEXT("3.51"));
        if (lstrcmpi(szProductType, TEXT("WINNT")) == 0)
          StringCchCat(pszOS, bufsize, TEXT(" Workstation"));
      }
    }
 
    // Service Pack
    if (_tcslen(osvi.szCSDVersion) > 0) {
      StringCchCat(pszOS, bufsize, TEXT(" ") );
      StringCchCat(pszOS, bufsize, osvi.szCSDVersion);
    }
 
    // build number
    TCHAR buf[80];
    StringCchPrintf(buf, 80, TEXT(" (build %d)"), osvi.dwBuildNumber);
    StringCchCat(pszOS, bufsize, buf);
    return TRUE; 
 
  }
 
  // 9x
  else if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
    switch (osvi.dwMinorVersion) {
      case 0:
        StringCchCopy(pszOS, bufsize, TEXT("Windows 95"));
        if (_tcschr(osvi.szCSDVersion, 'A'))
          StringCchCat(pszOS, bufsize, TEXT(" OSR1"));
        else if (_tcschr(osvi.szCSDVersion, 'B'))
          StringCchCat(pszOS, bufsize, TEXT(" OSR2"));
        else if (_tcschr(osvi.szCSDVersion, 'C'))
          StringCchCat(pszOS, bufsize, TEXT(" OSR2.5"));
        else StringCchCat(pszOS, bufsize, osvi.szCSDVersion); // ないはずだが
        break;
      case 10:
        StringCchCopy(pszOS, bufsize, TEXT("Windows 98"));
        if (_tcschr(osvi.szCSDVersion, 'A'))
          StringCchCat(pszOS, bufsize, TEXT(" Second Edition"));
        else StringCchCat(pszOS, bufsize, osvi.szCSDVersion); // ないはずだが
        break;
      case 90:
        StringCchCopy(pszOS, bufsize, TEXT("Windows Me"));
        break;
      default:
        StringCchCopy(pszOS, bufsize, TEXT("Windows 9x(unknown)")); // ないはずだが
    }
    return TRUE;
  }
 
  // NT でも 9x でもない (Win32s?)
  else {
    StringCchCopy(pszOS, bufsize, TEXT("Unknown Windows"));
    return FALSE;
  }
}
 
void _tmain(int argc, _TCHAR* argv[])
{
  TCHAR pszOS[256];
  if (GetOSDisplayString(pszOS, sizeof(pszOS)))
    MessageBox(NULL, pszOS, TEXT("Get OS Display String"), MB_OK);
  else
    MessageBox(NULL, TEXT("OS のバージョンを取得できませんでした"), TEXT("Get OS Display String"), MB_OK | MB_ICONERROR);
}

以上だ。

Visual C++ 2005 Standard、Visual C++ 2008 Express Editon でビルドできることを確認した。

BCC には対応していないが、もし BCC で使いたければ、下記の定数定義

#define VER_SUITE_PERSONAL              0x00000200
#define VER_SUITE_BLADE                 0x00000400
#define VER_SUITE_EMBEDDED_RESTRICTED   0x00000800
#define VER_SUITE_SECURITY_APPLIANCE    0x00001000
#define VER_SUITE_STORAGE_SERVER        0x00002000
#define VER_SUITE_COMPUTE_SERVER        0x00004000
#define PROCESSOR_ARCHITECTURE_AMD64    9

を追加し、#include <strsafe.h> を削除し、StringCchCopy を _tcscpy に、StringCchCat を _tcscat に、StringCchPrintf を _stprintf にそれぞれ置き換えればおそらくコンパイルできるだろう。

本日のツッコミ(全7件) [ツッコミを入れる]

Before...

_ p [はい、どうぞご自由にどうぞ。 ちなみに Vista 以降だったら HKLM\SOFTWARE\Microsoft\W..]

_ ipa [228,230行にbreakがないですよ]

_ らま [GetProductInfoの第2引数はosvi.dwMinorVersionですね。 でないと、Windows 7..]


2009/06/28 編集

_ [iPhone] 再考:iPhone 3G S に機種変すると実質いくらかかるのか

先日iPhone 3G S に機種変すると実質いくらかかるのかを検討したが、いまいち数字がはっきりしなかった。

機種変の場合は機種代金や月月割がいくらなのか不明だったためである。

というわけで、ヨドバシで店員に聞いてみた。

結果得られた情報は、ケータイ Watch のソフトバンク、「iPhone 3G S」の価格を案内とほぼ同等だったのだが、有益な新情報として、

  • 機種変の場合は分割金300円増」(2年で7,200円増)
  • 「前回スーパーボーナスで購入している場合は1年未満だろうが2年経過していようが新機種の価格・月月割は変動しない」
  • 「一括払いの場合は単純に分割払い金×24で、月月割は1,920円つく」(いつも通り)

ということが判った。

つまり、一括払いで機種変する場合

  • 16GB モデル: 月々 (2,400 + 300) × 24 = 64,800円 (実質18,720円)
  • 32GB モデル: 月々 (2,880 + 300) × 24 = 76,320円 (実質30,240円)

になるということだ。

iPhone for everybody キャンペーン非適用の場合

…ただし、これは iPhone for everybody キャンペーン適用が前提。

iPhone for everybody キャンペーン非適用時はどうなるのか? と聞いたところ、スーパーボーナスは2年契約が基本となっているので非適用のことは想定していないと言う。

ブループランだから2年契約でもキャンペーン適用できないと思うんだけど? と話したところ、一度奥に引っ込んでから次の回答が来た。

「正確な数字は言えないが、16GB モデルが約8万円、32GB モデルが約9.2万円の一括払いのみとなる。」

月月割はつかない (!?!?)

月月割がつかないということは、46,080円の割引額が消滅し、実質約6万円も割高になるということになる。ありえない。そんなバカな…何かの間違いではないのか…?

端末代金だけで6万割高になるうえ、パケット定額フル上限1,575円割引もないことを考えると、もうブループランに固執する意味は全くないなと、禿の圧力に屈するようで悔しいが、ここはやはりホワイトプランに乗り換えるしかないなと…。

iPhone for everybody キャンペーン適用時の純増コスト再計算

というわけで、ホワイトプランに乗り換える前提で試算してみよう。

基本的な考え方は前回のものをベースにしつつ、改めて数字を出していくと、

  1. 16GB 端末代金: 64,800 × 88% = 57,024円
    32GB 端末代金: 76,320 × 88% = 67,162円
  2. 月月割: 1,920 × 24 = 46,080円
  3. 旧月月割損失分: 1,280 × 12 = 15,360円
  4. AppleCare Protection Plan for iPhone 相当分: 7,800 × 88% = 6,864円
  5. ブループラン自分割引50契約解除料: 9,975円

(1) - (2) + (3) - (4) + (5) を考えると、

  • 16GB モデルの場合: 29,415円
  • 32GB モデルの場合: 39,553円

が実質的にかかるコストということになる。

1年後にまた機種変する場合

…が。ここまでは 3G S を以後2年間使い続ける前提の話だ。

だが、本当に 3G S を2年間使い続けるだろうか? また来年同じように次世代機に機種変したいと考えるのではないだろうか?

…もしそうなった場合、月月割の半額 (23,040円) を失うことになるので、実質的なコストは

  • 16GB モデルの場合: 52,455円
  • 32GB モデルの場合: 62,573円

ということになる。

…高ぇ…! 自分は携帯にいくらかける気なのだ…。

3年前に W-ZERO3 [es] を買ってからというもの毎年機種変、携帯に金を注ぎ込みすぎである。

5万かけて機種変するか、あと1年旧機種で我慢するか、ここは悩みどころだ。

iPhone 3GS への機種変更を悩んでいるなら、時間コストも考えた方がよい? | Lifehacking.jp

ま、時は金なりと考えれば倍速は十分コストに見合う効果なんですが…

再々考:iPhone 3G S に機種変すると実質いくらかかるのか」に続く。


2009/06/29 編集

_ [音楽][物欲] Bluetooth レシーバーが欲しい

iPhone OS が3.0で A2DP 対応になってからというもの、Bluetooth レシーバーが気になってたまらない。

というわけで Bluetooh レシーバーを物色している。

Bluetooth 対応ヘッドホンには満足できるものが無さそうなので、手持ちの ER-4P を接続できる単体レシーバーがいい。

そこそこ小さくて、A2DP と HSP に対応していて任意のヘッドホンを接続できそうなもの、となると、この辺が候補になりそうだ。

SONY か BUFFALO しかないって…選択肢少ないな。

デザイン・重量面では HBH-DS205 がベストなのだが、淀の店頭情報によれば1つしかペアリングできないとのこと。

PC と iPhone 両方でペアリングしたい身としては手を出しにくい。

むぅもぉ.jp によれば、DRC-BT15 はマルチペアリングできるらしい。こいつが本命だろうか…?

Bluetooth レシーバー SONY DRC-BT15 買った」に続く。