2020年4月20日 (月)

google script 入門 (google drive内のファイル&フォルダ一覧)

今日は、google drive内の「ファイルとフォルダの一覧表」を作成するスクリプトについて書きます。
記載したスクリプトは2つです。
1つ目は、指定したフォルダより「下層に存在するファイルとフォルダ」をリストアップするものです。
2つ目は、「自分のgoogle ドライブ内の全てのファイルとフォルダ」  をリストアップするものです。

 

google スクリプトを初めて動かす方は初めに以下も読んでみて下さい。
 ・google script 入門 (スプレットシートに "Hello World" を表示するまで)

 

■結果
 ここに記載したスクリプトで得られる一覧表の例を下図に示します。20200420b

 

■スクリプト1
 「指定したフォルダ」より「下層に存在するファイルとフォルダ」をリストアップするスクリプトを示します。

 「google drive のフォルダ」を示すURL(下図の"???????????"の部分) は、自分のものに変更してください。

 

function myFunction() {  
// googleドライブのフォルダを示す URL。ブラウザのURLのコピペ
const url = 'https://drive.google.com/drive/u/0/folders/1???????????'
let paths = url.split('/')
let folderId = paths[paths.length - 1]
let folder = DriveApp.getFolderById(folderId)
let aFolder = []
let aFile = []
scan(folder, aFolder,aFile)
printSheet(aFolder, 1)
printSheet(aFile, 5)
}
function scan(folder,aFolder,aFile){
aFolder.push(folder)
let p = folder.getFiles()
while(p.hasNext()) {
aFile.push(p.next());
}
p = folder.getFolders()
while(p.hasNext()) {
scan(p.next(), aFolder, aFile)
}
}
/*
* google スプレッドシートにファイル一覧を表示
*/
function printSheet(files, column){
const sheet = SpreadsheetApp.getActiveSheet()
let print = (p, row, column) => {
let x1 = p.getSharingAccess() // getSharingPermission(),getAccess(email)
let x2 = p.getUrl()
let buff = [[x1, x2, p]]
sheet.getRange(row, column, 1 , 3 ).setValues(buff)
// sheet.getRange(row, column, buff.length, buff[0].length).setValues(buff)
}
let i=1
files.forEach((e) => print(e, i++, column))
}

■スクリプト2
 次に自分のgoogle drive 内の「全ファイルとフォルダの一覧」を作成するスクリプトを記載します。

 ドライブ内のファイル数にもよりますが、実行には結構長い時間がかかります

 

function myFunction() {  
const sheet = SpreadsheetApp.getActiveSheet()

const printSheet = (v, row, column) => {
let x1 = v.getSharingAccess() // getSharingPermission(),getAccess(email)
let x2 = v.getUrl()
let buff = [[x1, x2, v]]
sheet.getRange(row, column, 1 , 3 ).setValues(buff)
// sheet.getRange(row, column, buff.length, buff[0].length).setValues(buff)
}

let p = DriveApp.getFolders()
var i = 1;
while (p.hasNext()) {
printSheet(p.next(), i++, 1)
}

p = DriveApp.getFiles()
i = 1;
while (p.hasNext()) {
printSheet(p.next(), i++, 5)
}
}

 

google script 入門 (google drive内ファイルのアクセス権調査)

google ドライブ内指定フォルダの「ファイル一覧を取得する」と共に
各ファイルの「アクセス可否」を調査するスクリプトを作りました。

単機能でシンプルなスクリプトです。

google スクリプトを初めて動かす方は初めに以下も読んでみて下さい。
 ・google script 入門 (スプレットシートに "Hello World" を表示するまで)

 


■実行結果
 実行結果は下図のようになります。
 一部加工してあります。(背景色付加及び文字を隠しています)

20200419h

 

 

■スクリプト
   スクリプトコードは下図の通りです。
 「?????????」と書かれている2か所は自分の環境に合わせて変更してください


  20200419j

 

function myFunction() {
// アクセスできるか確かめる gmailアドレス
const email= "??????????????????@gmail.com"
// googleドライブ内の調査対象フォルダのURL
const url = 'https://drive.google.com/drive/u/0/folders/1??????????????????'
let paths = url.split('/')
let folderId = paths[paths.length - 1]
let folder = DriveApp.getFolderById(folderId)
let files = folder.getFiles()
let list = []
while(files.hasNext()) {
var buff = files.next()
list.push([buff.getAccess(email), buff.getName(), buff.getUrl()])
// list.push([buff.getSharingAccess(), buff.getName(), buff.getUrl()])
// list.push([buff.getSharingPermission(), buff.getName(), buff.getUrl()])
};
//list = list.reverse() // 必要に応じて、逆順に変換
let sheetName = 'シート1'
let rowIndex = 1
let colIndex = 1
let ss = SpreadsheetApp.getActive()
let sheet = ss.getSheetByName(sheetName)
let range = sheet.getRange(rowIndex, colIndex, list.length, list[0].length)
range.setValues(list)
}

 

 

google script 入門 (スプレットシートに "Hello World" を表示するまで)

 

google スクリプトを初めて書いてみました。

"Hello"を表示させるまで、いくつものエラーや警告が出たので、
解決策をメモしておきます。

 

■スプレットシート作成
 Chromeブラウザで google drive を開き、googleスプレットシートを作成。
 20200419e

■エラー「現在、ファイルを開くことが出来ません
 スクリプトエディタを起動しようとしたとたんにエラーが発生。
 原因は、Chromeブラウザのデフォルトでないgmailでログインしたgoogle driveで
 google スプレットシートを作った為でした。
 デフォルトのgmailアドレスでgoogle driveにログインしたら解決しました。


 20200419c



■スクリプト入力
 スクリプトエディタを開き、以下のスクリプトを2行記入。

 

function myFunction() {
  Browser.msgBox("Hello")
SpreadsheetApp.getActiveSheet().getRange(1, 1).setValue("Hello")
// Logger.log("Hello")
}

 

 そして、スクリプトを保存。

20200419f


■スクリプト実行
 実行ボタン(スクリプトを入力したプロジェクトの三角形のボタン)を押すと、以下の警告文が表示される。
  ・Authorization required
  ・アカウントの選択
  ・このアプリは確認されていません
  ・**がGoogleアカウントへのアクセスをリクエストしています

 下図のようにすれば、最終的に スプレットシートに "hello" ダイアログが表示されました。

20200419g_20200420184001

 

20200419d

 

■以下のスクリプトも見てみて下さい
 ・google script 入門 (google drive内フォルダのファイル一覧及びアクセス可否調査)

2020年4月19日 (日)

Google ドライブ の ファイルURL と 共有(公開)について

新型コロナで "stay home" 状態なので、久しぶりに記事を書きます。

 

google ドライブ内のファイル共有(ファイル公開)に関する記事です。

 

■結論 (私が今回知ったこと)


 ・google ドライブ内のファイル(フォルダ)には 「ID」 というものが付いている。

 ・「ID」 はファイルを開いた時に、ブラウザのURLを見れば分かる。(下記赤色部分)
   例:https://docs.google.com/spreadsheets/d/1?????????????????????/edit?usp=sharing

 ・googleドライブ内でファイルを「移動」しても「ファイル名を変えて」も、「ID」は変わらない。

 ・ファイルを共有する前と後で、「ID」は変わらない

 ・ラインなどでファイル共有URLを送りたい場合は、単にブラウザでファイルを開いた時に表示されるURLを送れば良い。
   例:https://docs.google.com/spreadsheets/d/1?????????????????????/

 ・公開されていないことを確認するには、ブラウザをシークレットモード(プライベートモード)で開き、
  ファイルのURLを入力しアクセス出来ないことを確認すれば良い。

 

20200420a

■ファイル共有方法

googleドライブ内のファイルを他人と共有する場合、以下の2パタンがあります。

 A. 特定の人のみアクセス可能

 B. 世界中の人に公開

 

20200419a

 

■ファイルが共有されていない事の確認方法
 ブラウザをシークレットモード(プライベートモード)で開き、ファイルのURLを入力すれば、アクセス有無を確認出来ます。

20200419b

keyword:google drive

2013年2月 2日 (土)

Apple TV を購入(2012/3/16発売モデルMD199J/A)

Apple TV を購入しました。
思っていた以上に小さいです。
赤外線リモコンで操作するので赤外線が届く場所に設置する必要がありますが、小さな隙間でも置くことが出来ます。
なかなか良いです。
もう直ぐテレビと関係する何か新しい製品がアップルから発売されるようですが、値段が安い事もあり私としては買って正解でした。

Appletv
■購入理由
 ・「PCやiPad」がテレビと無線で繋がる。その体験が楽しい
 ・安い(8400円)
 ・画質がHD(1080p)。1080pなので新しい製品が出た後直ぐ押入れ行きになるようなことはないと思います。

■良い点
 出来ることの詳細は
Apple TV サイトに書いてある通りですが、
   ・iPad の画面やWindows内の写真をTV画面に映すことができます
   ・MacやiPadではなくWindows 上の iTunes からでも、テレビのスピーカーを使って音楽を出せます
     (ただし多分WindowsPCにWi-Fiが搭載されている必要はあります)
   ・AppleTVの電源がOFFでも、PCのAirPlayボタンをクリックすればONになります
   ・ストリーミングで映画を鑑賞ができます(最新の洋画1本500円程度です。私の自宅はフレッツ光回線です)

■欠点
 ・見た目が良いリモコンだが、使い勝手としては凹凸がなくボタンを押し間違える。(慣れればOK?)
 ・リモコンで音量調節できない (これは仕方ない?TVの音量はTVのリモコンで操作してと言うことです)
 ・iPad画面をTVに映しているときに、マウスポインターのように指の位置を表示して欲しいがそれはできない。(これも仕方ないですね。ポインターが表示されたらきっとうっとおしいですね)

■注意
 HDMIケーブルは付属していません。自宅に在庫がない場合は別途購入する必要があります。

■内部構造
 AppleTV(MD199J/A)に音楽/写真/動画の記憶機能はないですが、装置内部のワーキング記憶装置はHDDではなくSSDのようです。なので反応が早く無音です。
  ・
iFixitが新Apple TVを分解、8GB NAND FlashチップとA4プロセッサ

■Ref.
 ・
Mac mini 目次

 

2013年2月 1日 (金)

Windows8 にしたら 古い画像ソフトでjpeg保存出来なくなった

■トラブル内容
 Winddows8にしたら、今まで良く使っていた古い画像ソフト(PhotoED、フォトエディット)で画像が保存できなくなりました。

■対策
 下図に示すようにプロパティで互換モード設定することにより、画像保存出来るようになりました。

Photoed
■Ref.
 ・
Mac mini 記事

Windows8 でChrome が遅くなった時の対処

Windows8 にしたら Chrome が遅くなってしまいましたが、
以下の方法で早くなりました。

症状:リンクをクリックしたとき、そのページに移動するまでが長い。
    繋がった後はいつも通り高速に表示される。

Chrome

■Ref.
  ・プロキシを解決しています

 ・Mac mini 記事の目次

2013年1月29日 (火)

Mac mini に HDMI 端子経由でTV接続

Mac mini に BootCamp を使って Windows8 (64bit) をインストール。
問題なく使えていたが、HDMI端子経由でTVに接続したところ、画像は映るが音がテレビから出ないというトラブルが発生。(Mac mini本体のスピーカーから音が出る)

対策方法がわかったので、他の方のためにメモしておきます。

■不具合内容
 「Mac mini (OS: Windows8 )のHDMI端子」と「TVのHDMI端子」をHDMIケーブルで接続したとき、
 映像は映るが、テレビのスピーカーから音が出ない。

■私の環境
 Mac mini    : 2012年版 (詳細はここ
 OS       : Windows 8 Pro (64ビット) BootCampを使ってインストール
 Boot Camp  : Ver. 4.1
 CPU      : i5-3210M @ 2.5GHz
 グラフィックス : Intel HD Graphics 4000 (HDMI端子への音声信号出力はこのチップ経由?)
 
 
 HDMI端子   : マルチチャネルオーディオ出力に対応するHDMIポートが1個あり

 TV       :東芝 REGZA 42Z8000 (HDMI端子が3個ある。1番に接続)
           注意:機種によっては設定でHDMIからの音声信号は受け付けない可能性あり

 HDMIケーブル:プラネックス製PL-HDMI03-EZ。単に安かったため購入。
           注意:音声を伝達しないHDMIケーブルもあるようです

■調査方法
 音が出ない原因が私と異なる場合もあるので、原因調査方法を書きます。
  1. HDDレコーダーやPS3など,現状HDMI接続している機器の音は出る?
    音が出るなら2番に進む。
  2.現状機器に接続していたケーブル引き抜きMac mini のHDMI端子に接続。
    Mac mini を
mac OS で立上げ。TVから音が出るか? 出るなら3番に進む。
  3. Mac miniを
Windowsで立上げ。画面右下スピーカーアイコンをクリック。表示された「音声ミキサー」のデバイスにTV(テレビ)はあるか?。
    ないなら私と同じ症状なので以下を実施。

■対策
 インテルからHDグラフィック4000用ドライバの最新版をダウンロードしてインストール。
 (私の場合はバージョン:15.28.12.64.2932 )
 OS再立上げ後、何も設定することなしにTVから音が出るようになりました。

 インテルダウンロードセンター:http://downloadcenter.intel.com/Default.aspx?lang=jpn

Macminitv


■Ref.
 ・Mac mini 関連ブログ記事の目次

■私が使ったHDMIケーブル(下図の商品の内3m の方を購入

   

2012年12月30日 (日)

Mac mini (2012年モデル)購入

今まで使っていたDELL Inspiron 530s は、「ファン音が大きい」「たまにダウンする」などトラブルが多くなって
きたのでMac mini を購入しました。

■Mac mini を選んだ理由
 iMacとMac mini のどちらを購入するか少し迷ったのですが、液晶下部のリンゴマークがあるスペースが
 デザイン的にどうしても好きになれなかっためMac mini を購入しました。
 その他Mac mini を選んだ理由を記すと以下のようになります。

 ・OS      :この家の中で増えてきたApple製品との親和性が高いMac OS X が付属。
           またBoot Camp でWndowsPCとして使うことができる。(Windows OSは別途購入する必要あり)
 ・サイズ    :小さい。また見える場所に置いても周りと調和するシンプルなデザイン。
 ・騒音     :静か (無音に近い)
 ・TV接続   :HDMI出力端子があるので、PC画面をテレビに出力できる。
           (最近映画はネット配信されたものを見ることが多いのでこれは便利です)
 ・Thunderbolt :スペック的に大型液晶モニタ(27インチ2560x1440)に接続出来そう。その内試してみます。
 ・USB      : 高速なUSB3 が4ポートある。USB3なので外付HDDなども高速にアクセスできそう。

 ・無線     :Wi-Fi は 802.11n (802.11a/b/g対応)。 Bluetooth 4.0も内蔵。
 ・性能     :Core i5 + メモリ4GB なので私の用途には十分 (私はゲームや動画編集は殆どしません)
 ・SDXC    :デジカメ写真入力に便利なカードスロットが付いている
 ・安い     :12月現在45000円辺り。十分安いと思います。

■目次 (mac 導入に関する記事を書きます)
 ・Mac mini を快適に使えるようHDDをSSDに交換 (高速化)
 ・SSD へ Mac OS X をインストール (インタネット・リカバリで新規インストール)
 ・Windows 8 Pro アップグレードを1200円で入手
 ・Windows 8 Pro を Mac mini へインストール
 ・Windows 8 ライセンス取得/確認方法

 ・Wi-Fi ルータ設定方法 (ルータ:WN-G300TVGR。回線:フレッツ光ネクスト。プロバイダ:nifty)
 ・
HDD, SSD 初期化方法
 ・Windows.old フォルダ削除方法
 ・Mac - Windows キー対応表
 ・mac で ISO ファイルを作る方法

 ・Apple TV を購入
 ・iCloud        (iPadとデータ共有)

■Windows8 導入後の各種トラブル&対処方法
 ・Mac mini の HDMI端子を使いTVに接続したとき、音が出ない場合の対処方法
 ・Chromeが遅くなった --> プロキシ設定変更で高速になりました

 ・古い画像処理ソフトで画像の保存ができなくなった -> 互換モード設定で治りました

■私が購入したMac miniスペック

型番 2012年10月モデル、Part No.:MD387J/A、Model No.:A1347
CPU Core i5
2.5GHzデュアルコアIntel (Turbo Boost使用時最大3.1GHz)、3MB三次キャッシュ
メモリ 4GB(2GB x 2)1,600MHz DDR3メモリ
HDD 500GB 5400rmp
無線 ・802.11n Wi-Fiワイヤレスネットワーク接続3、IEEE 802.11a/b/gに対応
・Bluetooth 4.0
有線LAN ギガビットEthernet (10/100/1000BASE-T 、RJ-45コネクタ)
メモリカード SDXCカードスロット
グラフィックス Intel HD Graphics 4000
HDMI マルチチャネルオーディオ出力に対応するHDMIポート
Thunderbolt
(最大10 Gbps)
• Mini DisplayPort出力に標準対応
• DVI出力:Mini DisplayPort - DVIアダプタ(別売り)を使用
• VGA出力:Mini DisplayPort - VGAアダプタ(別売り)を使用
• デュアルリンクDVI出力:Mini DisplayPort - Dual-Link DVIアダプタ(別売り)
オーディオ ・光オーディオライン入力ミニジャック(デジタル/アナログ)
・光オーディオライン出力/ヘッドフォンミニジャック(デジタル/アナログ)
・スピーカー内臓 (音楽鑑賞用途としては性能が低いと思います)
その他入出力 ・USB3 (4ポート) 
・FireWire800 (最大800 Mbps)
・IR(赤外線)レシーバ

■備考
 2012年12月現在一部機種の画像出力で「白飛び」問題が発生しているようです。
 私の mac は問題ありませんでした。(私が気にならないだけ?)

Windows 8 ライセンス取得/確認方法

Windows 8のライセンスは「アクションセンター>Windows ライセンス認証」で取得及び確認できます。

Win812_3

ライセンス未承認&ネットに未接続状態では「電話でのライセンス承認」というボタンが表示されます。

■Ref.
 ・
Windows8アップグレード版をMacのBoot Campに入れてみた!@ 週アス+
 ・
Windows8 アップグレード版を、クリーンインストール @ ☆ やまま の 楽しい毎日2 ☆
 ・「windows 8 アップグレード クリーンインストール」で検索


Mac mini 2012 関連記事の目次

mac で ISO ファイルを作る方法

Boot Campを使ってMac に WIndows 8をインストールするとき、Windows 8インストールデータが入ったISOファイルが必要になります。
私がWindows 8 Pro アップグレード版をインストールした時の方法をメモしておきます。

1. Windows 8 Pro ダウンロード版をISO形式でダウンロードしてDVDに書き込みます
2. Mac mini にUSBケーブル付きのDVDドライブを接続
3. mac に接続したDVDドライブは本体ボタンではトレイを開くことができないので、
 Finderの「取り出す」でトレイを開けます。そしてダウンロードしたWindows8 データが入ったDVDをセットします
4. Finder > アプリケーション > ディスクユーティリティ を開きます
  下図の方法で拡張子 cdr のファイルを作成
5. 拡張子を cdr から iso に変更

Iso
■Ref.
 ・
ウィンドウズでも扱えるISOイメージファイルを作る @ Mac Fan

■mac 対応 ポータブルDVDドライブ(USB接続タイプ)
 mac対応と書いていないものでも、データROMとしてなら大概は問題なくmacで使えるようですが、
 私が使ったのは以下の商品です。


Mac mini 2012 関連記事の目次

Windows.old フォルダ削除 (Windows 8)

「古いWindows (XP, 7, VISTA)」が入っているSSDに「Windows 8 アップグレード版」をインストールすると、「C:\Windows.old」フォルダができ、その中に古いWindowsのバックアップ(?)ファイルが10GB程度出来ます。

SSDにとって10GBはとても大きなデータ量なので削除した方が良いですが、DELキーでは削除できません。

削除するには「ディスククリーンアップ」を使います。

■備考
 4.8GBもある「一時Windows インストールファイル」も不要なら削除すべきだと思います。

Win810


Mac mini 2012 関連記事の目次

2012年12月29日 (土)

Mac mini に Windows 8 Pro (アップグレード版)をBootCampを使ってインストール

Mac mini が小型/高性能且つ安価なのと Mac OS X に興味があったのでMac mini を購入しました。
Mac OS X は使いやすいOSですが会社のPCがWindows であるため Windows の操作が体に染み付いてしまっています。なので Mac mini にはBoot Campを使ってWindowsをインストールし、主にWindowsマシンとして使用する予定です。

仮想化ソフトを使えばMac OS の中でWindowsを動かせることは知っていますが、マシンパワーを100%活かしたいので、Boot CampでMac miniをWindowsマシンにすることにしました。
(もちろんWindowsインストール後も好きな時に Mac OS Xを起動できます。アップルはBoot Campをもっとアピールした方が良いと思います)

BootCampのバージョンは最近どんどん上がっており、2012/12/24現在5.0.1です。BootCamp5.0.1ではWindows 8 の64bit版にも対応しているようです。2012/12/29現在Web上ではBootCamp4.0について書かれており、そこには Windows8未対応と記載されています。しかしもう少ししたら「Ver 5.0 はWindows7及び8に対応」と記載されると思います(ここ)。

インストール出来るものは64bit版のみです理由はアップルが64bitドライバしか準備していないからです。(裏技を使えば32bit版をインストール出来るかもしれません)

インストールで幾つか手間取ったことがあったので、参考までにメモしておきます。


■追記(2012/12/30)
Windows 8 アップグレード版は古いバージョンのWindows(xp,VISTA,7)がインストールしてあるディスクにインストールしないとライセンス承認されないようです。もしそうであればWindows 7, 8 の64bit版しかインストールできないMac mini(Mac OS X Mountain Lion、Boot Camp5.0.1)に、XPのアップグレードとしてWindows 8アップグレード版をインストールするのは困難です。キーワード「Windows 8 アップグレード クリーンインストール」などで検索すれば解決策が見つかるかもしれません (例えば)。またXPのライセンスでWindows8アップグレードをインストールすることはライセンス的には問題ない行為と思われるので、マイクロソフトに問い合わせれば良い回答が得られるかもしれません。 参考-->Windows 8 ライセンス取得/確認方法


■インストールしたPC環境
 Mac mini   :
2012年モデル、MD387J/A
 OS      :OS X 10.8.2
 Boot Camp :5.0.1
 Windows OS:
Windows 8 Pro 64bit アップグレード版(1200円で入手)
 インストール用USBメモリ  :8 GB以上 (最近はUSB3対応のメモリも安いので、これを機会に1個購入しておくと良いと思います)

■はじめに
 ・ソフトウェア・アップデート(下図)を使ってBoot Campを含むmacのソフトを最新のものにします

    Mac_3

 ・無用なトラブルを避けるため「マウス」「キーボード」「モニタ」「インターネットLANケーブル」以外の接続は外しておきます
     ・USBメモリや外付HDD等は外しておいた方が無難です
     ・マウス、キーボードはBluetooth(無線)ではなくUSB(有線)の方が無難です

  ・自分のハードディスク容量(空き容量)を把握し、どの程度の容量をWindowsで使うか決めておきます

  ・Windows OSインストールデータを準備しておきます。
     ・私はWindows 8 Proを準備しました
     ・形式はISOです

  ・インストール中にモニタがOFFしないよう、画面のスリープモードをOFFしておいた方が良いです
    Photo

■何らかの原因で立上がらなくなった場合の対処方法
   電源ボタンを長押しで一旦電源OFF。
   その後optionキーを押したまま電源ON。(Windowsキーボードの場合はALTキー)
   画面にディスクの図が表示されるまで待ちます。ディスクが表示されたら Mac osが入っているディスクを選択してmac OS を立ち上げて最初からやり直します。

■Boot Camp (Ver. : 5.0.1, 2012年12月)
 ・Boot Camp起動 : Finder > アプリケーション > ユーティリティ > Boot Campアシスタント
 ・4GB以上のUSBメモリを接続。(注意:メモリの内容は全て削除されます)
 ・「作業を選択」画面では3項目にチェックを入れます

Win81

Win82

・50%程度進んだところでバーが動かなくなります。(下図)
 15分程度すれば再び動くので、バー再び動くまで何もしないでひたすら待って下さい。

 (2013-04追記:幾ら待っても動かない場合があります。その時はBoot Camp起動からやり直す必要があります)
Win83
・USBメモリに作られるファイルは下図に示す内容です
Bootcamp_usb

Win84


以上で「Mac mini のHDD(又はSSD)内にWindowsをインストールする領域が確保」されると共に
「Windows 8をインストールするためのソフトがUSBメモリ内に保存」できました。

■Windows 8 Pro インストール

Win85_2

注意:
 ・ディスクが沢山現れますがWindowsをインストールするディスクを間違えないで下さい。(下図参照)
 ・インストールするディスクをフォーマットしないとインストール出来ません          (下図参照)

Win86_2
Win87_2

・以下聞かれたことに答えながらインストールを進めていけばWindows8のインストールが完了します。
★注意:この状態ではライセンス未承認状態です。参考-->Windows 8 ライセンス取得/確認方法

 ■Windows 8へ ドライバとBoot Camp をインストール
  USBメモリ内の WindowsSupport > Setup.exe を実行

Win88

・ドライバ設定
 Wi-Fi, Bluetoothなどを設定。
 最後にUSBメモリを外す。

Win89_2
■SSDの場合
 SSD付属マニュアルを読んで、必要な設定を行う。
 

■私が使用したUSBメモリご参考)
 このメモリの特徴は、側面のスイッチで書込み禁止にできることです。
 スイッチは誤動作防止のため小さく、切替えは爪楊枝などの細い物を使う必要があります。
 ウィルス感染防止に効果ありと考え購入しました。(USB3対応です)


Mac mini 2012 関連記事の目次 

2012年12月24日 (月)

Mac:OSインターネットリカバリ

私が購入したMac mini (2012年モデルOS X Mountain Lion)にはOSリカバリ用のCD, DVD,USBメモリが付属していません。
その代わりOS再インストールが必要な時、インターネット経由でOSを新規インストールできます。

参考までにインターネットリカバリ方法をメモしておきます。

■準備
 ・何もデータ(含むOS)が入っていないHDD又はSSDをmacに接続
   ・新規購入した HDDやSSD --------

   ・データクリアした後のHDDやSSD --

 ・Mac mini に、キーボード、マウス、モニタ、LAN を繋ぐ
   無用なトラブルを避けるには以下のようにした方が良いと思います
     ・キーボード、マウスはBluetooth(無線)よりUSB(有線)接続
     ・LANはWi-Fiより有線接続
     ・USBメモリ、外付HDDなどは接続しない

 ・この状態で電源を入れると?マークフォルダが点滅すると思います
   (電源ボタン長押しで電源OFFできます)

   Dsc01316_2

■リカバリモード起動方法 (Ref. : リカバリモード @アップル)
 「command」と「R」キーの両方を押した状態でMacの電源ON。
 (Windowsキーボードの場合はWindowsキー(旗)とRキー)
 1,2分待つと画面に地球が回転している図が現れます。

Dsc01318

■OS Xユーティリティ起動
 自動的に「OS Xユーティリティ」が起動します。

 まず、「ディスクユーティリティ」でOS Xをインストールするディスクにパーティションを1個作成。
 慣習的に名前は「Macintosh HD」とするようです。

 ★ポイント★後々見苦しいのでボリュームの「名前」を初期値の「名称未設定」から自分の好みの名称に変更する。
Photo
次に「OS X を再インストール」を選択します。
Dsc01321

参考:画面右上にUSA国旗が表示されています ---> Dsc01328

「続ける」を選択
Dsc01323

・ライセンス確認画面:「同意する」を選択
・OSをインストールするディスクを選択。通常ディスクは下図のように1個しか表示されないと思います

Dsc01358

OSファイルのダウンロードが始まります。私の環境(フレッツ光)ではダウンロード完了まで35分掛かりました。
Dsc01329

ダウンロードが完了したら、自動で再立上げ。
立上がったところでOS X のインストールが始まります。 インストール完了まで10分 @ SSD

Dsc01332

Dsc01333_5

■以下設定が始まります

Dsc01334


・「キーボード入力環境を設定」 (画面省略)
・このMacに情報を転送

Dsc01336

・「位置情報サービスを有効にする」 (画面省略)
   私はmacが置いてある自宅の位置情報をインタネットに発信するメリットがないと考え有効にしませんでした。
  Mac mini本体を盗まれた時に、その位置を探せる以外にメリットは思いつきません。

・「iCloudを使ってMacを探す」     (画面省略)
・Apple ID設定 
(私の場合「@」記号入力に、「shift」+「2」キーで入力しました)
Dsc01339


・OX X 使用許諾契約             (画面省略)
・利用可能なOS Xアップデートがあります


Dsc01341

・iCloudを設定
Dsc01342


・iCloudを使ってMacを探す   (画面省略)
・コンピュータアカウントを作成 (画面省略)
・設定完了

Dsc01347


・OS X アップデートをインストール中
Dsc01348

 ■インストール完了後のチェック
 ・バージョン    :OS X 10.8.1
 
・ディスク使用量 :9.02GB
 ・TRIM :メニュバー林檎マーク>このMacについて>詳しい情報>システムレポート
       SSDと認識しているようだがTRIMは「いいえ」。ネット上の情報ではツールを使って「はい」にした
       
方が良いとの情報が沢山あります。
       わたしも後で「はい(TRIMを有効にする
)」にしようと考えています。
Trim

■マウスホイール回転方向
 イニシャルではマウスホイールによる画面スクロールがWindowsと逆です。
 「システム環境設定>マウス>スクロールの方向」で方向を変更できます

■ソフトアップデート
 「ソフトウェアアップデート」実施でOS X を 10.8.2 にバージョンアップ(2012/12/24)
  Mac_2


■iWorkインストール
 無料でiWorkをインストールできます
 「Finder>アプリケーション>App Store>購入済み>iPhoto, iMovie」 をインストール
Iwork

■ディスク使用量
 OS X 10.8.2 にバージョンアップして、iPhoto, iMovie をインストールした状態で
 
ディスク使用量 13.3GB です。

■Ref.
 ・インターネットリカバリ 「
OS X:OS X での復元について」 @ apple


Mac mini 2012 関連記事の目次 

2012年12月23日 (日)

Mac : HDDクリア方法

HDD(ハードディスク)内の全データを削除する方法。

OS:mac OS X 10.8.1 (Mountain Lion)

■注意
 以下を実施するとHDD内の全データが削除され、OSも立上がらなくなります。
 ご注意下さい。私はOSを新規インストールするために、HDDクリアを実施しました。

1.通常ディスクユーティリティからHDD内の全データ削除は出来ません
 
安全対策上もっともな仕様ですが、通常ディスクユーティリティからHDD内の全データ削除は出来ません。
 Finder > アプリケーション > ユーティリティ > ディスクユーティリティ
 でHDD内全データを削除しようとしても、「消去」を選択できません。

Hdd


2.外付ディスクを外す
 誤って必要なデータを削除しないよう、MacからUSBメモリ/外付HDDなどは外して下さい。
 必要なのはマウスとキーボードです。

 Bluetooth(無線)キーボードで以下作業が上手く行かない場合、USB(有線)接続のもので試してみて下さい。

  3.リカバリモードで立上げる
 「command」と「R」キーの両方を押した状態でMacの電源ON
 (Windowsキーボードの場合はWindowsキー(旗)とRキー)

  Ref. : リカバリモード @アップル

 4.ディスクユーティリティを使ってHDD内全データ削除
 リカバリモードで立ち上がった直後は下の左図の状態です。
 「OS X ユーティリティ」で「ディスクユーティリティ」を立上げれば、HDDをクリア(全データ削除)できます。
 ★クリアと同時にディスクボリュームの「名前」は不自然な「名称未設定」から「Macintosh HD」などへ変更すべきです。

Hdd

■mac OSインストール
 私のmacでは以上を実施した状態から、インターネット経由でOSを再インストールできました。
 Ref.:
OS X:OS X での復元について @ アップル


Mac mini 2012 関連記事の目次 

Windows - Mac キー対応表

自分用のメモです。

mac Windows コメント
command Windowsキー(旗) MacのCommandキーは、WindowsのCtrlキーに相当します
option Alt
shift shift
delete BACK カーソルの左を削除
del DEL カーソルの右を削除
return ENTER
Clear Num Lock

■参考
 ・MacBook Airのキー操作がわからん!Windowsユーザーが戸惑うショートカットキーまとめ @ Chrome Life


Mac mini 2012 関連記事の目次 

2012年12月17日 (月)

Mac mini のHDDを SSD に交換

以前購入したMac Book Air があまりにも快適(高速)だったのと、最近SSDが安くなり250GBが15000円以下で入手出来るようになったため、今月購入したMac mini にSSD(Solid State Drive) を取付けました。

交換作業をメモしておきます。

■環境
 Mac mini:Mac mini  MD387J/A、Model No:A1347 2012年10月発売
        ( HDD:500GB、 CPU:Core i5、メモリ4GB、OS:Max OS X Mountain Lion )
 SSD   :SAMSUNG 840 (250GB)

■注意/分解を始める前に
 ・
SSD取付作業(Mac mini 分解)を行うと、アップルの保証が受けられなくなる可能性が高いです(自己責任でお願いします)
 ・購入した状態で暫く使い、初期故障がないことを確認してから分解した方が良いです
 ・HDD内のデータのバックアップを取っておいた方が良いです
 ・新規SSDにOSをインストールする方法はここに書きました。

  SSDを取り付けてもOSをインストールしないと動きません。念のため。
 ・冬場の分解では、静電気に注意して下さい
  何かに触ってバチバチするような状況では分解しない方が良いです。
  静電気防止には以下が効果あると思います
    ・重ね着しない (洋服がすれると静電気が発生する為)
    ・加湿
    ・毛布(化繊)の上で作業しない
    ・「静電防止リストバンド」を使用 (私は使ったことないです)
  

■必要な工具
 ・
トルクス(TROX)ドライバー(サイズは T6 又は T7 と T8)
  プラスドライバ等で無理やりネジを外すとネジの頭の溝がつぶれます。
  殆ど使う機会がないなら以下のような安価なものを購入することをお勧めします。
  (私は近所のPC屋で以下と同様なものを購入しました)

Ssd01_5

■裏フタ取外し
Ssd02

■放熱ファン取外し
Ssd03_3

■放熱整流板取外し
Ssd04

■Wi-Fiアンテナ板取外し
Ssd05

■ハードディスク取外し
Ssd06

■SSD取付
Ssd07

■Wi-Fiアンテナ板取付
Ssd08

■Wi-Fiアンテナ板にSSD固定
Ssd09_2

■SSDケーブル端子接続
Ssd10_2

■放熱整流板取付
Ssd11

■放熱ファン取付
Ssd12

■ファン回転確認
 Mac mini のファンはとても静かなので、ファンが回転しているかどうかは裏ぶたを外した状態で目視
 確認して見ると良いと思います。(自己責任で)
 電源、マウス、キーボード、モニタを繋ぎ電源ボタンONすると、ファンの回転が確認できると思います。

 OSが入っていないので画面にはクエッションマークがフォルダ(下図)が表示されると思います。
  電源ボタン長押しで電源OFFできます。

Dsc01316

■裏フタ取付
Ssd13

■ソフト設定
 SSDに変えた場合 trim 設定を ON にした方が良いそうです。

■取り出した2.5インチHDD活用方法
 USB3.0 対応のHDDケースに入れれれば有効活用できると思います
 実際に使ったわけではありませんが安い商品として以下があるようです。

USB  3.0
SATA 2

USB  3.0
SATA 3

玄人志向
GW2.5SATA3-U3

この商品は現在お取り扱いできません

■Ref.
 ・
Mac Mini Late 2012 Teardown 、2ページ目 iFixit
 ・SSD SAMSUNG 840 250GB


Mac mini 2012 関連記事の目次 

2012年12月13日 (木)

Windows 8 Pro アップグレード版を1200円で入手

■追記 (2013-03-05)
 この記事に記載した1200円でWindows8へアップグレードできるキャンペーンは 2013年2月28日 に終了しました。
対象期間はここに記載されています。


私は7月にWindows7パソコンを購入しました。(Lenovo G580 26897LJ 最近は値上がりしていますが以前は3万円以下で入手できました)

 Windows8は別に欲しくなかったのですが、マイクロソフトが「Windows 7 パソコンを買って、Windows 8 Pro を1,200 円 (税込)で手に入れよう」というキャンペーンをやっているのを知り調べてみたら、面白いことが分かりました。
 提供されるライセンス」を見ると「今回のご提供は、対象 PC を購入して参加条件を満たしたお客様に限られますが、システム要件を満たすいずれの PC に対してもインストールできます」との記載を見つけました。

 私は近々Mac miniを購入する予定です。そのmacにBoot Campを使ってWindowsをインストールしようと思っており、そのWindowsライセンスが欲しいと思っていたから、この記載に関心を持ちました。
Windows XPのライセンスは持っているので、そのライセンスと「Windows 8 Proアップグレード版」でMac miniに Windows8 Pro をインストールすることにしました。---> 注意:「追記」

Windows8 Proにはハードディスクを暗号化するBitLocker機能があります。簡単に持ち出せてしまうmac miniに欲しかった機能です。
 気になるのは現時点でBoot CampがWindows8をサポートしていない点ですが、いずれはサポートするだろうし、今でも保障していないがインストールできる可能性が十分あると思いWindows8 Proキャンペーンに応募することにしました。

色々試行錯誤があったのでメモしておきます。


■追記(2012/12/30)
 
Mac mini (OS X Mountain Lion、Boot Camp 5.0.1)はWindows7, 8 の64bit版しかサポートしていません。
 Windows XPからWindows 8 にアップグレードするにはあらかじめXPをインストールしておく必要がありますが、
 そのXPをMac mini にインストール出来ません。(探せば裏技はあるかもしれませんが・・・)
 よってWindows 7 の64bit版ライセンスを持っていない方は、インストールが不可能かまたは相当苦労します。
 マイクロソフトへ電話したらライセンス承認してくれる????

 
助けになると思われるサイト-->Windows8アップグレード版をMacのBoot Campに入れてみた!@週アス+


 ■「Windows 7 パソコンを買って、Windows 8 Pro を1,200 円 (税込)で手に入れよう」プログラム概要
  (以下は私見です。正確なライセンス情報は
ここを見て下さい)
 ・対象者:2012/6/2から2013/1/31までの間にWindows7 PCまたはDSP版を購入した人
 ・応募期間:2013/2/28まで
 ・インストールできるPC:システム要件を満たすいずれの PC に対してもインストールできる。
                 (不思議な条件です。よっぽどWindows8を広めたいのか?

 ・入手できるバージョン:Windows 8 Pro アップグレード版
                アップグレード版なので古いバージョンのWindowsのライセンスは必要。
                WindowsXP SP3,Vista、7なら良いようだが正確な記載は見つけられませんでした
 ・価格:1200円

 ■応募方法
 ・「
Windows 7 パソコンを買って、Windows 8 Pro を1,200 円 (税込)で手に入れよう」の下の「次へ」をクリック。表示された画面に情報を入力。数日後に以下のメールが届きます。
12131_2



「Windows8へのアップグレードをはじめる」をクリックすると、Windows8がインストール可能かチェックされたのち、入力フォームが現れるので、必要事項を入力する。
ポイント:「注文の確認」画面でプロモーションコード入力して価格が3300円から1200円に変わったのを確認してから「注文の確定」ボタンを押す。(下図)

12132_5


購入が完了すると以下の「ご注文ありがとうございました」メールが届きます。

12133_5
■備考 - バックアップDVDについて
DVD書込みドライブをお持ちなら、以下でISOファイルをダウンロードして、それをDVDに書き込むことで「バックアップDVD」は簡単に自作できます。なので通常バックアップDVDは購入する必要はありません。
また大容量USBメモリがあれば(または購入すれば)DVDディスクの代わりにUSBメモリにWindows8Proアップグレードを保存できます。

■Windows 8 ダウンロード方法
上記記メールの「ここ」をクリックする、「Windows8のセットアップ」プログラムが実行されます。(下図)

12135

ポイント:
1. WindowsXPを使った場合、「メディアを使ってインストール」項目がありません

 このメディア作成機能自体がVista, 7の機能のようです。だからXPでは項目が現れないようです。
2. Windows8には32ビット版と64ビット版がありますが、どちらをダウンロードするかを選択ができません
 
「Windows8アップグレードアシスタント」プログラムを実行している環境が32ビットなら32ビットのWindows8
 がダウンロードされ、64ビットなら64ビットがダウンロードされます。

■Windows 8 64ビットバージョン入手方法
現在のboot camp(ver4.0)は64ビットしかサポートしていません。しかし私のPC は 32ビットのWindows 7 なのでWindows8も32ビット版しかダウンロードできません。ここで64ビットWindows8を入手する方法が2つあります。
1つは先のメールにある「バックアップDVDを今すぐ注文」をクリックしてDVDを購入する方法です。
もう一つの方法は以下のようなものです。私は以前「Windows7 アップグレードDVD(32、64ビット用の2枚のDVDが入っています)」を購入しました。そのディスクを使ってmacに一度64ビットWindows7をインストール。その64ビットWindows上で「Windows8アップグレードアシスタント」を実行し「Windows8Pro アップグレード版64ビット」をダウンロードするという方法です。

■ライセンス(2012/12/30改定)
 「ダウンロードしたWindows8 Pro」のライセンスは「ダウンロードに使ったOS」とは関連付けされていないようです。
 何もデータがない新品のHDDにアップグレード版をインストール出来るのですが、肝心の「ライセンス承認」ができません。よってインストール後30日したら起動できなくなります。
上記「ご注文ありがとうございました」メール記載のプロダクトキーを使って承認させようとすると、「この製品はアップグレード品のため、古いWindowsがインストールしてあるドライブにインストールして下さい」という感じのメッセージが表示されます。XPのプロダクトキーでは承認されません。

 参考 --> Windows8アップグレード版をMacのBoot Campに入れてみた!@週アス+

■Ref.
 ・Windows 8 優待購入プログラム FAQ


Mac mini 2012 関連記事の目次 

2012年12月12日 (水)

100円ショップで購入した「S字フック」「ひも」そしてiPadで作った壁掛けTV

iPadと紐とS字フックで台所用の壁掛けテレビを作りました。

こんな感じです。

Tv_3

iPad画面の上下の黒帯は画面をタッチすれば消せます。
もちろん黒帯が消える分、左右の画像が見えなくなります。
地デジとiPadの画面の縦横比が異なるため仕方ありません。

■リンク
 ・iPad目次
 ・地デジチューナー搭載無線LANルーター設定

地デジチューナー搭載無線LANルーター(WN-G300TVGR)設定

キッチン前の壁に iPad を「壁掛けTV」として取り付けようと考え、I-O DATA社製 無線LANルータ WN-G300TVGRを購入。

設定で手間取ったのでメモしておきます。手間取ったのは以下の2点です。
 A. フレッツ光経由でインターネットへ接続するための設定
 B. nifty へ接続するための設定

項目AについてはPPPoE設定にすることで解決しました。
項目Bについてはniftyパスワードを変更しました。この機器としてパスワードに文字「>」を使用することが禁止されているようです。余計な機能だと思います。仕方ないので文字「>」を含まないパスワードに変更しました。

■地デジ搭載無線LANルーター(WN-G300TVGR)
この無線ルーターを選んだのはiPadでTVを見るためです。
欠点として以下がありますが、私の使用方法では問題ありません
 ・iPadでテレビを閲覧するアプリの起動に時間がかかる (約20秒)
 ・通常テレビより画像と音声が遅れる            (2,3秒。ただしiPadでの画像と音声はズレません)
 ・チャンネル切替えに時間がかかる             (5~8秒)

iPadの地デジ画像はとても綺麗で満足しています。
壁掛けTVとしてだけでなく、家内の小型モバイルTVとしても使えます。
もう少しで新製品が出るのか、現在(2012/12) 1万円以下でとても安いです。
iPadをお持ちなら小型TVを購入するより、この製品を買った方が便利でお得だと思います。
この機器はiPadで地デジを見るためだけに使うことができます。その時はこの機器にLANケーブルを繋ぐ必要はありません(インターネット接続不要)。上手くいかない場合はルーターの電源を1回引き抜いてOFFしてみて下さい。

注意:この機器へTVアンテナを接続する必要があります

■私の環境
 ・iPad       :新iPad (2012年 Retinaディスプレイ)
 ・iOS        :iOS 6.0.1
 ・TV閲覧アプリ :テレキング。無料。App Storeからダウンロード
 ・TVアンテナ   :マンションの共同地デジアンテナ
 ・インターネット :フレッツ光ネクスト、 回線終端装置:GE-ONU
 ・プロバイダ   :nifty (ニフティ)
 ・PC        :DELL製PC
 ・PCのOS     :Windows7

■WN-G300TVGR設定内容
  ・Internet Explorer を使って設定画面へアクセス : http://192.168.0.1
G300_2

■録画機能付き地デジ搭載無線LANルーター(ソフトバンク TVソリューション)
 少し高いですがSoftBankから録画機能が付いた商品(SB-TV03-WFRC)も販売されています。
 録画するには別途USBハードディスクが必要です。
専用又は対応ハードディスクはここの最後の方に記載があります。

2012年12月 4日 (火)

Mac mini (Early2009) への Boot camp インストールメモ

古いMac mini (Early2009) に Boot Camp を使って Windows 8 Pro をインストール。
その後 Windows へ Boot camp をインストールするときに手間取ったのでメモしておきます。

■ポイント(躓いたところ)
 1.  Mac OX X Snow Leopard DVD 内のBoot camp 3.0 を インストールしないと、3.1 以降の最新Boot camp
   をインストールできない。
 2. 互換モードを設定しないと Windows 8 にインストールできない。

■私のPC環境
 ・mac    : Mac mini        (
MB463J/A、Early 2009)
 ・mac OS : 10.6 Snow Leopard  (購入時のOSバージョンは 10.5.6)
 ・Windows : Windows 8 Pro     (32bit)

■手順
 Windows 8 のインストールが終わって、Boot campをインストールするところから始めます。

 1. Boot camp Ver.3.0インストール
   Boot camp はVer.3.0をインストールしないとそれ以降のバージョンをインストール出来ないようです。
   しかし3.0はインターネットからダウンロードできません。Mac OS X Snow Leopard のUpgrade DVDに
   入っています。
   ただしDVD内のファイルをクリックしてもWindows 8 未対応だということで起動できません。そこでDVD
   内の   ファイルをすべて適当なCドライブ内のフォルダにコピーします。例えばC:\BootcampInstall。
   コピーすると、WindowsSupport\BootCamp\setup というファイルができます。このアプリケーション
   ファイルを選択、マウス右ボタン>プロパティ>互換性 > 互換モード でWindows Vistaを選択。
   ウィンド右下の「適用」ボタンを押す。そして「setup」ファイルをダブルクリックすればインストールが
   始まります。

Photo

2. Boot camp Ver.3.1以降インストール
  2013年2月現在Boot camp Ver.3.x の最新バージョンは3.3です。一気に3.3にバージョンアップ出来ない
  ので、3.1 -> 3.2 -> 3.3 の順にバージョンアップして行きます。
  3.1以降は 「
Apple サポートダウンロード」からダウンロード出来ます。

    ・Boot Camp 更新プログラム 3.1 (Windows 32 bit): 互換モードは Vista Service Pack2
    ・
Boot Camp 更新プログラム 3.2 (Windows 32 bit): 互換モードは Windows7
    ・
Boot Camp 更新プログラム 3.3 - For Windows : 互換モードは Windows7

 
  

2012年11月 7日 (水)

Python : Excel 読み/書きパッケージのインストール方法

Python で Excel ファイルを 読み/書き するためのパッケージ としてxlrd, xlwt があります。このパッケージのインストール方法をメモしておきます。

■環境
 ・OS     : Windows 7
 ・Python  : Ver 2.7.1   
   (Pythonは事前にインストールしておく。
日本Pythonユーザ会 > Python標準リリース)

■パッケージダウンロード
 以下から xlrd, xlwt, xlutil をダウンロード
  ・
http://www.python-excel.org/

 ・xlrd:エクセルファイル読込みに使用
 ・xlwt:エクセルファイル書込みに使用
 ・xlutils:コピー、フィルター処理などに使用

■ダウンロードしたファイルの破損/改ざん有無チェック
 Windows7でファイルのMD5を調べるには、例えば以下のフリーソフトを使用します
  ・
HashTab  (リンクは窓の杜に張ってあります。個人使用のみフリー)
  ・
FCIV    @ マイクロソフト

■圧縮ファイルを解凍するソフトをインストール
 何でも良いのですが、フリーソフトとしては以下があります。
 ・
Archive decoder (リンクは窓の杜に張ってあります)

■xlrd, xlwt, xlutils インストール方法
 xlrd を例に説明します。

 ダウンロードしたファイルの名前はバージョンにより数字部分が変わりますが「xlrd-0.8.0.tar.gz」のような形式だと思います。
 これを解凍ソフトで解凍します。解凍して出来たフォルダの中に
setup.py が存在するはずです。
 「コマンドプロンプト」を起動してsetup.py が存在するフォルダへ移動。
 以下のコマンドを実行すればインストール完了です。

 >python setup.py install

コマンドプロンプトの表示

C:\Temp\xlrd-0.8.0>python --version
Python 2.7.1

C:\Temp\xlrd-0.8.0>python setup.py --help
Common commands: (see '--help-commands' for more)

  setup.py build      will build the package underneath 'build/'
  setup.py install    will install the package

- - - 省略 - - -

C:\Temp\xlrd-0.8.0>python setup.py install
running install
running build
running build_py
creating build
creating build\lib
creating build\lib\xlrd
copying xlrd\biffh.py -> build\lib\xlrd
copying xlrd\book.py -> build\lib\xlrd

- - - 省略 - - -

running install_scripts
copying build\scripts-2.7\runxlrd.py -> C:\bin\Python27\Scripts
running install_egg_info
Writing C:\bin\Python27\Lib\site-packages\xlrd-0.8.0-py2.7.egg-info

C:\Temp\xlrd-0.8.0>

■リンク
 このパッケージを使用してEXCEL読み書きするサンプルプログラム
  ・
Python: EXCELファイル読み書き

2012年9月26日 (水)

ノートPCにストラップを付ける

ノートパソコン(ウルトラブック)は持ち運び時(特に書類と一緒に持ち運ぶ時)、滑って落としそうになることがあります。
そこで落下防止用ストラップを付けようと思いましたが、本体に気軽に穴を開けられずどうすれば良いか悩んでいました。

そんな時「盗難防止用のセキュリティワイヤー(ケンシントンロック)を取り付ける穴」に取り付ける金具を見つけました。値段が安かったのでダメ元で購入。取り付けて見たところ思った通りの物が出来ました。
穴や金具自体は盗難防止用なので強度は大丈夫だと思っていました。心配だったのは金具が邪魔してノートPCが机から浮き上がることです。しかし下図のように私のPCでは大丈夫でした。

Pc2


これを購入 これも同様に使えるかも?

■PS
 ・ストラップは100均でも購入できます
 ・ネジはホームセンターで1本数円で購入できます
 ・私が持っている、 MacbookAir にはセキュリティーチェーン用の穴はありませんでした

2012年9月20日 (木)

iPad:画像の削除方法

iPadの画像の保存区分は、大きく分けて2つあるようです。(間違っているかも・・・)

一つはiPadのカメラで撮影したものやiCloudで同期しているもの。
もう一つはiTunesなどでPC内の画像と同期したもの。

ここからが本題ですが、iPadのメモリ空き容量が少なくなり画像を削除しようとしたところ削除画像の選択が結構面倒でした。

以下のブログに役立つ方法が記載してあったのでリンクしておきます。

あなたのiPadは写真がたまっていませんか?iPadの写真をまとめて選択、削除する方法!@iPad営業マンの全力疾走Blog

2012年9月18日 (火)

四国最高峰 石鎚山登山

四国最高峰(近畿以西の西日本最高峰)の石鎚山に登ってきました。
天気は曇りでした。

とは言っても弥山(標高1,974m)までしか行っていません。直ぐ先にある天狗岳(標高1,982m)はガスっていたので行きませんでした。またいつかチャレンジしたいです。

■PS
今回ブヨに悩まされることはありませんでしたが、夏はブヨが大変多いそうです。長袖、ネット付き帽子が必須らしいです。

Photo

アサギマダラ (台湾まで飛ぶそうです(1980年ころ初めて分かったそうです)。胴体が”マダラ”です)
Photo_2
Photo_3

大きな地図で見る

2012年9月17日 (月)

ひまわり @ 佐用町

ひまわり 2012-7-26

Photo_11 Photo_12

 

大きな地図で見る

DIY: 簡単なカーテンアンカー

部屋に風を通す時、中が見えないようにレースのカーテンをしている人は多いと思います。

ただ、このようにするとカーテンが網戸にくっつき白いレースカーテンが汚れてしまいます。
また、カーテンのせいで風通しが悪くなります。

そんな時はペットボトルや重い物を使ってカーテンを引っ張れば良いと思い、下図のようにしてみました。

Photo_6

DIY: 西日対策2/2

前回の対策で西向き部屋のサウナ状態は改善したましたが、カーテン(農業用遮光ネット)の隙間から光が漏れてくるので更なる改善をしました。

今回使ったのは西日対策でポピュラなよしずです。
よしずにも隙間が多くあるため、100円ショップで購入したアルミ反射マットをよしずの前面にくっつけました。よしずとアルミマットを完全にくっつけると風にあおられたとき吹き飛んでしまうので上部のみくっつけました。

よしずを支えは100円ショップで買ったロープと荷物固定ゴムバンドで作成しました。

前回の対策と今回の対策でかなり西日を弱めることができました。

Photo_5

DIY: 西日対策 1/2

西日は長時間部屋の奥まで日が差し込むので、遮光しないと部屋の中がサウナ状態になってしまいます。

初め、サッシ(窓)に数千円の高価な遮光断熱フィルムを貼ったのですが殆ど効果がありませんでした。

その後色々実験した結果以下のことが分かりました。
 ・熱は赤外線が運ぶので、可視光を遮断するカーテンでは役に立たない
 ・ガラスに日光が当たると、触れないほど暑くなり、ガラス自体が赤外線ストーブ状態になる。
   ---> サッシの外側で遮光した方が効果大

以下のことに注意しながら部屋の外に遮光カーテンを付けることにしました。
 ・賃貸物件ではやたらと外壁に穴を開けられないので、カーテンは軽い物を選ぶ
 ・大きな面積で風を受けるととても強い力がはたらくので、風が抜ける素材のカーテンを選ぶ
   --> 農作業用の遮光ネットを使うことにしました。

カーテンレールはニトリで一番軽い物を選びました。
カーテンレールは一旦プラステック板に固定。そのプラステック板の2か所を小さなねじで壁に固定しました(力を分散)。
カーテンは100円ショップのフック付きゴムバンドで、風でたなびくのを防止しました。

Photo_4

これで改善されたのですが、まだ暑いので更なる改善をしました。--> ここです。

DIY: 室温計作成 & フリーアングルジョイント作成

以前紹介したデザインが気に入った100均の温度計(Happy Station)を室温計として使うため、壁の見やすい高さ(目の位置)に取り付けることにしました。

この温度計はデザインは良いのですが、正面以外の方向から見ると、とたんに表示が薄く見え難くなります。
(写真でも薄く映っています・・・。 実際はもう少し見やすいです)

そこで液晶面の方向を微調整できるよう、100円ショップダイソーで購入した「ポップホルダー」を使って、方向を自在に変えることができる台座(フリーアングルジョイント)を作ることにしました。
製品にはホルダが3個入っているのですがその内2個を使って1個の台座を作成しました。
紙を挟む部分はノコギリでカットしジョイント部だけを使いました。

このフリーアングルジョイントはDIYで何かと使えそうです。

Photo_2


DELL Inspion 530s ファインの音が大きい

最近、DELL Inspion 530s(購入時XP、今はWindows7)のファンの音がやたらと大きくなってきたので対策しました。

ケースを開けて、音の発信源を耳で確かめると、CPUファンから出ていることが分かりました。
壊れて発生するような音ではなく、高速回転による風切り音です。

シャットダウンして電源を抜きファンの羽の隙間からヒートシンク部を見ると埃がたまり風通しが悪くなっているのが分かりました。そこで爪で固定されているファンをマイナスドライバを使って外しました。埃を掃除機で吸い取り、ファンを元に戻しました。

Photo
これで直ったと思ったのですが、暫く使っているとまたファンの音が大きくなってきました。音はやはりCPUファンから出ています。タスクマネージャーでCPU稼働率を見ても大して仕事していません。

そこで HWiNFO32 という無料のハードウェハ情報調査プログラムで状況を調べました。
結果、音がすると同時にやはりCPUファンが高速回転していることがわかりました。
問題の温度ですが、
CPUは低温で、高温になっているのはIT8718Fというチップでした。このチップはI/O関係の制御をしており、スペックシートによると20x14mm、128ピンです。このチップがマザーボードの何処にあるか分かりませんが、CPU横のヒートシンクがえらく熱くなっているので、このヒートシンクの下に IT8718 があると思います。(裏から見たり、ヒートシンクを取ってみれば良いのですが面倒なのでやっていません)

ネットで検索しているとBIOSバージョンアップで音が出なくなったとの記載を見つけたのですが、私のBIOSは既に最新のものでした。

多分、ヒートシンクを剥がし、シリコンオイルを塗りなおせば直ると思うのですが面倒なので、涼しくなるまで、ケースのフタを外したまま使うことにします。これでファン高速回転頻度は大分減りました。

来年また暑くなるまでには、mac mini or iMac に乗り換えようと思います。

■Ref.
 ・ハードウェハモニタソフト 
HWiNFO32
 ・ファン回転速度変更ソフト
SpeedFan   (私のPCでは機能しませんでしたが参考までにリンク張ります)
 ・
最新BIOS入手 @ DELL
 ・
DELL Inspiron 530s 冷却FAN ずっとブーンブーンと鳴りっぱなしの状態で困っています@教えて!goo
 ・
inspiron Desktop @ wiki
 ・マザーボード G33仕様 @ FOXCONN
 ・
I/Oチップ IT8718F仕様 @ IET

EXCEL VBA: 複数の画像ファイルをセルの高さに合わせて読込み

複数の画像ファイルをエクセルにマニュアルで取り込むのはとても面倒です。
セルの高さに合わせて画像を取り込むマクロを作成しました。

簡単なプログラムなので少し手を加えれば、色々便利なものが作れると思います。

Excel_4

Sub 写真読込み()
    Dim NameList As Variant                                                
'  画像ファイル名の配列
    Set FSO = CreateObject("Scripting.FileSystemObject")       
'   ファイル名の処理で使用
    Dim i As Long
       
    NameList = Application.GetOpenFilename("
jpg,*.jpg , bmp, *.bmp", MultiSelect:=True)
    Application.ScreenUpdating = False
    Call mySort(NameList)                                                    ' 必要に応じて表示順ソート
    For Each Name In NameList
        Set myShape =
ActiveSheet.Shapes.AddPicture(Filename:=Name, _
          LinkToFile:=False, SaveWithDocument:=True, _
          Left:=Selection.Left, Top:=Selection.Top, Width:=0, Height:=0)

        With myShape
            .ScaleHeight 1, msoTrue
            .ScaleWidth 1, msoTrue
            .LockAspectRatio = msoTrue

            .Height = ActiveCell.Height - 5                                 ' 画像高さ = セルの高さ
        End With
   
        ActiveCell.Offset(0, 1) = "'" & FSO.GetBaseName(Name)
' ファイル名書込み
        ActiveCell.Offset(1, 0).Activate                
                   ' 次に移動
   
     Application.StatusBar = "処理中 (" & i & ") ■" & String(Int(i / 10) Mod 20, "■")
        i = i + 1

    Next

    Application.StatusBar = False
    Application.ScreenUpdating = True
    Set FSO = Nothing                                                      ' 解放
    MsgBox "終了しました (" & UBound(NameList) & "枚)", vbInformation

End Sub

Sub mySort(ByRef data As Variant)                                     ' ソート
    For i = LBound(data) To UBound(data) - 1
        For j = i + 1 To UBound(data)
            If data(i) > data(j) Then
                temp = data(i)
                data(i) = data(j)
                data(j) = temp
            End If
        Next j
    Next i
End Sub

■Ref.
 ・
Shapes.AddPicture メソッド @ MSDN
 ・
Shape メソッド         @ MSDN

EXCEL VBA:シートを使わないプログラム

EXCEL VBA で Sheet を使わないでソートしたいことがあったのですが、結構解決方法を見つけるのに時間が掛かりました。
以下、EXCEL VBAにも拘らずあえて”シートを使わないプログラムサンプル”と共にメモしておきます。

配列の基本的使い方
Sub Test1()
   Dim a(2) As String
    a(0) = "A"
    a(1) = "B"
    a(2) = "C"
   
   
For Each x In a
          Debug.Print x

    Next
End Sub

.

.NET の ArrayList を使ってソート   ( ,NETのObjectが使えるのが凄い )

Sub Test2()
   
Dim a(3) As String
    a(0) = "Z"
    a(1) = "A"
    a(2) = "B"
    a(3) = "C"
   
   
Set ArrayList = CreateObject("System.Collections.ArrayList") '.NET Frameworkへの参照
    For Each x In a
       
ArrayList.Add x
    Next

 ArrayList.Sort       ' List をソートする
'   
ArrayList.Reverse ' List を逆順にする

    For Each x In ArrayList
          Debug.Print x
    Next
End Sub

備考:
 普通EXCEL VBAでソートするならEXCELの機能を使ってソートすると思います。
 例えば以下に記載されている方法です。
  ・よねさんのWordとExcelの小部屋 > 並べ替え(Sortメソッド)

.

フォルダ内のファイル一覧を出力

Sub Test3()
    Set FS = CreateObject("Scripting.FileSystemObject")

 For Each x In FS.GetFolder("c:\temp").Files  ' 所望するフォルダに書き変えて下さい
        Debug.Print x.Path, x.Name, FS.GetExtensionName(x), x.Type

    Next
End Sub

.

フォルダ内の指定拡張子を持つファイル一覧を出力

Sub Test4()
    Set ArrayList = CreateObject("System.Collections.ArrayList")   '.NET Frameworkへの参照

 Name = Dir("c:\temp\*.xls", vbNormal)  ' 所望するフォルダに変更して下さい
    Do While Name <> ""
        ArrayList.Add Name
        Name = Dir()
    Loop
   
    For Each x In ArrayList
        Debug.Print x
    Next
End Sub

.

BOOK内のシート名一覧表示

Sub Test5()
     Debug.Print "このBOOKのファイル名",
ThisWorkbook.Name
     Debug.Print "このBOOKのシート数"   ,
ThisWorkbook.Sheets.Count

 For Each x In Sheets
          Debug.Print x.Name
   
Next
End Sub

.

EXCELウィンド下部のステータスバーに進捗を表示 & sleep サンプル

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Test9()
    For i = 0 To 100
          Sleep 100
         
Application.StatusBar = "処理中 (" & i & ") ■" & String(Int(i / 10) Mod 5, "■")
    Next

    Application.StatusBar = False
End Sub

■Ref.
 ・よねさんのWordとExcelの小部屋 >
Excel(エクセル)VBA入門:目次

2012年9月16日 (日)

iPad: 100均保護フィルムですべり止め

私はiPadをケースに入れず裸で使っているのですが、裏面がアルミ無垢ですべすべな上に重さが652gあるため、何時も落としそうで困っていました。
そこで100円ショップ(ダイソー)で液晶保護シートと3Mスコッチテープを購入して滑り止め加工をしました。
 (スコッチテープ:セロテープと違い年月を経てもボロボロになり難い) 

Ipad_2

手順は、
 1.保護シートカット
   本来表面に貼る保護シートを裏面に貼ります。このシートが滑り止めの役割をします。
   保護シートの粘着力だけでは直ぐ剥がれてしまうので、外周をスコッチテープで覆うのですが、
   iPadを持った時テープが違和感ないようにするには、テープをiPadのエッジに沿って貼る必要
   があります。保護シートはそのことを考えてカットします。

 2.iPad裏面洗浄 (不安な人はやらない方が良いです)
   マイク、スピーカー、イヤホンジャック、スイッチなど水が入りそうな部分にスコッチテープを張ります。
   中性洗剤を少し含ませた布で、保護シートを貼る裏面を拭きます。その後水で濡らしたキッチン
   ペーパーで洗剤を取り除きます。乾燥するまで待ちます。

 3.シート張り付け
  何回も貼りなおせるので、空気が入らないよう慎重に貼り付けます。
  そのままでは、直ぐ剥がれてしまうので、外周をスコッチテープで留めます。

以上で加工で結構滑らなくなります。

■Ref.
 iPad記事の目次は
ここです。

■このような物も市販されています.


keyword:落下防止

iPad: テレビを見る

サブで使っている小型のテレビが壊れました。壊れたのは下図の画面右上の丸く見える部分で、液晶が壊れ表示されません。家電製品が壊れたのは久しぶりです。(メーカーのダイナコネクティブは倒産しているようです)
Tv

家電量販店で小型テレビを探すと結構安いものがあります。しかし色々場所を変えて見るような使い方をする場合、「電源」と「アンテナコード」が邪魔です。

そこでこの際iPadでテレビが見えるようにしようと思い調べていたら以下の候補が見つかりました。外で見ることは考えていないので、携帯性は良いが画面が粗いワンセグは除外しました。
I-O DATA
WN-G300TVGRはiPad,iPhone以外にwindows PCでもテレビが見られるようです。
一方SoftBank
SB-TV03はテレビが見れるのはiPad,iPhoneだけですが、ハードディスク接続すると録画もできるようです。
私が選ぶポイントは、iPadでテレビが見れて、チャンネル切り替えが早く、番組表が使いやすいものです。

  家の外でもネット経由
でテレビが見られる

VULKANOというもの
もありますが、あまり
評判が良くないよう
です。

私はI-O DATA社製のWN-G300TVGRを購入しました。
地デジ画像が綺麗です。台所の壁掛けテレビとして使っています。

■Ref.
 ・
地デジチューナー内蔵無線LANルータ Wi-Fi TV(WN-G300TVGR)@みつみんさん「こ、これは…」
 ・
第576回:ソフトバンク謹製iPad/iPhone用チューナ再び@小寺信良さんの記事
 ・iPad記事の目次は
ここです。

iPad: iPadの位置を追跡

iOS5を搭載したiPadではiPadの位置をリアルタイムで追跡できます。

iPhoneを探す」の概要」@アップル

思いつく使用目的としては
 ・盗まれたiPadを追跡           
 ・盗まれたiPadが入ったカバンを追跡
 ・iPadを追跡したい人の車にしのばせる
 ・iPadを持たせた人を、送り込む
ただし、「iPadを探す」を「オフ」にされたり、スリープモードに入ると追跡不可になります。

この目的には、iPodToutchやiPhoneの方が向いていると思います。

話はiPadからそれますがリアルタイムでなくて良いなら、登山や写真撮影場所記録に使うGPSロガーというものがあります。

■Ref.
 iPad記事の目次は
ここです。

iPad: iCloud

アップルの iCloud はまだ開発途上でとろいですが良く出来ていて面白いです。

ネットワーク上の共有フォルダにファイルを保存し、それを共有するというのとは訳が違います。
例えばある iPad の「メモ」アプリに文字を打ち込むと、数秒~数十秒後に他のiPad,iPod,Macのメモアプリにも、入力した文字が現れます。ブラウザのブックマークも複数のアップルPC間で同一性を保つことができます。
さらに、一部はマイクロソフトWindowsでも機能します。

iCloudを最大限に活用するために、あなたのiPad、iPhone、iPod touch、Mac、WindowsパソコンでiCloudを設定しておきましょう」@アップル

Icloud
■フォトストリーム フォトストリームとは」@アップル
小量の写真やデータなら、WindowsパソコンからiCloud経由でiPadに送ることができます。
大量の写真の転送はできないというわけではなく、時間がかかるので、PCとiPadをケーブルで繋ぎiTune経由でデータ転送する方が早いです。
2012/9現在 Windows7+iCloudの組み合わせだと、iCloudから画像は受け取れますが、出力が上手く行きません。iCloudのアンインストール -->インストールで一時的に送信できます。
MacBookAir(Mountain Lion)+iPhotoだと受信・送信上手く行きます。

■Ref.
 iPad記事の目次は
ここです。

iPad: 無料でテレビ電話

iPadはカメラ内蔵なのでテレビ電話できます。もちろん音声だけの通話も可能です。

・FaceTime
 有名なのは付属ソフトの「FaceTime」。これはiPad, iPod, mac 間で無料通話できます。

Skyp
 Skypも有名でSkyp搭載PC間で無料通話できます。お金を払えば携帯や固定電話にも安価に電話できます。支払い用のプリペイドカードはコンビニでも販売しています。

・Line
 Lineも有名ですが、LineはiPad内のアドレス帳データを使う(&流出する)のがデフォルトなのであまりお勧めできません。使うならよく理解してからインストールした方が良いです。
「LINE 情報流出」で検索すると色々出てきます。

http://togetter.com/li/247754
http://appllio.com/android-tool-explanation/20111229-1115-line-howto

■Skypを使ってみて分かったこと
FaceTimeよりSkypの方が画像が綺麗でした。ただし綺麗なのは休日です。平日はビジネスで使う人が多いため、画質が落ちる(落とす)のだと思います。画質調整はアプリ上からできないと思います。
またiPadのSkypアプリからでは一部設定できない項目があります。その場合はWindowsのSkypアプリから設定すると良いです。設定結果はiPadのSkypにも反映されます。

■Ref.
 iPad記事の目次はここです。

iPad: 画面キャプチャ

下図の方法で、iPadで表示されている画面を画像としてファイルに保存できます。

Ipad
■Ref.
 iPad記事の目次は
ここです。

keyword:画面ハードコピー、スクリーンプリント、画面キャプチャ、プリント スクリーン

iPad: スピーカー

iPadのスピーカーは小さい上に裏側に付いているので、音はしょぼいです。

第3世代は Bluetooth4 を搭載しているため、音を無線で飛ばし、離れた場所にある高音質なスピーカーから出力できます。最近は Bluetooth 搭載スピーカーも安くなっており選り取り見取りです。

以下にアップル、ロジクール及びCrietive 製品をリストアップしました。もしお気に入りの商品があれば、iPadと繋がることをカスタマレビューやメーカーサイトで確認の上購入してみてはいかがでしょうか。

私はApple TVを購入しました。音はテレビのスピーカーやホームシアターシステムから出力しています。
(AppleTVの出力端子はHDMIと光オーディオです。アナログ音声出力端子はありません。)


AirPlay対応スピーカーで検索しても沢山のスピーカーが出てきます。ご参考まで。

■Ref.
iPad記事の目次は
ここです。

iPad: Wi-Fi を屋外で使う

「新しいiPad」 Wi-Fiモデルをアップル又はソフトバンクで購入すると2年間ソフトバンク系のWi-Fiポイントが無料で使用できるようです。
 
iPad Wi-Fiモデルで「ソフトバンクWi-Fiスポット」を利用できますか? @ SoftBank

それとは別にコンビニ ローソンの店舗内or駐車場で「LAWSON Wi-Fi」が無料で使えます。ただし、会員登録が必要で、登録するとメールがいっぱい来ます。

最近では、モバイルWi-Fiも高速且つ安くなっているので、自宅のADSL、光り回線を解約してモバイルに切り替えるのも一案だと思います。
 ・1日単位(600円)で契約できるモバイルWi-Fi(UQ 1Day)
   プロバイダ不要だが機器購入に初期費用15000円程度必要
 ・
お試し無料レンタル Try WiMAX
   都会では接続が不安定だと聞いたこともあります。試用してみた方が良いと思います。
 ・
Wi-Fiルーター比較ナビ

■Ref.
iPad記事の目次は
ここです。

iPad: タッチパネル操作方法 (マルチタスク用ジェスチャ)

新しいiPad (iOS5) のタッチパネル操作としては、「タッチ」「ダブルタッチ」「ピンチ」などが有名で、それらで殆どの操作はできますが、他にも便利な操作方法が沢山あります。

キーボードのショートカット操作を覚えれば作業が快適になるのと同様に、iPadの各種操作は覚えて損はないです。以下のリンクを参考にぜひ少しずつでも操作を覚えて下さい。

 ・iPadユーザーガイド 16ページ
 ・
全てのiPadユーザー必見!マルチタスク用ジェスチャの設定で超快適 @ NORI510.com
 ・
正直知らんかった!iPad safariの戻る/進むボタン,新規タブボタンの長押しで履歴や最近閉じたタブを表示できるなんて @ NORI510.com

■Ref.
 ・iPad記事の目次はここです。

iPad: 画面をまたぐアイコン移動方法

新しいiPad(iOS5)購入し、画面をカスタマイズしていく中で「アイコンを別の画面に移動」する方法にてこずったのでメモしておきます。

解決方法は簡単でした。
 1.アイコンをアイコンが振動し始めるまでタッチする
 2.アイコンを画面の右端まで移動する。 
タッチしたまま数秒待つ。
 3.次の画面に切り換わるので、必要な位置でアイコンから指を離す
 4.「ホームボタン」を押してアイコン振動を止める

■Ref.
 ・
iPadマニュアルの25ページ

 ・iPad記事の目次はここです。

iPad: バッテリの耐用年数を長くする使い方

iPadは薄いボディーに沢山の部品を詰め込んでおり、故障しても自分で分解修理することは不可能だと思います。
可動部分が殆どなく、大部分が半導体でできたiPadにおいて、一番初めに壊れるのは多分電池だと思います。

iPad の電池は容量が大きく充電可能なリチウムポリマー電池です。アップルのサイトにはバッテリーの耐用年数を最大限に伸ばす方法が記載されています。

詳細はホームページを読んでもらうとして、概要は以下の様なものです。
 ・少し配慮をするだけで、iPadのバッテリー耐用年数を最大限に引き延ばすことがでる
 ・バッテリー性能にダメージを与える最大の敵は、高温
 ・iPadを直射日光の下や高温になる車の中に放置しないこと
 ・バッテリー内の電子を時々動かすことが重要。毎月最低でも1回は充電/放電サイクルを完了する(完全に充電した後、バッテリーを使い切る)

■Ref.
 ・
iPodバッテリーについて
 ・リチウムイオンバッテリー

 ・iPad記事の目次はここです。

2012年9月15日 (土)

iPad: Gmail設定するときあえてExchangeを使用

■追記(2012/12/15)
以下記載内容は2013年1月30日以降使えなくなるようです。
米グーグル、GmailなどでExchangeのサポートを終了 by ガジェット速報
 

 


「新しいiPad (第3世代、Retinaディスプレイ)」 iOS5 の「メール」アプリでは複数のメールアカウントが設定できてとても便利だと思います。以下Gmailアカウント設定の裏技を書きます。

Gmailのアカウントを設定する時あえてGmailでなくExchangeにすると、リアルタイムで着信できるようになります。

Ipad

ただし、
 ・近日中に無料でリリースされるiOS6で、上記裏技は不要になるかもしれません
 ・Exchange設定にするとiPad「メール」アプリ上でフォルダ(タグ)作成はできません。
  サファリなどでGmailにログインして作成する必要があります。

詳細はTeachMe iPhoneに記載あります。
 ・TeachMe iPhone > 基本アプリの使い方 > 
Gmailを設定する

■Ref.
 iPad記事の目次はここです。

iPad :位置情報設定に注意

「新しいiPad (第3世代、Retinaディスプレイ)」 iOS5 の位置情報設定に注意して下さい。

Wi-FiタイプにはGPSが入っていませんが、Wi-Fiでかなり正確な位置を検出できます。
その正確さは「地図」アプリで表示される自分(iPad)の位置から分かります。
(CellularモデルにはGPSが入っています。たしかアメリカの携帯はGPS搭載が法律で定められています)

例えば、iPadのカメラで撮影した写真に位置情報を付加することができます。
この機能は旅先で写真を撮った場合などはとても便利です。
しかし自宅内で写真を取り、その写真をネットにアップすると自宅の場所が公開されてしまいます。

それを防ぐには、
 ・写真に撮影場所情報(ジオタグ)が付加されない設定にする
 ・写真を公開する前に、その写真に場所情報が入っていないことを確認する

■iPadカメラ撮影写真に位置情報を入れない設定方法
 ・「位置情報サービス」または「カメラ」のスイッチを「オフ」にして下さい(下図)

Photo

■写真に位置情報が入っていないことを確認する方法
 ①iPadの場合
  iPhoto(有料)をインストール。iPhotoを立上げ写真を選択。右上の「i」をタッチすれば写真に含まれる情報が表示されます。
 ②Windows 7の場合
  写真をマウス右ボタンでクリック > プロパティ > 詳細 で写真の情報を見ることができます。「GPS 緯度 xxxx、経度 xxxx」とあればそれが位置情報です。

Windows
■Ref.
 iPad記事の目次はここです。

iPad: マニュアル

「新しいiPad (第3世代、Retinaディスプレイ)」購入時に付いてくるマニュアルはえらくページ数が少ないです。

無料のマニュアルは以下にあります。
 ・アップルサポート
  アップル > サポート > 
マニュアル > iPadユーザーズガイド (iOS5.1)

 ・iBook(iPad内)
   英語版です。現在はiOS5のマニュアルですが、多分 iOS6 がリリースされたら直ぐマニュアルがアップされるのではないかと思います。
   「iPad User Guide」で検索すれば出てくると思います。(無償です)
   iPadで本を読む練習には良いかもしれませんが、見ながら操作はできません・・・・

Ibook_ipod_manual

もちろん本屋に行けば本もあります。一応リンクを張っておきますが、本屋さんで実際に中を見た方が良いです。

■Ref.
 iPad記事の目次はここです。

iPad: 目次

数ケ月前の話ですが、Retinaディスプレイ搭載の「新しいiPad」を購入しました。

携帯電話の機種変更をした際に家電量販店からもらったクーポン券(2台で7万円)で購入しました。なのでアップルやソフトバンクで購入すれば付いてくる「SoftBank Wi-Fi スポット2年間無料」特典がありません。アップル製品は何処で買っても価格差が少ないので、モバイルWi-Fi ルータを持っていない方はアップルかソフトバンクで購入した方が良いと思います。

最近は殆ど聞きませんが、発売初期はWi-Fiの感度が極端に悪いなどの記事がありました。私が購入した2台のiPadのWi-Fi は何の問題もありません。近々日本でも発売されるアマゾン Kindle fire HDはWi-Fiアンテナを2台内蔵していて高速だと宣伝していますが、私はiPadでネット上のHD動画を見ている限り Wi-Fiが遅いと感じたことはありません。

ただし音は小さなスピーカーが裏面に付いているだけなので最低です。外部スピーカーを繋いだ方が良いです。 Kindle fire HDはスピーカーが4個付いているようですが、後ろ向きは変わらないので余り期待していません。

■この記事の対象とする「新しいiPad」の仕様
 ・モデル     : MD328J (第3世代、2012/3発売)
 ・ディスプレイ : Retina 2048×1536ドット
 ・ワイヤレス  : Wi-Fi 、Bluetooth 4.0

 ・OS       :iOS 5   (iOS 6へは無料でアップデート出来るようです)
 ・容量      : 16GB      (悩みましたが、それほど使うあてがないので安い16GB)
 ・色        : 白    

■目次
 ・マニュアル            : 付属している説明書はえらく少ないです。警告文はえらく長いです
 ・バッテリ寿命          : バッテリ耐用年数を延ばす使い方
 ・位置情報には注意       : iPadで撮影した画像には位置情報が入る場合があります
 ・メール設定方法         : Gmailの着信をリアルタイムにする方法
 ・アイコンの移動         : 画面をまたぐ移動方法
 ・マルチタスクジェスチャ    : これは知っておいた方が良いです
 ・滑り止め             : 裸のiPadは滑ります。落としそうです
 ・屋外でWi-Fi接続        : 無料アクセスポイント:コンビニLAWSON Wi-Fi Ponta
 ・無料でテレビ電話       : Skyp設定
 ・iPadでテレビを見る
 ・壁掛けテレビ
 ・                  : 音はしょぼいです。スピーカ購入した方が良いです
 ・iCloud使用方法           : Mac PC は勿論 Windows7とも可能
 ・自分の iPad 位置位置を追跡
 ・画面ハードコピー         : スクリーンプリント、キャプチャ

 ・画像の削除方法         

 ・iPad接続に使用している無線ルーターの設定

2012年7月17日 (火)

C# : LINQ (Enumerable メソッドサンプル一覧)

<目次はここです>

C#を勉強した結果、要素の集まり(Collection)に対する処理としてLINQ式が便利なのが分かりました。
使い方のサンプルコード一覧を作りました。

サンプルコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace gomi {
    class Program {
        static void Main(string[] args) {
            {

                Console.WriteLine("\n------------------------->  {0}", "要素列挙(基本)");
                int[] a = { 1, 2, 3, 4 };
                Console.WriteLine("要素数={0}", a.Count());
                foreach (int s in a) Console.Write(s + ", ");
            }
            {

                Console.WriteLine("\n------------------------->  {0}", "ソート OrderBy");
                int[] a = { 1, 4, 3, 2 };
                var c = a
.OrderBy(x => x);
                foreach (int s in c) Console.Write(s + ", ");
            }
            {

                Console.WriteLine("\n------------------------->  {0}", "ソート (逆順) OrderByDescending");
                int[] a = { 1, 4, 3, 2 };
                var c = a.
OrderByDescending(x => x);
                foreach (int s in c) Console.Write(s + ", ");
            }
            {
               Console.WriteLine("\n------------------------->  {0}", "抽出 where");
                int[] a = { 1, 2, 3, 4 };
                Console.WriteLine("要素数={0}", a.
Count(x => 0 == x % 2));
                var c = a.
Where(x => 0 == x % 2);
                foreach (int s in c) Console.Write(s + ", ");
            }
            {

                Console.WriteLine("\n------------------------->  {0}", "一意(重複不可)Distinct");
                int[] a = { 1,
2, 2, 3 };
                var c = a.
Distinct();
                foreach (int s in c) Console.Write(s + ", ");

            }
            {

                Console.WriteLine("\n------------------------->  {0}", "連結 Concat ");
                int[] a = { 1, 2,
3 };
                int[] b = {
3, 4, 5 };
                var c = a.
Concat(b);
                foreach (int s in c) Console.Write(s + ", ");
            }
            {

                Console.WriteLine("\n------------------------->  {0}", "連結 Union (一意の要素だけを返す)");
                int[] a = { 1, 2,
3 };
                int[] b = {
3, 4, 5 };
                var c = a.
Union(b);
                foreach (int s in c) Console.Write(s + ", ");
            }
            {

                Console.WriteLine("\n------------------------->  {0}", "要素を含んでいるか Contains");
                int[] a = { 1, 2, 3, 4 };
                Console.WriteLine("指定( 2)要素含む? {0}", a.
Contains(2));
                Console.WriteLine("指定(10)要素含む? {0}", a.
Contains(10));
            }
            {

                Console.WriteLine("\n------------------------->  {0}", "差集合(XX以外) Except");
                int[] a = { 1, 2,
3 };
                int[] b = {
3, 4, 5 };
                var c = a.
Except(b);
                foreach (int s in c) Console.Write(s + ", ");
            }
            {

                Console.WriteLine("\n------------------------->  {0}", "全ての要素が条件を満たしているか All");
                int[] a = { 1, 2, 3, 4 };
                Console.WriteLine("全ての要素は0より大きい? {0}", a.
All(x => 0 < x));
            }
            {

                Console.WriteLine("\n------------------------->  {0}", "平均 Average");
                int[] a = { 1, 2, 3, 4 };
                Console.WriteLine("平均={0}", a.
Average());
            }
            {

                Console.WriteLine("\n------------------------->  {0}", "指定keywordで2つの集合の要素を連結 join");
                List<商品> a = new List<商品> { new 商品 { ID = 1, Name = "鉛筆" }, new 商品 { ID = 2, Name = "ボールペン" } };
                List<金額> b = new List<金額> { new 金額 { ID = 1, Price = 100 }, new 金額 { ID = 2, Price = 200 } };
                var c = a.
Join(b, 商品 => 商品.ID, 金額 => 金額.ID, (商品, 金額) => new { ID = 商品.ID, Name = 商品.Name, Price = 金額.Price });
                foreach (var obj in c) Console.Write(obj.ID + ": " + obj.Name + ", " + obj.Price + "\n");
            }

            Console.Write("\n KEY入力で終了します:");
            Console.ReadKey();

        }

        class 商品 {
            public int ID { get; set; }
            public string Name { get; set; }
        }

        class 金額 {
            public int ID { get; set; }
            public int Price { get; set; }
        }

    }
}

 

実行結果

------------------------->  要素列挙(基本)
要素数=4
1, 2, 3, 4,

------------------------->  ソート OrderBy
1, 2, 3, 4,

------------------------->  ソート (逆順) OrderByDescending
4, 3, 2, 1,

------------------------->  抽出 where
要素数=2
2, 4,

------------------------->  一意(重複不可)Distinct
1, 2, 3,

------------------------->  連結 Concat
1, 2, 3, 3, 4, 5,

------------------------->  連結 Union (一意の要素だけを返す)
1, 2, 3, 4, 5,

------------------------->  要素を含んでいるか Contains
指定( 2)要素含む? True
指定(10)要素含む? False

------------------------->  差集合(XX以外) Except
1, 2,

------------------------->  全ての要素が条件を満たしているか All
全ての要素は0より大きい? True

 ------------------------->  平均 Average
平均=2.5

 ------------------------->  指定keywordで2つの集合の要素を連結 join
1: 鉛筆, 100
2: ボールペン, 200
 

KEY入力で終了します:

■Ref.
 ・
Enumerable メソッド                               msdn
 ・
LINQ クエリ式 (C# プログラミング ガイド)  msdn
 ・
C# 4がやってきた 川俣 晶さんの記事
   
@IT総合トップ > @IT CORE > Insider.NET > C# 4入門 > 第1回 dynamic型

2012年7月16日 (月)

C# : File Viewer を作ってみました <目次>

■作成に至る経緯
 最近多数のEXCELファイルを見る必要に迫られるました。
しかし2007以降のエクセルはウィンド上部に大きなリボンメニューがあるため、ファイルを表示する面積は小さいです。さらに多数のファイルを見るとなると、見たいファイルをメニューから選択するのも面倒です。
(後で知ったのですがリボンは非表示に出来るようです)

■言語としてC#を選んだ理由
 そこでファイル閲覧ソフト(FileViewer)を作ることにしました。最大の問題はExcelファイルの表示です。エクセルファイルの内部構造を解析し表示するなんていうことはとても出来ません。そこでマイクロソフトの C# で表示出来るか調べたところ、WebBrowser コンポーネントで表示できることが分かりました。

C#の勉強からアプリ作成までの過程をブログに書いてきました。やっと下図に示すようなそれなりの物ができました。
まとめとして今まで書いた記事への目次を、このページを書きました。

Fileviewer20120716_4

■目次
 1. Microsoft Visual C# Express
   これは無料のコンパイラです。ここからダウンロード出来ます。
 2. Frame 内にExcel 表示 & Excel 起動
   C# を使えば WebBrowserコンポーネントでエクセルを表示出来ることが分かりました。
   ただしコンポーネント内に表示させるにはWindowsの設定が必要です。
 3. リンク集 <自分用メモ> 、 ファイル関連のリンク集
   C# の学習を始めました。javaと比較すると文法にまとまりがないように感じました。
   ただクエリ式とかラムダ式などは実用性抜群だと思います。
 4.java、C# : メソッド呼出し、通信
   最初は大部分を使い慣れているjavaで作り、エクセル表示部だけをC#で作ろうと思いましたが、
   javaとC#の連携の方が面倒くさそうだったので結局連携は諦めました。
 5.File Viewer 作成してみました
   Visual C# の操作方法やUIの配置方法を学びました。
 6.ListBox を使った Drop、Collection、Filter の演習
   最初は画面にファイルドロップという単純なUIを考えていたのですが、欲が出てファイル選択ListBox
   を付加することにしました。ListBoxの使い方を学びました。
 7.ListBox の表示文字、色。 コレクションのソート、クエリ
   ListBox学習その2。 表示を分かり易くする方法を学びました。
 8.ListBox を使って「メニュー」サンプルコード作成
   ListBox学習その3。ListBox内のアイテムを削除するメニューを追加しました。

 9.LINQ (Enumerable メソッドサンプル一覧)
   LINQ式が便利だと分かったので、サンプルコード一覧を作成しました。

■備考
 ・OS設定が必要です
  WebBrowser コンポーネント(本ソフト)内にEXCELファイルを表示するためにはWindowsの設定が必要です。ここを参照して下さい。

2012年7月15日 (日)

C# : ListBox を使って「メニュー」サンプルコード作成

<目次はここです>

今回は「マウス右ボタン」で表示される「ショートカットメニュー」を作成しました。
メニューには「ContextMenuという古いタイプ」と「ContextMenuStripという新しいタイプ」があるようです。以下のサンプルプログラムでは「 bOldType」の値で新旧メニューを切り替えることができます。
Listbox20120715
■機能
 ・選択された1項目をListBoxから削除
 ・ListBox内の全項目を削除

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

namespace Test20120715 {
    public partial class Form1 : Form {

        private dynamic mItemDelete;
        private dynamic mItemDeleteAll;

        public Form1() {
            InitializeComponent();
            listBox1.Items.AddRange(createDummyData());
            Boolean
bOldType = true;
            if (bOldType) {
                listBox1.ContextMenu = createContextMenu();             
  // 旧メニュー
            } else {
                listBox1.ContextMenuStrip = createContextMenuStrip(); 
// 新メニュー
            }
        }

        /// ダミーデータ
        private dynamic createDummyData() {
            string[] ret = { "AA", "BB", "CC" };
            return ret;
            //    var p = Directory.GetFiles(@"C:\bin").Select((n) => Path.GetFileName(n));
            //   return p.ToArray();
        }

        /// ListBox 内のアイテムが選択された時に実行
        private void listBox1_
SelectedIndexChanged(object sender, EventArgs e) {
            Boolean b = (0 < listBox1.SelectedItems.Count);
            if (b) {
                Console.WriteLine(listBox1.SelectedItem.ToString());
            }
            mItemDelete.Visible = mItemDelete.Enabled = b;
            mItemDeleteAll.Visible = mItemDeleteAll.Enabled = 0 < listBox1.Items.Count;
        }

        /// 古タイプのメニュー
        private ContextMenu createContextMenu() {

            ContextMenu menu = new ContextMenu();
            MenuItem itemDelete = new MenuItem("選択中のアイテムを削除", new System.EventHandler(this.itemDelete_Click));
            MenuItem itemDeleteAll = new MenuItem("全てのアイテムを削除", new System.EventHandler(this.itemDeleteAll_Click));
            menu.MenuItems.Add(itemDelete);
            menu.MenuItems.Add(itemDeleteAll);
            mItemDelete = itemDelete;
            mItemDeleteAll = itemDeleteAll;
            mItemDelete.Visible = mItemDeleteAll.Visible = false;

            return menu;
        }

        /// 新タイプのメニュー
        private ContextMenuStrip createContextMenuStrip() {

            ContextMenuStrip menu = new ContextMenuStrip();
            ToolStripButton itemDelete = new ToolStripButton("選択中のアイテムを削除");
            ToolStripButton itemDeleteAll = new ToolStripButton("全てのアイテムを削除");
            menu.ShowImageMargin = false;
            menu.Items.Add(itemDelete);
            menu.Items.Add(itemDeleteAll);
            itemDelete.Click += new System.EventHandler(this.itemDelete_Click);
            itemDeleteAll.Click += new System.EventHandler(this.itemDeleteAll_Click);
            mItemDelete = itemDelete;
            mItemDeleteAll = itemDeleteAll;
            mItemDelete.Visible = mItemDeleteAll.Visible = false;

            return menu;
        }

        /// メニューで1項目削除が選択された時のアクション
        private void
itemDelete_Click(object sender, EventArgs e) {
            if (sender is MenuItem || sender is ToolStripButton) {
               
listBox1.Items.Remove(listBox1.SelectedItem);
            } else {
                Debug.Assert(false, "Error:" + sender);
            }
        }

        /// メニューで全項目削除が選択された時のアクション
        private void
itemDeleteAll_Click(object sender, EventArgs e) {
            if (sender is MenuItem || sender is ToolStripButton) {
            
    listBox1.Items.Clear();
                mItemDelete.Visible = mItemDeleteAll.Visible = false;

            } else {
                Debug.Assert(false, "Error:" + sender);
            }
        }
    }
}

■Ref.
 ・
ContextMenuStrip クラス msdn
 ・
ContextMenu       クラス  msdn

2012年7月14日 (土)

C# : ListBox の 表示文字、色。コレクションのソート、クエリ。

<目次はここです>

前回に引き続いてListBoxを使ったサンプルプログラムを作成しました。
Listbox20120714b_2

■演習内容
 ①java の ListCellRenderer に相当する処理
  ・ListBox に表示される文字を指定。 (例:ファイル名を表示)
  ・ファイル拡張子によって表示色を変更
  ・選択された時の背景色を設定

 ②コレクション
  ・ジェネリック
  ・ソート

 ③クエリ
  ・foreach(<T> x in collection){} の代わりにクエリ使用

 ④特殊フォルダ名取得
  ・MyDocuments      :
System.Environment.GetFolderPath(Environment.SpecialFolder.Personal);
  ・Currentフォルダ     :
Environment.CurrentDirectory
  ・フォフダ内のファイル一覧取得 :
Directory.GetFiles( @"C:\1_temp" )

Form1.Designer.cs

namespace Test20120714 {
    partial class Form1 {
        /// <summary>
        /// 必要なデザイナー変数です。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        /// <param name="disposing">マネージ リソースが破棄される場合 true、破棄されない場合は false です。</param>
        protected override void Dispose(bool disposing) {
            if (disposing && (components != null)) {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows フォーム デザイナーで生成されたコード

        /// <summary>
        /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディターで変更しないでください。
        /// </summary>
        private void InitializeComponent() {
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            //
            // listBox1
            //
            this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));

            this.listBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
            this.listBox1.FormattingEnabled = true;
            this.listBox1.ItemHeight = 12;
            this.listBox1.Location = new System.Drawing.Point(12, 19);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(309, 148);
            this.listBox1.TabIndex = 0;

            this.listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(342, 197);
            this.Controls.Add(this.listBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }
        #endregion
        private System.Windows.Forms.ListBox listBox1;
    }
}

 

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;

namespace Test20120714 {
    public partial class Form1 : Form {

        public Form1() {
            InitializeComponent();
            setDummyData();
        }

        /// ダミーデータ追加
        private void setDummyData() {
            List<MyFile> list =
new List<MyFile>(); // Collection に Generics 使用
            listBox1.BeginUpdate();
            
foreach (string file in Directory.GetFiles(Environment.CurrentDirectory)) {
                list.Add(new MyFile(file));
            }
            
{// foreach の代わりに クエリを使用
            
   string myDocuments = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal);
               
var scoreQuery = from score in Directory.GetFiles(myDocuments) select new MyFile(score);
                list.AddRange(scoreQuery);
            }
          
list.Sort(CompareFile);  // ソート
            listBox1.
DataSource = list;
            listBox1.EndUpdate();
        }

        /// ソートで使用
        private int
CompareFile(MyFile f1, MyFile f2) {
            return f1.Extension.CompareTo(f2.Extension); 
// この例では拡張子でソート
        }

        /// DrawMode プロパティを DrawMode.OwnerDrawFixed または DrawMode.OwnerDrawVariable に設定
        /// ListBox1.DrawItem に  System.Windows.Forms.DrawItemEventHandler を追加

        private void listBox1
_DrawItem(object sender, DrawItemEventArgs e) {
            if (-1 == e.Index) {
// ListBoxが空のときにListBoxが選択されるとe.Indexが-1になる
                return;
            }
            object item = ((ListBox)sender).Items[e.Index];
            
Brush myBrush = Brushes.Black;                                            // デフォルトは黒色                
            if (item is MyFile) {
                MyFile p = ((MyFile)item);
                string ext = p.Extension;
                if (ext == ".xls" || ext == ".xlsx") {
                    myBrush = Brushes.Blue;
                } else if (ext == ".ppt") {
                    myBrush = Brushes.Violet;
                } else if (ext == ".jpg" || ext == ".jpeg" || ext == ".tiff" || ext == ".gif") {
                    myBrush = Brushes.LawnGreen;
                } else if (ext == ".exe") {
                    myBrush = Brushes.Red;
                }
            }
            e.DrawBackground();
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) {
   
             e.Graphics.FillRectangle(Brushes.Lavender, e.Bounds);  // 選択された Item の背景色設定
            }
            string txt = item is MyFile ? ((MyFile)item).FileName : item.ToString();
// ListBox に表示する文字列
            e.Graphics.DrawString(txt, e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
            e.DrawFocusRectangle(); // If the ListBox has focus, draw a focus rectangle around the selected item.

        }
    }

    /// ファイルを表すクラス
    class MyFile {
        private readonly string path;
        public string FileName { get; private set; } 
// ファイル名 (親パスを除く
        public string Extension { get; private set; }
// 拡張子

        public MyFile(string path) {
            this.path = path;
            FileName = Path.GetFileName(path);
            Extension = Path.GetExtension(path);
       }

        /// ListBox.Items.Contains()で使用
        public override bool
Equals(object obj) {
            if (obj == null || this.GetType() != obj.GetType()) {
                return false;
            } else {
                return this.path.Equals(((MyFile)obj).path);
            }
        }

        /// Equals で等しいと判断されるものは同じhashCodeを返す必要あり        
        public override int
GetHashCode() {
            return this.path.GetHashCode();
        }

        public override string ToString() {
            return FileName;
        }
    }
}

 

foreach List<MyFile> list = new List<MyFile>();
foreach (string file in Directory.GetFiles(@"C:\1_temp")) {
        list.
Add(new MyFile(file));
}
Query List<MyFile> list = new List<MyFile>();
var scoreQuery =
from score in Directory.GetFiles(@"C:\1_temp")
    
select new MyFile(score);
list.
AddRange(scoreQuery);
Query
+ラムダ式
List<MyFile> list = new List<MyFile>();
list.
AddRange(Directory.GetFiles(@"C:\1_temp").Select((n) => new MyFile(n)));

 

■Ref
 ・foreach(x in collection){}               msdn
 ・
演算子一覧                     msdn 。 3項演算子 string s = 0 < x ? "A":"B";

 ・ListBox.DrawItem イベント            msdn
 ・
ListBox.Sort メソッド                msdn
 ・
ListControl.DataSource プロパティ       msdn

 ・List.Sort メソッド (ジェネリック Comparison)  msdn
 ・
System.Collections.Generic 名前空間     msdn

C# : ListBox を使った Drop、Collection、Filter の演習

<目次はここです>

ListBox にドロップしたファイルの名前を表示するサンプルプログラムを作成しました。
機能は以下の通りです。
 ・ファイルをDropした場合、拡張子が ".txt" ならListBoxに追加
 ・フォルダをDropした場合、そのフォルダの中のある拡張子が ".txt" ファイルをListBoxに追加

Listbox20120714

■演習目的
 ・Drop 使用方法
 ・Collection 使用方法
 ・Collection に対するフィルタ使用方法
 ・ファイル/フォルダ判別方法
 ・ファイル名(拡張子)の取得方法

■サンプルコード

Form1.Designer.cs

namespace Test20120714 {
    partial class Form1 {
        /// <summary>
        /// 必要なデザイナー変数です。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        /// <param name="disposing">マネージ リソースが破棄される場合 true、破棄されない場合は false です。</param>
        protected override void Dispose(bool disposing) {
            if (disposing && (components != null)) {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows フォーム デザイナーで生成されたコード 
        /// <summary>
        /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディターで変更しないでください。
        /// </summary>
        private void InitializeComponent() {
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            //
            // listBox1
            //

            this.listBox1.AllowDrop = true;
            this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.listBox1.FormattingEnabled = true;
            this.listBox1.ItemHeight = 12;
            this.listBox1.Location = new System.Drawing.Point(26, 19);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(345, 184);
            this.listBox1.TabIndex = 0;

            this.listBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
            this.listBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.listBox1_DragEnter);

            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(402, 229);
            this.Controls.Add(this.listBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }
        #endregion
        private System.Windows.Forms.ListBox listBox1;
    }
}

 

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Test20120714 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void listBox1_DragDrop(object sender, DragEventArgs e) {
            
System.Collections.ArrayList list = new System.Collections.ArrayList(); // ファイル名保存変数
            foreach (string path in (string[])e.Data.GetData(DataFormats.FileDrop, false)) {
                if (File.GetAttributes(path) ==
FileAttributes.Directory) {
                    list.AddRange(
Directory.GetFiles(path));                // Dropされたフォルダ内のファイルのみ追加
                } else {
                    list.Add(path);                                                 
// Dropされたファイルを追加
                }
            }
            IEnumerable<string> query1 = list.OfType<string>().
Where(x => Path.GetExtension(x)==".txt"); // 拡張子フィルタ
            foreach (string path in query1) {
//             if (!listBox1.Items.Contains(path)) {                           
// 既に ListBox に登録済のファイルは追加しない
                    listBox1.Items.Add(path);                              
      // listBox に追加
//             }
            }
        }

        private void listBox1_DragEnter(object sender, DragEventArgs e) {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                e.Effect = DragDropEffects.All;
            else
                e.Effect = DragDropEffects.None;
        }
    }
}

■Ref.
 ・
Visual C# アプリケーションにファイルのドラッグ アンド ドロップ機能を提供する方法 マイクロソフト
 ・
File/Directoryクラス ファイルとディレクトリの操作         @IT
 ・
パス名やファイル名からベース名と拡張子を取得するには? @IT
 ・
Directory クラス                                                   msdn

 ・ListBox.ObjectCollection クラス                                         msdn
 ・
System.Collections 名前空間                                           msdn
 ・
フィルター処理                                                    msdn
 

2012年7月 9日 (月)

C# : File Viewer 作成してみました

<目次はここです>

C# の WebBrowser コントロール を使って FileViewer を作成してみました。
見ることが出来るのは、Excel, Word, PowerPoint, 画像, pdf などです。
Cfileviewer

Form1.cs (注意: Frame1 の AllowDrop プロパティを True にして下さい )

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;


namespace ExcelViewer {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();

            //     webBrowser1.Navigate(new Uri("http://www.yahoo.co.jp/"));
            //     webBrowser1.Navigate(@"C:\Temp\サンプル.xlsx");

        }

        private void Form1_DragDrop(object sender, DragEventArgs e) {
            string[] files = (string[])e.Data.GetData(
DataFormats.FileDrop, false);
            string name = files[0];
            string statusbarText = null;
            if (name.ToLower().EndsWith("
.url")) {
                string url;
                using (StreamReader sr = new StreamReader(name)) {
                    sr.ReadLine();                               
// 空読み
                    string line = sr.ReadLine();
                    url = line.Substring(4, line.Length - 4);
                }
                if (url != null) {
                  
webBrowser1.Navigate(new Uri(url));
                    statusbarText = name;
                }
            } else if (checkExtention(name)) {
               
webBrowser1.Navigate(name);
                statusbarText = name;
            }
            if (statusbarText == null) {
                statusbarText = "Error (このファイルは処理できません):" + name;

                //        ファイルに関連付けられたアプリ起動
                //        System.Diagnostics.Process.Start(@"C:\Temp\サンプル.xlsx");

            }
            toolStripStatusLabel1.Text = statusbarText;

            for (int i = 0; i < files.Length; i++) {
                // Console.WriteLine(files[i]);
            }

        }

        private void Form1_DragEnter(object sender, DragEventArgs e) {
            if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
                e.Effect = DragDropEffects.All;
            } else {
                e.Effect = DragDropEffects.None;
            }
        }

        private bool checkExtention(String absolutePath) {
            string[] office = { ".xls", ".xlsx", ".doc", ".ppt" };                                    
// MS Office 
            string[] image = { ".jpeg", ".jpg", ".png", ".tiff", ".gif", ".bmp" };               
// 画像
            string[] web = { ".htm", ".html" };                                                         
// html
            string[] other = { ".pdf", ".txt" };                                                         
// その他
            IEnumerable<string> p = office.Concat(image).Concat(web).Concat(other); 
// 配列の結合
            string ext = Path.GetExtension(absolutePath).ToLower();    
// ファイル名から拡張子取得
            return p.Contains(ext);

        }

        private void button1_Click(object sender, EventArgs e) {
            Application.Exit();
        }

    }
}

■設定
 ・OSの設定が必要です
   WebBrowser コントロール内に表示するためにWindowsの設定が必要です。

    ・あっちさんブログPOPOLOG --> [Win7] Internet Explorer で EXCEL ファイルを外部起動する方法
    ・ C# :Frame 内にExcel 表示 & Excel 起動

■実行環境
 ・OS:Windows 7
 ・コンパイラ:Microsoft Visual C# 2010 Express

2012年7月 8日 (日)

C# : リンク集 <ファイル関連>

<目次はここです>

■名前 ( System.IO.Path

string path = @"c:\temp\MyTest.txt";

Console.WriteLine( Path.GetDirectoryName(path) ); // c:\temp
Console.WriteLine( Path.GetFileName(        path) ); // MyTest.txt

■リストアップ ( Directory.GetFiles )

string[] files = Directory.GetFiles(@"C:\temp", "*", System.IO.SearchOption.AllDirectories);
foreach(string f in files){
          Console.WriteLine(f);
}

■読み書き  ( StreamReader クラス )

using (StreamReader sr = new StreamReader(@"TestFile.txt"))  {
          string line;
         
while ((line = sr.ReadLine()) != null)  {
                   
Console.WriteLine(line);
           }
}

■変化監視 ( FileSystemWatcher

void test()  {
        FileSystemWatcher watcher =
new FileSystemWatcher();
        watcher.Path = @"c:\temp";
        watcher.Filter = "*.txt";                        
// Only watch text files.
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite;       

        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);

        watcher.EnableRaisingEvents = true;       // Begin watching.
        Console.WriteLine("フォルダ監視開始");
    }

void OnChanged(object source, FileSystemEventArgs e) {
       Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}

java、C# : メソッド呼出し、通信 <自分用メモ>

<目次はここです>

■java から C# のメソッドを呼び出す
 ・JNI
   ・
Java Native Interface                                                      、java6 documents, sun.com

 ・JAN
   ・
JNIより簡単にJavaとC/C++をつなぐ「JNA」とは               、 @IT
   ・
Java JNA and C# DLL (Howto, Tutorial)                   、freakxnet

■データの送受信
 ・ソケット
   ・
JavaとC#.netでのSocket通信                                     、@IT

   ・C#での自PC内プロセス間通信                、くまさんのブログ「吟遊詩人の戯言」
   ・
[C#][Program]C# .NETリモーティングを使ったプロセス間通信、tetsuarossaさんのブログ「プログラミングのこととか」
   ・
IpcServerChannel のサンプル                 、madn
   ・
IpcClientChannel のサンプル                  、msdn

C# : リンク集 <自分用メモ>

<目次はここです>

 ■C#専門 リンク
 ・@IT
   ・
連載:C#入門
   ・C#プログラミングTips
   ・C#記事一覧

 ・未確認飛行 C
   ・C# によるプログラミング入門

 ・msdn
   ・
Visual C# デベロッパーセンター

■Tip リンク
 
・ドロップ           : madan  /  @IT
 ・特殊ディレクトリのパス :DOBON.NET

■基本
 ・
Windowsアプリケーションのスケルトンを知る

■他言語MIX
 ・
C#からVisual Basicの関数を使う
 ・Win32 APIの呼び出し
 ・java から呼び出し

■新しいスタイル
 ・LINQサンプルコード一覧 このブログ記事
 ・ラムダ式
 ・dynamic型, var型

■クエリ、collection, 配列
 ・配列の連結: Concat

■バックグラウンド処理
 ・時間のかかる処理をバックグラウンドで実行するには?[2.0のみ、C#、VB] @IT
 ・10 行でズバリ!! [C#] Silverlight - バックグラウンド スレッドの利用       MS

■文字列
 ・
文字列処理に関するヒント
 ・StrConv : 全角文字 <---> 半角文字

■メモ
 ・終了    :  Environment.Exit(0);
Application.Exit(); DOBON.NET プログラミング道
 ・標準出力 : Console.WriteLine("ABC漢字");  書式
 ・定数    : const , readonly、 未確認飛行 C > 定数
 ・assert   : Debug.Assert(false, "Error:" + sender);
 ・パス     : string name =
@"C:\Temp\サンプル.xlsx"
 ・Equals, = = : 自作クラスのEqualsメソッドをオーバーライドして、等価の定義を変更する
 ・set,get   : 自動プロパティー, C# Ver3から?   public string FileName {  get; private set; }
 ・is, as         : instanceof
 ・色の名前  : Colors by Name  msdn

 ・
foreach (int i in FromTo(10, 20)) { Console.Write("{0}\n", i); }}
 ・関連付けられたアプリ起動 : System.Diagnostics.Process.Start(@"C:\Temp\サンプル.xlsx");
 ・ファイル自動close       : using StreamReader クラス


C# :Frame 内にExcel 表示 & Excel 起動

<目次はここです>
C#アプリでエクセルを表示するプログラムのサンプルです。

Windows 7の設定が必要なのですが、xp と違うので手間取ってしまいました。
備考:表示の拡大縮小は 「CTRL」キー +「マウスホイール」回転 で可能です。

C

C#サンプルコード (「C:\Temp」フォルダに「サンプル.xlsx」が必要です)
namespace ExcelViewer {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();

            webBrowser1.Navigate(new Uri("
http://www.yahoo.co.jp/"));
            webBrowser2.Navigate(@"
C:\Temp\サンプル.xlsx");
      //   System.Diagnostics.Process.Start(@"
C:\Temp\サンプル.xlsx");
        }
    }
}

■実行環境
 ・OS               : Windows 7
 ・Excel            : Excel 2007
 ・Visual Studio : 2010 、C# 2010 Express

■リファレンス
 ・あっちさんブログ POPOLOG 
   [Win7] Internet Explorer で EXCEL ファイルを外部起動する方法
 ・Microsoft サポート
   Visual C# 2005 または Visual C# .NET で WebBrowser コントロールを使用して Office ドキュメントを開く方法

 ・@IT
   .NET TIPS > Excelファイルにアクセスするには?[C#、VB]

■おまけ(ノートPCが安い)
 昨日「価格.com」を見ていたら 4GBメモリ積んだLenovoノートPC が
3万円を切っていました!
 先月出たばっかりの新製品です。親用に買うか迷っています。
   --> 追伸:購入し7/14届きました。私は比較するノートPC無いですがかなり良いと思います。

 価格.com --> Lenovo G580 26897LJ [グロッシーブラウン] \2,9531 @ 2012/07/08

2012年7月 3日 (火)

生物 : カミキリムシ <シロスジカミキリ>

今日の朝、廊下にカミキリ虫が居ました。

触角を除く胴体の大きさは約 5cm。結構でかいです。
調べてみると、シロスジカミキリであることが分りました。
日本最大種のカミキリだそうです。


触角を囲むように配置された、真黒で丸くない大きな複眼の目に迫力あります。
体の横にある一直線の黄色いラインもカッコ良い。

触ると、ギィギィ音を出します。力も強いです。
子供のころ、シロスジカミキリに手首を咬まれひどい目にあったことがあります。
咬まれた跡が残ったどころではなく、皮膚とその下の肉が切り裂かれました。

 決して手に載せたりしないようにして下さい。

1 2_3
3 4_3

このカミキリはその後何処かへ飛び立って行きました。
無事一生で一回の熱い夏を楽しんで欲しい。がんばれカミキリ。


■リンク
 ・昆虫エクスプローラ > 
昆虫図鑑 > 甲虫目 > カミキリムシ > シロスジカミキリ
 ・以前見た綺麗な色の「
ラミーカミキリ

2012年6月23日 (土)

java: mac 上で JProgressBar に出る波を消す

進度(進捗)バーには以下の3つの機能が必要だと思います。
 1. 進度を表す                (最終的には100%になる)
 2. 量を表す                  (増減し、100%になるとは限らない)
 3. タスク実行中だがその進度は不明

JProgressBar のメソッドでは 1, 2が setValue(int n) で、 3が setIndeterminate(boolean b)に相当します。

windowsでは問題なかったのですが、mac の JProgressBar はバーの模様が波打って動いているため、2の目的には不都合であることが分かりました。

mac上で2の目的で JProgressBar を使うには、setUI() メソッドを使用すれば良いことが分かりました。

Jprogressbar_20120623_2

package test;

import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicProgressBarUI;

// サンプルコード
public class TestProgressBar extends javax.swing.JFrame {

    private final JProgressBar jProgressBar1 = new javax.swing.JProgressBar();
    private final JProgressBar jProgressBar2 = new javax.swing.JProgressBar();
    private final JProgressBar jProgressBar3 = new javax.swing.JProgressBar();
    private final JPanel jPanel1 = new javax.swing.JPanel();
    private final JPanel jPanel2 = new javax.swing.JPanel();

    public TestProgressBar() {
        initComponents();
        jProgressBar1.setStringPainted(true);
        jProgressBar2.setStringPainted(true);
        jProgressBar3.setStringPainted(true);
        jProgressBar1.setString("Bar1");
        jProgressBar2.setString("Bar2");
        jProgressBar3.setString("Bar3");
        jProgressBar1.setValue(100);
        jProgressBar2.setValue(60);
        jProgressBar3.setValue(60);

        jProgressBar3.setForeground(new java.awt.Color(153, 153, 255));
        jProgressBar3.setUI(
new BasicProgressBarUI() ); // new MetalProgressBarUI()
        System.out.println("" + jProgressBar1.getUI().getClass());
    }

    private void initComponents() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.CardLayout(20, 20));
        getContentPane().add(jPanel1, "card1");
        jPanel1.setLayout(new java.awt.GridLayout(3, 0));
        jPanel1.add(jProgressBar1);
        jPanel1.add(jProgressBar2);
        jPanel1.add(jPanel2);
        jPanel2.setLayout(new java.awt.BorderLayout());
        jPanel2.add(jProgressBar3, java.awt.BorderLayout.PAGE_START);
        setSize(320, 150);
        setLocationRelativeTo(null);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
//                try {
//                    UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
//                } catch (Exception ex) {
//                    ex.printStackTrace();
//                }

                new TestProgressBar().setVisible(true);
            }
        });
    }
}

■Ref
 ・クラス BasicProgressBarUI      ( sun java6 docs 日本語 )
 ・BasicProgressBarUI ソースコード  ( ttp://grepcode.com>JDK/ jdk / openjdk/ 6-b14 )
 ・BasicProgressBarUI ソースコード  ( ttp://opensource.apple.com )
 ・AquaProgressBarUI ソースコード  ( hg.openjdk.java.net 、src/macosx/classes/com/apple/laf )
 ・Nice looking progress bar in java

■備考
 ちなみに「HTML5」では progress 要素と meter要素が 上記1,2 に対応します。
  ・input要素だけじゃない HTML5のフォーム新機能

2012年6月 2日 (土)

java: GlassPane で JPopupMenu を使用する方法

GlassPane で JPopupMenu を利用しようとしたらメニューが選択出来なかった。
解決方法が分かったのでメモしておきます。

原因は 最上層のGlassPane がマウスのイベントを 奪っていたためでした。
contains メソッドオーバーライドで解決できました。

import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
 

public class MyFrame extends javax.swing.JFrame {
    public MyFrame() {
        initComponents();
        setLocationRelativeTo(null);

        setGlassPane(new MyGlassPane());
        getGlassPane().setVisible(true);

    }
 
    private void initComponents() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);
        setBounds(0, 0, 400, 300);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MyFrame().setVisible(true);
            }
        });
    }

}

class MyGlassPane extends JComponent {
    private final JPopupMenu mPopup = new JPopupMenu(); 
    MyGlassPane() {
        mPopup.add(new JMenuItem("Item1"));
        mPopup.add(new JMenuItem("Item2"));
        setComponentPopupMenu(mPopup);
    }

    @Override
    public boolean contains(int x, int y) {
        return !mPopup.isShowing();
// 本当はpopup 表示の内外で返値を変えた方が良い
    }

}

2012年5月20日 (日)

日食

出勤前に広場で日食を観測。ほぼ金環日食(下の写真よりもっと太陽が隠れました)でした。確かに初めに聞いていたように殆ど暗くなりませんでした。

1

■Ref.
 ・
2012年5月20日の日食

«java: IMEの状態取得/設定。 変換途中の文字列取得