なかなかどうして、この有様よ。

へたれ系PG/SEの技術系メモ+育児日記。

母親になりました。

というわけで、唐突ですが今年の4月に出産しまして、母親になりました。
そのため、これからは妊娠や育児のことについても書いていこうかなと思います。

ということで、ざっくりと妊娠中と出産時のことなんかをメモ程度に。

妊娠中のこと

  • 体質的につわりが軽かったため、職場で公表するまで気付かれず。
    会話で「つわり軽くてー」みたいな事を言うと「けろっとしてましたもんね」と同僚に言われる。
  • 血圧が高いときがあるので、日々血圧を測るように言われる。
    簡単に判ればいいかと手首式の血圧計を買ったけども測るのをよく忘れる。
  • 併せて体重管理をするように言われる。
    なんとか+8kgでおさえたが、本当は+5kgと言われていたのでつらい。

出産のこと

  • 予定日は4月下旬だったが、何故か4月頭に破水して翌日出産。
  • 陣痛の間隔がなかなか1分間隔にならなくて、促進剤を利用。
    結果、出産に12時間かかる。
  • あと、血圧が高いので最後までいきむことが出来ず、陣痛の痛みを深呼吸で逃すという状態に。
    叫ぶ事はなかったが、他の妊婦さんの絶叫が廊下こだましていた記憶が。
  • 36週で出産なので早産にあたるが、体重が2500gを超えていたので問題なしと言われる。
    2500g未満だと低体重児になるよう。
  • 会陰切開は想定していたが、産道も結構切れていたようで産後に色々と縫われる。
    まともに座れなくて円座クッションが必須に。

今月には1ヶ月健診もお宮参りも終わったので、次は初めての予防接種です。

MacBook Air (11-inch, Mid 2011)のSSDを換装する。

メインマシンとして、MacBook Air (11-inch, Mid 2011)をずっと使っています。
もう5年くらいになるでしょうか。
で、その程度使うとどうしてもSSDの容量が足りなくなるわけで。
128GBだったのですが、もうそれもいっぱいいっぱいで「容量減らしてよ!(意訳)」とマシンに怒られまくるわけです。
起動速度や処理速度はそんなに気にならなかったので、使えるようにとなるべく減らしてもそんなに容量は減らない。。。
まだ使えるといいのにな、と思っている側としてはとても困った問題です。

で、色々と調べてみると、Transcend JetDriveを使ってSSDを換装出来る、とのこと。
今回はとりあえずほぼ倍にあたる240GBのものを購入し、SSD換装を行うことにしました。
※ただし、Appleの保証対象外になるので、行う場合は自己責任でお願いいたします。

全体でかかった時間は3時間くらいですかね。
内訳はだいたい以下の通りです。

  • SSDのフォーマット:5分程度
  • SSDへのマシンデータ復元:2時間半程度
  • SSDの換装:20分程度
  • マシンの動作確認:5分程度

また、Transcend JetDriveを購入する場合は、マシンと対応するSSDを選んで購入してください。
Amazonで調べると対応表がありますので、そちらと比較してください。
マシンの情報はメニューのリンゴマークから「このMacについて」を選択し、「概要」タブを選択すると確認できます。

手順1:交換するSSDをフォーマットする

まず、購入したTranscend JetDriveをフォーマットします。
基本的には封入されている手順書の通りに行えば問題ありません。

  1. 交換するSSDを付属のケースにセット。
    ※ドライバなどは付属しているのでそちらを利用してください。
  2. ケーブルを接続し、電源をオフしたMacBook Airに接続して、電源をオン。
    その際にcommand+Rキーを長押しし、ユーティリティ画面が起動するまで押下し続ける。
  3. ユーティリティ画面が起動したら、「ディスクユーティリティ」を選択する。
  4. サイドバーの「JetDrive Transcendを選択して、上部にある「消去」タブを選択する。
  5. SSDの名称を設定し、フォーマットとスキームを設定する。
  6. 設定したら「消去」ボタンを押下してフォーマットする。

これで、交換するSSDのフォーマットが完了です。

手順2:交換するSSDにマシンの内容を復元する

フォーマットが完了したら、今度はマシンの内容をSSDへ復元(コピー)します。

  1. メニューバーから「編集」を選択し、「復元」を選択する。
  2. ソースとして、「Macintosh HD」を選択する。
  3. 「復元」ボタンを押下して、復元を行う。

復元が完了すれば、これでSSD換装の準備は完了です。

手順3:SSDを換装する

交換するSSDへマシンのデータを復元(コピー)したら、今度はSSDを換装します。

  1. 交換するSSDをケースから外す。
  2. マシンの電源をオフし、電源ケーブルを抜く。
    ※通電すると危ないですからね。
  3. 裏返し、裏蓋のネジを付属のドライバで外す。
    全てのネジの内、長いネジ2本は幅の厚い部分のネジなので、間違えないようにする。
  4. マシンのSSDを留めているネジを外す。
  5. 壊さないように丁寧にマシンのSSDを取り外す。
  6. 交換するSSDをセットし、SSDを留めていたネジでSSDを固定する。
  7. 裏蓋を戻し、ネジで固定する。

これでSSDの換装は完了です。

手順4:マシンの動作確認を行う

これでマシンが動かなければ意味はないので、マシンがエラー等吐かないか確認します。

  1. 電源ケーブルを接続し、電源を入れる。
  2. 起動したらメニューのリンゴマークから「このMacについて」を選択し、「ストレージ」を確認します。
    ※起動していたら多分問題ないはずですが、こちらでストレージ容量等が認識されているか確認してください。

これでストレージ容量が正しく認識されていれば全ての作業は完了です。
お疲れ様でした。

これでまだしばらくはこのMacBook Airを使えそうです。

仮想環境でWindows7を使う

プライベートではメインマシンにMacBook Airを使っています。
基本的にはこれ1台で事足りる生活をしておりますが、たまにMicrosoft Excelを扱うとなかなか使い慣れそうもなくて困っておりました。
メニュー周りとか見慣れないので探すのに手間取るんですよね。

で、ならば仮想環境でWindows7入れてExcel入れたらMacWindows出来るし、マシンを増やさなくてもいいんじゃないかと思ったのでした。

とりあえずMacBook AirVMをいれてみる

というわけで、とりあえずマシンにVMを入れるところから始めてみました。
VMと言えば色々とありますが、今回はOracleVMVirtualBoxをインストールしてみました。
何しろ無料ですし。

インストール自体はぽちぽちボタンを押してインストールするだけなので簡単でした。

次に、Windows7をインストールする、為の準備をする

勿体ぶりましたが、インストールするにも前もって準備がいりますからね。
ので、とりあえず持っていたWindows7インストーラーディスクをisoファイルとして抽出。

Windows7VMにインストールする。

その後、VMを起動してisoを起動ディスクとして設定し、Windows7を起動。
あとはちょちょいとExcelをインストールして完了です。

最後に

裏話的なことを。
上記のようにVMWindows7を入れたわけですが、
何も考えずにMacに乗せたら、空き容量全部食い尽くしてくれました。
なんだよVM用のファイル、合計30GBって。

仕方なしにMac上のファイルを削除し、新たにUSBメモリ(64GB)を買ったのですが、
FAT32フォーマットがファイルサイズ上限5GBとか知らなかったので
「あれ、インストール毎回失敗するわー、なんでやー???」 となっておりました。
無知コワイ。

BlackBerry Q5を中古で買いました。

前回、友人に乗せられてNokia Lumia920を買ったわけですが、
流石に公式が言う程度には重い訳です、物理的に。

で、軽い端末を探して見つけたのがBlackBerry Q5でした。
ちょうど中古が安かったのでそれを購入。

見た目

見た目はiPhone5sより小さめで、物理キーボードがあるために画面サイズは小さいですが大変持ちやすい。
しかもめちゃくちゃ軽い。 びっくりするほど軽い。

キーボード

ぱっと見、キーボード小さくて打ちづらいかも?と思ったのですが、
両手でぽちぽち打ってる分には全然不満はないです。
プチプチとボタンを押す感じが個人的にはとても好きです。

動き

で、動きもさくさくですし、何よりAndroidのapkが使えるのがいいですね。 しかも、apkをBOXとかDropbox経由、またはプリインストールのAmazon Appを使えばインストール可能というのもありがたい。

まぁ、敢えて言うならばGoogle Play のapkをインストールして頂きたいところ。
上記のAmazon Appだとインストール出来るapkが限られているので、見つからなかったりするんですよね。
あと、apkインストール出来ないやつとか、インストールしたけど起動出来ないとかもあるので、全部が全部apk使えるわけではないですが。
でもBlackBerryのアプリストアはあんまりアプリの数がないので、それを考えるとだいぶ使えるアプリが増えます。

ネットワーク

このQ5、実はLTE対応と書いてあるのですが、日本で扱ってる帯域と被ってないらしいので
結果としては3Gを使っている様な形です。
でも、ちょっとメール見て、Webページ見てって感じで使う分には不足ないです。

というわけで、新たなおもちゃが増えました。

JavaのString#substringによるメモリリーク。

今の案件では、単体テストフェーズでJTESTを実施するようになっているのですが、
そこでたまに出てくる

CODSTA.EPC.UST
  文字列の構文解析には、'indexOf()' や 'substring()' ではなく 'StringTokenizer' を使用する

という文言。

で、この辺なんでだろうと思ったら、どうもメモリリークを引き起こす可能性があるらしく。

String#substringによるメモリリークの可能性 - Qiita

String#substringは新しい文字列をnew Stringで生成するにも関わらず切り出し前の文字列を内部(のchar配列)で保持してしまっています。

本内容は通常は意識する必要はありませんが、巨大な文字列をsubstring操作する際はメモリリーク等につながる場合がありますので注意が必要です。 (String#splitにも同様の問題があります)

ということだったので、この記事を参考に修正をしました。
実際に直した際はこの書き方に修正。

String s3 = new String(s1.substring(5));

こういうのって「そうなんだー」とは思うけどなかなか「で、なんで?」を調べなかったりするのでメモメモ。

Javaでの日本語名ファイルのダウンロード。

先日、JavaでDBから取得したデータをCSVファイルにしてダウンロードしたいという要件があったわけですが。
ファイル名が日本語指定で、なにも考えずにIEでダウンロードしたらファイル名が文字化けしておろろ、という感じに。

で、色々調べてみました。
ダウンロード時のヘッダとして以下を設定すると上手くいきました。

response.setHeader("Content-Disposition", "attachment; filename=" + new String("ファイル名.csv".getBytes("MS932"), "ISO-8859-1"));

他にも調べると色々方法があるみたいなので、確認して一番使いやすい方法を選ぶのがいいかも。

Oracleのstart with/connect byで、子から親へ逆順のツリーを取得する。


これを元にSQLを作成。
でも、今回は指定されたIDから親をたどって、自分とその親を全部取りたかったので、start with以降の部分を変えてみた。

通常だとこんな感じ。
select ID,OyaID,Level
  from IDTable
start with OyaID is null
connect by prior ID = OyaID;

今回はこんな感じ。
select ID,OyaID,Level
  from IDTable
start with ID = 7
connect by prior OyaID = ID;

通常のツリーとは逆順のツリーを作成して、自分(この場合ID=7)を基準に親コードを取得するように作成。

この発想が思い浮かばなくてだいぶ悩んだのでメモ。

ちなみに、別テーブルにIDと紐付く任意のデータがあって、それと結合してるときは外部結合しないと親のデータは取れないので注意。