知人の結婚式のプロフィールムービーを作ってみた
昨年の話になりますが、知人に結婚式で流すプロフィールムービーの作成を頼まれたので、そのときのメモ。
依頼の内容
予算
20000円を制作費として頂きました。アニメーション素材の購入でほぼ使い切りました。
構成
新郎の生い立ち→新婦の生い立ち→二人の思い出→両親へのメッセージ
という内容です。曲は新郎のパートで1曲(最初のサビまで)、残りのパートで1曲(フル)で頼まれました。
納品形式
DVD
環境
PC:iMac
動画作成ソフト:iMovie, After Effects
DVDライティングソフト:Toast DVD
ムービー作成
アニメーション
スライドショーだけだと少し物足りないので、動画のオープニングとエンディングとして短いアニメーションを入れることにしました。
アニメーションはAdobeのAfter Effectsを使ってみることにしました。
www.adobe.com
体験版が一週間あるので一気に作ってしまうのもありですね。
また、Adobe製品は高いイメージがあったのですが、お手頃価格で必要な期間だけ使用できるプランがあったので気軽に購入できました。
creative.adobe.com
アニメーションの素材はvideohiveで購入しました。"Wedding titles"などで検索するとたくさん素材が出てくると思います。
videohive.net
購入の仕方はこちらが詳しいです。
Videohiveの使い方 - 自作映像の作り方・裏ワザテンプレート集
After Effectsはプロの方が使うソフトなのでiMovieより操作が難しいですが、videohiveの素材には編集方法も大抵同梱されているので、
最低限の編集はできるかと思います。私は文字の変更、可視状態の変更とタイムラインのカットアンドペーストだけでそれなりのものができました。
動画に出力して、iMovie内でスライドショーとくっつければプロフィールムービーの完成です。
はじめよう! 作りながら楽しく覚える After Effects
- 作者: 木村菱治
- 出版社/メーカー: ラトルズ
- 発売日: 2015/02/14
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
プロが教える! After Effects デジタル映像制作講座 CC/CS6対応
- 作者: SHIN-YU,川原健太郎,月足直人
- 出版社/メーカー: ソーテック社
- 発売日: 2017/04/08
- メディア: 単行本
- この商品を含むブログを見る
DVD作成
Toast DVDを使ってDVDにライティングしました。
「高解像度DVD」を選べばHD画質のDVDが作れますが、その場合AVCHDに対応したブルーレイプレイヤーが必要なので式場に問い合わせてみてください。
itea40.jp
本番環境のテストは必須
必ず式の前に本番環境でテストしてもらいましょう。私はテロップが途切れているシーンがあったので、一度修正しました。
Native Wifiを使ってみた その1
Windowsで無線LANの設定を行うためのAPIとして、Native WifiがMicrosoftより提供されています。
利用可能なネットワーク一覧の取得や、無線アクセスポイントへの接続などがC/C++で実現できます。
Native Wifi (Windows)
Windowsで無線LANに関するアプリを作ることになたっためこのNative Wifiを使うことにしたのですが、調べてみても言語問わずあまり情報がありません。
しかし、自分なりにいろいろと試行錯誤しているうちに知見が蓄積されてきたのでメモしておきます。
なお、C#の場合、Native WifiをP/InvokeしたAPIがManaged Wifiとして公開されています。すべてを網羅しているわけではなさそうですが・・・。
managedwifi.codeplex.com
サンプル
簡単なサンプルがMicrosoftより公開されています。
無線LANインターフェースの状態取得、利用可能なネットワーク情報の取得がこれらのコードで確認できると思います。
Native Wifi API Sample (Windows)
通知の取得
上記サンプルにある関数WlanGetAvailableNetworkList()では利用可能なネットワーク一覧が取得できますが、これはリアルタイムのものではなくOSが定期的にスキャンした結果のキャッシュを取得しています。
そのため直前に出現したアクセスポイントのネットワークを取得できない可能性があります。
そこでWlanScan()関数を使い、スキャン結果の通知を取得することでリアルタイムで利用可能なネットワークを取得しますが、これには数秒を要します。
そのため、OSからの「通知」を取得することでスキャンの状況に応じた処理を行います。
通知を取得するためには、WlanRegisterNotification()を使います。
WlanRegisterNotification function (Windows)
リアルタイムで利用可能なネットワークを取得するサンプル
というわけでWlanScan()関数を使い、スキャン結果の通知を取得することでリアルタイムで利用可能なネットワークを取得するサンプルを作ってみました。
Microsoftが公開しているサンプルを改変しています。
#ifndef UNICODE #define UNICODE #endif #include <windows.h> #include <wlanapi.h> #include <objbase.h> #include <wtypes.h> #include <stdio.h> #include <stdlib.h> #include <string> #include <wchar.h> // Need to link with Wlanapi.lib and Ole32.lib #pragma comment(lib, "wlanapi.lib") #pragma comment(lib, "ole32.lib") static bool bScanWait = true; //無線に関する通知を行うコールバック関数 static void WlanNotification(WLAN_NOTIFICATION_DATA *wlanNotifData, VOID *p) { //ロケール指定 setlocale(LC_ALL, "japanese"); WCHAR strReason[1024]; //通知元をauto configuration module(ACM)に設定 if (wlanNotifData->NotificationSource == WLAN_NOTIFICATION_SOURCE_ACM) { PWLAN_CONNECTION_NOTIFICATION_DATA pConnNotifData = NULL; WCHAR *notificationMessage; switch (wlanNotifData->NotificationCode) { case wlan_notification_acm_scan_complete: //スキャン完了 notificationMessage = L"wlan_notification_acm_scan_complete"; bScanWait = false; break; case wlan_notification_acm_scan_fail: //スキャン失敗 notificationMessage = L"wlan_notification_acm_scan_fail"; pConnNotifData = (PWLAN_CONNECTION_NOTIFICATION_DATA)wlanNotifData->pData; if (pConnNotifData->wlanReasonCode != ERROR_SUCCESS) { bScanWait = false; WlanReasonCodeToString(pConnNotifData->wlanReasonCode, 1024, strReason, NULL); wprintf(L"ScanFailed Reason: %ls\n", strReason); } break; case wlan_notification_acm_scan_list_refresh: //ネットワーク一覧が更新された notificationMessage = L"wlan_notification_acm_scan_list_refresh"; break; default: notificationMessage = L"Unknown:"; break; } wprintf(L"%ls\n", notificationMessage); } } int wmain() { // Declare and initialize variables. HANDLE hClient = NULL; DWORD dwMaxClient = 2; // DWORD dwCurVersion = 0; DWORD dwResult = 0; DWORD dwRetVal = 0; int iRet = 0; WCHAR GuidString[39] = { 0 }; unsigned int i, j, k; /* variables used for WlanEnumInterfaces */ PWLAN_INTERFACE_INFO_LIST pIfList = NULL; PWLAN_INTERFACE_INFO pIfInfo = NULL; PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL; PWLAN_AVAILABLE_NETWORK pBssEntry = NULL; int iRSSI = 0; DWORD dwPrevNotif = 0; bScanWait = true; dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient); if (dwResult != ERROR_SUCCESS) { wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult); return 1; // You can use FormatMessage here to find out why the function failed } dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList); if (dwResult != ERROR_SUCCESS) { wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult); return 1; // You can use FormatMessage here to find out why the function failed } else { wprintf(L"Num Entries: %lu\n", pIfList->dwNumberOfItems); wprintf(L"Current Index: %lu\n", pIfList->dwIndex); for (i = 0; i < (int)pIfList->dwNumberOfItems; i++) { pIfInfo = (WLAN_INTERFACE_INFO *)&pIfList->InterfaceInfo[i]; wprintf(L" Interface Index[%u]:\t %lu\n", i, i); iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR)&GuidString, sizeof(GuidString) / sizeof(*GuidString)); // For c rather than C++ source code, the above line needs to be // iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, // sizeof(GuidString)/sizeof(*GuidString)); if (iRet == 0) wprintf(L"StringFromGUID2 failed\n"); else { wprintf(L" InterfaceGUID[%d]: %ws\n", i, GuidString); } wprintf(L" Interface Description[%d]: %ws", i, pIfInfo->strInterfaceDescription); wprintf(L"\n"); wprintf(L" Interface State[%d]:\t ", i); switch (pIfInfo->isState) { case wlan_interface_state_not_ready: wprintf(L"Not ready\n"); break; case wlan_interface_state_connected: wprintf(L"Connected\n"); break; case wlan_interface_state_ad_hoc_network_formed: wprintf(L"First node in a ad hoc network\n"); break; case wlan_interface_state_disconnecting: wprintf(L"Disconnecting\n"); break; case wlan_interface_state_disconnected: wprintf(L"Not connected\n"); break; case wlan_interface_state_associating: wprintf(L"Attempting to associate with a network\n"); break; case wlan_interface_state_discovering: wprintf(L"Auto configuration is discovering settings for the network\n"); break; case wlan_interface_state_authenticating: wprintf(L"In process of authenticating\n"); break; default: wprintf(L"Unknown state %ld\n", pIfInfo->isState); break; } wprintf(L"\n"); //コールバックの登録 dwResult = WlanRegisterNotification(hClient, WLAN_NOTIFICATION_SOURCE_ACM, FALSE, (WLAN_NOTIFICATION_CALLBACK)WlanNotification, NULL, NULL, &dwPrevNotif); if (dwResult != ERROR_SUCCESS) { wprintf(L"WlanRegisterNotification failed with error: %u\n", dwResult); return 1; } //利用可能なネットワークをスキャン dwResult = WlanScan(hClient, &pIfInfo->InterfaceGuid, NULL, NULL, NULL); if (dwResult != ERROR_SUCCESS) { wprintf(L"WlanScan failed with error: %u\n", dwResult); return 1; } while (bScanWait) { Sleep(100); } dwResult = WlanGetAvailableNetworkList(hClient, &pIfInfo->InterfaceGuid, 0, NULL, &pBssList); if (dwResult != ERROR_SUCCESS) { wprintf(L"WlanGetAvailableNetworkList failed with error: %u\n", dwResult); dwRetVal = 1; // You can use FormatMessage to find out why the function failed } else { wprintf(L"WLAN_AVAILABLE_NETWORK_LIST for this interface\n"); wprintf(L" Num Entries: %lu\n\n", pBssList->dwNumberOfItems); for (j = 0; j < pBssList->dwNumberOfItems; j++) { pBssEntry = (WLAN_AVAILABLE_NETWORK *)& pBssList->Network[j]; wprintf(L" Profile Name[%u]: %ws\n", j, pBssEntry->strProfileName); wprintf(L" SSID[%u]:\t\t ", j); if (pBssEntry->dot11Ssid.uSSIDLength == 0) wprintf(L"\n"); else { for (k = 0; k < pBssEntry->dot11Ssid.uSSIDLength; k++) { wprintf(L"%c", (int)pBssEntry->dot11Ssid.ucSSID[k]); } wprintf(L"\n"); } wprintf(L" BSS Network type[%u]:\t ", j); switch (pBssEntry->dot11BssType) { case dot11_BSS_type_infrastructure: wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType); break; case dot11_BSS_type_independent: wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType); break; default: wprintf(L"Other (%lu)\n", pBssEntry->dot11BssType); break; } wprintf(L" Number of BSSIDs[%u]:\t %u\n", j, pBssEntry->uNumberOfBssids); wprintf(L" Connectable[%u]:\t ", j); if (pBssEntry->bNetworkConnectable) wprintf(L"Yes\n"); else { wprintf(L"No\n"); wprintf(L" Not connectable WLAN_REASON_CODE value[%u]:\t %u\n", j, pBssEntry->wlanNotConnectableReason); } wprintf(L" Number of PHY types supported[%u]:\t %u\n", j, pBssEntry->uNumberOfPhyTypes); if (pBssEntry->wlanSignalQuality == 0) iRSSI = -100; else if (pBssEntry->wlanSignalQuality == 100) iRSSI = -50; else iRSSI = -100 + (pBssEntry->wlanSignalQuality / 2); wprintf(L" Signal Quality[%u]:\t %u (RSSI: %i dBm)\n", j, pBssEntry->wlanSignalQuality, iRSSI); wprintf(L" Security Enabled[%u]:\t ", j); if (pBssEntry->bSecurityEnabled) wprintf(L"Yes\n"); else wprintf(L"No\n"); wprintf(L" Default AuthAlgorithm[%u]: ", j); switch (pBssEntry->dot11DefaultAuthAlgorithm) { case DOT11_AUTH_ALGO_80211_OPEN: wprintf(L"802.11 Open (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); break; case DOT11_AUTH_ALGO_80211_SHARED_KEY: wprintf(L"802.11 Shared (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); break; case DOT11_AUTH_ALGO_WPA: wprintf(L"WPA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); break; case DOT11_AUTH_ALGO_WPA_PSK: wprintf(L"WPA-PSK (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); break; case DOT11_AUTH_ALGO_WPA_NONE: wprintf(L"WPA-None (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); break; case DOT11_AUTH_ALGO_RSNA: wprintf(L"RSNA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); break; case DOT11_AUTH_ALGO_RSNA_PSK: wprintf(L"RSNA with PSK(%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); break; default: wprintf(L"Other (%lu)\n", pBssEntry->dot11DefaultAuthAlgorithm); break; } wprintf(L" Default CipherAlgorithm[%u]: ", j); switch (pBssEntry->dot11DefaultCipherAlgorithm) { case DOT11_CIPHER_ALGO_NONE: wprintf(L"None (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); break; case DOT11_CIPHER_ALGO_WEP40: wprintf(L"WEP-40 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); break; case DOT11_CIPHER_ALGO_TKIP: wprintf(L"TKIP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); break; case DOT11_CIPHER_ALGO_CCMP: wprintf(L"CCMP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); break; case DOT11_CIPHER_ALGO_WEP104: wprintf(L"WEP-104 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); break; case DOT11_CIPHER_ALGO_WEP: wprintf(L"WEP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); break; default: wprintf(L"Other (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); break; } wprintf(L" Flags[%u]:\t 0x%x", j, pBssEntry->dwFlags); if (pBssEntry->dwFlags) { if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED) wprintf(L" - Currently connected"); if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED) wprintf(L" - Has profile"); } wprintf(L"\n"); wprintf(L"\n"); } } } } //通知の解除 if (hClient != NULL) { dwResult = WlanRegisterNotification(hClient, WLAN_NOTIFICATION_SOURCE_NONE, TRUE, NULL, NULL, NULL, &dwPrevNotif); } if (pBssList != NULL) { WlanFreeMemory(pBssList); pBssList = NULL; } if (pIfList != NULL) { WlanFreeMemory(pIfList); pIfList = NULL; } return dwRetVal; }
このサンプルを実行すると、
wlan_notification_acm_scan_complete wlan_notification_acm_scan_list_refresh
が出力され、さらに無線LANインターフェースと最新の利用可能なネットワーク情報が出力されたはずです。
WlanScan()は結果の取得までに数秒(4秒以内)かかるため、スキャン完了通知を待つ処理を入れています。4秒以内に取得できない場合はタイムアウトするようです。
なお、一度接続済みで、プロファイルが保存されているネットワークが見つかった場合、同じSSIDのネットワークが重複して取得されています(プロファイル情報ありのものと、プロファイル情報無しのもの)。
利用可能なネットワーク一覧結果を表示する場合は、必要に応じてスクリーニングすることになるかと思います。
これでさっき立てたばかりのアクセスポイントも取得できるようになりました。
このように、より信頼性の高いアプリには通知の取得が必須だと思います。
次回はアクセスポイント接続に関するエントリを投稿したいと思います。
Apple Watch Series2でApple payを使ってみた
Apple payが日本でもサービス開始されたましたね。
私も早速使ってみましたのでレポートします。
デバイス環境
iPhone6
Apple Watch Series2
iPhoneのWalletアプリにカードを登録
アップデート後に再起動すると、最初にクレジットカードをWalletアプリに登録する画面が出てきました。
メインで使っているリクルートカードプラスを登録しようとしたのですが、残念ながら登録できませんでした・・・。
代わりにクレジットとSuica一体型のViewカード(ルミネカードバージョン)を登録しました。
そして、実物のカードは店舗で使えなくなるという通知が表示されました。
カメラでクレジットカードを撮影すれば番号を認識してくれるので簡単です。こういう機能をサラッと使えるのがiPhoneの良いところですね。
後からいつでもWalletアプリでクレジットカードを追加できます。
Watch OSは3.1から対応
iPhoneと同様、Apple Watchもアップデートさせました。
Apple Watchにカードを登録
iPhone で Watch Appアプリを開いて、Wallet と Apple Payから先程追加したカードを選択して登録します。
私の場合、これでApple WatchによるQUICPayによる支払い(Apple Watchをタッチしていクレカ払い)ができるようになりました。
他にもiD払いがあるのですが、どちらになるかは登録したクレジットカードにより決まるようです。
ViewカードのSuicaはWalletアプリに取り込まれない
Suica一体型のクレジットカードであるViewカードですが、カードに付いているSuicaはWalletアプリに取り込まれません。
つまり、クレジットカード機能のみiPhoneやApple WatchのWalletアプリに取り込んだことになります。
そのため、Suicaアプリにより新たなSuicaを発行する必要があります。
私はSuicaアプリをダウンロードし、そこからSuica(記名式)を発行しました。
モバイルSuicaに登録することになるのですが、そのとき個人情報を入力するフォームが勝手に動いて凄く入力しづらかったです(;´Д`)
チャージするときに紐付けるクレジットカードはWalletに登録したものから選ぶことができます。
平成28年度(2016年)秋期ネットワークスペシャリストを受験しました
昨年、ネットワークスペシャリストに落ちたというエントリを書きました。
gravedoll.hatenablog.com
今年もネスペ受けてきましたので午後問題の再現解答を書こうと思います。
今回一週間ほど間が空いてしまったのでちょっと記憶が曖昧な部分もありますが・・・。
昨年より勉強時間がなり少なかったのですが、なんとか時間内に回答欄を全部埋めることができました。
ちなみに午前Ⅰは免除で、午前ⅡはIPAの回答例で自己採点したら合格でした。
午後Ⅰ
問1
設問1
ア:MX
イ:MSV3
ウ:MSV1
エ:SMTPS
午後Ⅱ
問1
設問1
(1)
ア:ip1/29
イ:10.0.9.0/24
ウ:ポート番号
(2)32768
(3)追加WEBサーバのIPアドレス設定, FWのフィルタリング定義の更新
設問3
(1)Bindingレスポンスに格納されているIPアドレスが自分のIPと違うかで判定する。
(2)g2, p
(3)L2SW9, L2SW9
(4)
エ:AP
オ:STUNサーバ
設問5
(1)
サ:原因の特定
(2)
FQDN:1
グローバルIPアドレス:2
(3)WEBサーバ, STUNサーバ, IP-PBX
(4)LB
(5)マルチホーミングのインターネットアクセス
ブラウザを使ったAP間のビデオ電話
社外のAPから社内のIP電話機への通信
(6)ISP1とISP2で同じゾーンファイルが参照されるか。
(7)①, ①' ③④
教材
今回の試験のために読んだ本はこちら。
極選分析 ネットワークスペシャリスト 予想問題集 (予想問題集シリーズ)
- 作者: アイテックIT人材教育研究部
- 出版社/メーカー: 株式会社アイテック
- 発売日: 2016/04/28
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
トレーニング問題は基礎的な技術のしくみが理解できるようになっていて(過去問より難易度は低い)、良問です。
過去問を本格的にやる前におすすめの参考書です。
私は昨年、過去問を結構やっていたのですが、知識の整理のためにこちらを選択しました。
また、午前Ⅱの頻出問題もまとめられていて、数少ない午前Ⅱ対策本にもなっています。
試験前日に午前Ⅱの部分を読んだのですが、試験本番では進研ゼミのマンガように同じ問題が出て、これ一冊で十分でした。
ネスペ本も発売されたらすぐ買ったのですが、読む時間がありませんでした・・・。
ネスペ 27 礎 -ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)
- 作者: 左門至峰,平田賀一,山内大史,幸田廣信
- 出版社/メーカー: 技術評論社
- 発売日: 2016/04/09
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
Let's note S9 をSSDに換装してみた
私のメインPCはiMacなのですが、サブPCとして学生時代に買ったLet's note S9 CF-S9JYEADRを使っています。
- 出版社/メーカー: パナソニック
- 発売日: 2010/09/11
- メディア: Personal Computers
- クリック: 3回
- この商品を含むブログ (3件) を見る
たまにしか使わないのですが、最近は起動がかなり遅く、HDDランプがよく付きっぱなしになっていました。
2010年春モデルのため、もう6年前の機種のなので流石に買い換えようかと思っていたのですが、
少し調べてみると同じ機種を持っている方でSSDに換装すると快適になったという記事があり、私もやってみることにしました。
ちなみに今回の記事に書いてる内容はメーカーのサポート外となってしまう行為なので何かあっても自己責任となります( ´Д`)
また、Let's note S9 CF-S9JYEADRはWindows10のサポート外ですが私は勝手にアップグレードしていますw
準備したもの
- まず肝心のSSDですが、結構迷いました。検討したのはこのあたり。
Transcend SSD 480GB 2.5インチ SATA3 6Gb/s TLC採用 3年保証 TS480GSSD220S
- 出版社/メーカー: トランセンド・ジャパン
- 発売日: 2016/04/22
- メディア: Personal Computers
- この商品を含むブログを見る
Crucial [ Micron製 ] 内蔵SSD 2.5インチ MX300 275GB ( 3D TLC NAND / SATA 6Gbps / 3年保証 )正規代理店 CT275MX300SSD1
- 出版社/メーカー: Crucial
- 発売日: 2016/07/30
- メディア: Personal Computers
- この商品を含むブログ (1件) を見る
- 結局購入したのはインテルのこちらのものにしました。今のHDD容量(250GB)より少し多く、値段はちょっと高いです。
インテル SSD 540sシリーズ 360GB 2.5インチ SATA 6Gb/s TLC リセラーパッケージ
- 出版社/メーカー: インテル
- 発売日: 2016/06/07
- メディア: Personal Computers
- この商品を含むブログを見る
サンワサプライ IDE/SATA-USB3.0変換ケーブル 0.9m USB-CVIDE5
- 出版社/メーカー: サンワサプライ
- メディア: Personal Computers
- この商品を含むブログを見る
- そしスペーサーも忘れず購入。SSDはHDDより薄いため、その隙間を埋めるのに使います。
玄人志向 7mm → 9.5mm厚に変換 2.5インチHDD/SSDスペーサー KRSP-795
- 出版社/メーカー: 玄人志向
- メディア: Personal Computers
- この商品を含むブログを見る
- 当たり前ですがドライバーも必要ですのでない場合は購入します。私は古いHDDを廃棄するため分解するときに星形が必要だったのでドライバーを新しく購入しました。プラスマイナスもあるしこれ一式で大抵の作業は事足ります。
2万弱かかりましたが同じコストで新しいの買い換えるよりはコスパいい・・・はずw
古いHDDのデータをSSDにコピーする
古いHDDとSSDを交換する前に、古いHDDのクローン(データを丸ごとコピー)をSSDに作成します。
まず、SATA-USBケーブルでSSDとPCを接続したら、PCにSSDを認識させるためにディスクの初期化をおこないます。
- 初期化はこの内容でOK
SSDの初期化が終わったらデータ移行ソフトを使ってHDDのデータをSSDにコピーします。
今回はインテル製のSSDなのでインテル公式のソフトを使いました。
downloadcenter.intel.com
- ユーザー登録は任意なので"Register Later"を選択。
- 「ディスクのクローン作製」を選択。
- クローンモードは自動を選択。
- クローン適用後のディスクの状態を確認したら、実行します。
これで放置していればディスクのクローンが作成されます。今回は2時間ほどかかりました。
一応再起動してちゃんとクローンが作成されているか確認してみたほうがいいと思います(PCにはSSDがローカルディスクとして認識されているのでエクスプローラから確認できるはずです)。
SSDの換装
ついにSSDの換装ですが、こちらのサイトが詳しく書かれているので参考にさせていただきました。
というわけで詳細はこちらをご覧くださいw
zigsow.jp
30分もあればできると思います。
換装が完了したらいつものように電源を入れれば以前と同じ状態でPCが起動するはずです。
ついでにメモリの増設
公式では最大4GB(デフォルト2GB+増設用スロットに2GB)なのですが、バッファローによると6GBまで動作を確認してるみたいです。
[http://buffalo.jp/search/pcnew/index.php?id=71021&category=2&type=4&form_name=taiou&action_index_detail=true:title]
というわけで4GBのこちらを購入し、以前増設した2GBのメモリと交換しました。ちなみにデフォルトの2GBメモリはPCを分解しないと交換ができません。
BUFFALO ノートPC用増設メモリ PC3-10600(DDR3-1333) 4GB D3N1333-4G/E
- 出版社/メーカー: バッファロー
- 発売日: 2010/10/30
- メディア: Personal Computers
- 購入: 30人 クリック: 172回
- この商品を含むブログ (1件) を見る
結果
起動(ログイン画面が出るまで)が約2分30秒から約10秒になりました。また、HDDランプが付きっぱなしでモタモタすることもなくなりました。
ベンチンチマークソフト"CrystalDiskMark"による速度測定結果を見てもその差は歴然です。
- 換装前
- 換装後
SSDの性能は素晴らしいですね。今回の換装でかなり動作が軽くなり、快適になりました。
買い換えようと思っていたノートPCですが、これでもうしばらく使えそうです。
.Net Framework 4.xでDebug Viewを使ってデバッグ出力を確認する
Windowsアプリを開発してデバッグする際、開発環境のない他のコンピュータ上でプログラムを実行してデバッグ出力を確認したい時があると思います。
C++ではOutputDebugString、C#ではSystem.Diagnostics.Debug.WriteLineやSystem.Diagnostics.Trace.WriteLineなどを使うことでVisual Studio上でデバッグ出力を確認できます。
しかし、とりあえず処理が想定通り行われているか確認したいだけのとき、いちいちVisual Studioをインストールするのも面倒です。
また、人のコンピュータを借りてテストするときなど、何らかの理由でVisual Studioを入れることができない状況もあるのではないでしょうかw
そんなときに役立つのがDebug Viewです。
technet.microsoft.com
Debug View(インストール不要)を実行しておけば、Visual Studioなどの開発環境がなくても実行中のWindowsプログラムのデバッグ出力を確認できます。
しかしC#で.Net Framework4.x環境の場合、そのままではDebug Viewでデバッグ出力を確認できません。
そんなときはDebug Viewの[Capture] - [Capture Global Win32]にチェックを入れ、C#のプログラムに
System.Diagnostics.Debug.Flush();//System.Diagnostics.Debug.WriteLineを使う場合
または
System.Diagnostics.Trace.Flush();//System.Diagnostics.Trace.WriteLineを使う場合
を記述します。
例えば、
System.Diagnostics.Debug.Flush() System.Diagnostics.Debug.WriteLine("Hello!"); System.Diagnostics.Debug.WriteLine("This is a debug message.");
という感じに記述すればDebug Viewでデバッグ出力を確認できます。
DMM英会話でレッスンを受けてみた
スピーキングの練習はやはり誰かと話すのが一番な気がします。ということで以前から気になっていたDMM英会話のレッスンを受けてみました。
eikaiwa.dmm.com
会員登録から予約まで
新規会員は無料で25分のレッスンが2回受けられるので、お試しで会員登録ました。登録は簡単で、性別と生年月日、ニックネーム、SkypeのIDを入力するだけでした。
会員登録が終わると早速レッスンの予約画面へ。
オンライン英会話サービスはフィリピン人しか講師がいない場合が多いらしいのですが、DMM英会話は講師の国籍が多彩なのが強みのようです。
しかしレッスンの予約画面を見ると、予約できる講師はほとんどフィリピン人かセルビア人でした。アメリカ人やイギリス人の講師は人気で予約が埋まっていたようです(;´Д`)
デフォルトでは人気順(どういう基準?w)にソートされているのですが、3ページ目くらいにいるフィリピン人の女性講師を選びました。
講師を選ぶときは、プロフィールを見たり、過去にレッスンを受けた人からの評価を見れるので自分に合う講師を選ぶことができるんではないでしょうか。
講師と日時を選んだら、レッスンの内容の選択です。フリートーク以外に提携教材を使ったり、講師におまかせしたり、自分で用意した教材を送ったりと自由にできるようです。
私は初級者用の瞬間英作文という提携教材を選びました。ちなみにしゃべる速さ、発音や文法で変なところ指摘するかどうか、自己紹介の有無なども指定できます。
レッスン当日
レッスン開始時間の15分前くらいに予約した講師からSkypeの連絡先追加のリクエストが送られてきました。もちろんすぐに承認。
そして予約した時間になると講師からSkypeのコールがかかってきました。このときSkypeの仕様で音声のみの通話(講師の顔は見える)かビデオ通話か選べるので顔を見せたくない方でも安心ですw
私は瞬間英作文を使ったレッスン指定していたので、講師が読む英文(10個)に続いて自分が読む→自分で日本語文(先ほどの英文の日本語訳)を英語に訳して読む→講師が文章をランダムに指定し、それを英語に訳して読む、という流れでした。
教材の内容自体は中学1年レベルだったので簡単でしたが、自己紹介やアドバイスで講師が言ったことがよく聞き取れなかったりすると"No problem."と言ってチャットでその文章を書いてくれました。
そんな感じで25分のレッスンが終了。
まとめ
やはりSkypeで好きな時間に自宅で気軽にできるのは魅力だと思います。
フィリピン人と話すのは初めてだったのですが、いままで聞いてきた英語(アメリカ英語)と違うという感覚は特にありませんでした。
25分という時間も絶妙で長すぎず短すぎずという感覚です。
レッスンは自由度が有り、講師も親切だったのでとりあえず一ヶ月続けてみようと思います。
ちなみに料金体系はこちら。
私は1日1レッスンのプラン(約5000円)にする予定です。
続けていく中で気づいたことがあったらまたレポートしたいと思います。