2018年9月4日火曜日

ノートなLenovoのCPUを交換してみた

レノボのG580のCPUを交換してみました。

もともとはCeleronだったんですが、Core i7-2670QMを入れました。

このPCは以前にも

メモリ 4GB ⇒ 8GB
ディスク HDD ⇒ SSD

というように変更してみましたが、最も効果があったのはSSDでした。
とはいうものの、重たいプログラムではやっぱりCore i7は早くていいですね。

今回はG580はCPUの交換の様子を紹介します。

はじめに裏にあるロックを解除して、バッテリーを外します。

ねじを外します。

1つねじを外すとドライブがスライドできるので、外しておきます。

キーボードはマイナスドライバーでこじると外れました。
結構大変でしたが、右上から左上に進めていくとやりやすいかも。

キーボードの配線はつながっている黒の部品を立てると簡単に外れます。

ねじを外していきます。

中央のネジがシールで隠されているはずですが、なぜか初めからずれていました(笑)

マザーボード外すために、この2つの配線を外しておきます。

こっちも外しておきます。

ボディーを外しました。これも大変。マイナスドライバーで丁寧に外します。

裏返して、ネジをとってスライドさせるとSSDが外れます。

この部品も外しておきます。

ネジをいくつか外すとマザーボードが外れます。

CPUを覆っている3つのネジを外します。

黒のネジを回すとロックが外れます。

左がCore i7、右がCeleron。


CPUを外すとこんな感じです。


グリスを塗ります。


あとは手順を逆にして組み立てれば完了!!

2018年8月18日土曜日

MacのIDLEのスクロールがおかしい時の対処法

IDLEでファイルを開いてスクロールしようとするとスクロールが下にばかり行ってしまいました。

これはバグだわと思い、ネットで対策を調べて見ました。

バグ管理しているサイト(https://bugs.python.org)
のIssue34047に解決策がありましたので、試して見ました。

直すファイルは
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/idlelib/editor.py
らしいです。



461から462行目を修正します。カッコを追加するだけです。

修正前
up = {EventType.MouseWheel: event.delta >= 0 == darwin,
EventType.Button: event.num == 4}

修正後
up = {EventType.MouseWheel: (event.delta >= 0) == darwin,
EventType.Button: (event.num == 4)}



全く時代と空気を読まない修正ですが、コミットしないしいいよね。。。

再起動させたら治りましたー!!

MacのIDLEに日本語が入力できない件

今更気づきましたが、IDLEで日本語が入力できませんでした。

そういえばワーニング出てたなー
"WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable.
Visit http://www.python.org/download/mac/tcltk/ for current information."



めんどくさいのでそっと閉じてましたが、対応することにしました。
サイトを見にいけってことなので、見に行きました。

今の環境は
Python 3.6.5
Tcl/Tk 8.5.9


今の最新版で正常に動くのは
Python 3.7.0
Tcl/Tk 8.6.8

とのことなので、両方バージョンアップすることにしました。

"macOS 64-bit installer"をインストールして見ました。

ちゃんとPython 3.7.0とTcl/Tk 8.6をインストールするって書いてますね。


インストールできました。

警告も表示されなくなったし、ハローワールドが表示されました。

2018年8月5日日曜日

Oracle Database(12c)をWindowsにインストールした件

データベースを入れてないのに気付いてしまったのでインストールすることにしました。
なんでもいいけど、何となくOracleにします。

久しぶりに迷路のようなOracleのHPに訪れてビックリ。
新しいのが出てる。
11g ー>12cー>18c

13はどこ行った?
はい、分かりましたよ!!
西暦に合わせて、絶え間なき陳腐化をアピールしよって魂胆ですね。

・・・さて、はじめますか。
今回はOracle Database 12c Release 2をインストールします。(ユーザ登録が必要!!)
ついでにOracle SQL Developerも軽く設定しときます。

winx64_12201_database.zipをダウンロードして、ZIPを解凍します。

winx64_12201_database\database\setup.exe を実行します。

セキュリティ・アップデートのチェックを外します。


[はい]をクリック

データベースの作成および構成を選択して、[次へ]をクリック

デスクトップを選択して、[次へ]をクリック

Windows組込みアカウントを選択して、[次へ]をクリック

[はい]をクリック

インストールする場所を設定する。
Program FilesとかUsersはやめておく方が無難。パスに日本語が含まれるのも危険。(らしい)

[インストール]をクリック


インストールが始まる・・・

ファイアウォールの警告が出たら、アクセスを許可する。
そして待つ・・・

進捗が70%の時が、とても長い。。。
でも、一応完了する。



次はちょっとだけOracle SQL Developerを設定します。
スタートボタンに出てくるのですぐ見つかりますが、パスはこちら
C:\oracle\product\12.2.0\dbhome_1\sqldeveloper\sqldeveloper\bin\sqldeveloperW.exe

起動しました。

左上のプラスボタンから接続します。

こんな風に入力。接続名は適当でOKです。
パスワードはインストールの時に決めたの同じでOK

ユーザの一覧を表示してみました。

2018年7月29日日曜日

データベースにNULLがあったらなんか悪いの?な件

ちなみに私は全くNULLがないデータベースを見たことはありません。
それが課題だという認識を持ってるチームも見たことありません。
一方で、NULLだらけのテーブルは山ほど見ました。
なのに、NULLはだめでしょ。っていう意見も多いようなので調べてみました。


【そもそもNULLって何か?】
1.「値が不明」、「値がない」状態を示すための目印。
2.どのようなデータ型でもNULLをとり得る。
3.プログラミング言語のNULLポインタとは別物。
4.値ではない。


【NULLの弊害】
1.NULL様専用に条件の記述が必要
 「NULL + 10」も「NULL < 10」も、「NULL || '10'」も全部NULLになるので
 「SELECT name FROM member WHERE branch <> 10 OR branch IS NULL」
 のように書くことが増えます。

2.実行計画の最適化が難しくなる
 要するにオプティマイザのパフォーマンスが悪くなるということ。


【え、それだけ?】
アクセスが多いシステムでもないし、システム改修のときは、NULLを覚悟で既存のテーブルに項目追加する方が楽だね。ってなるのはわかるような気がします。


【理想と乖離する根本原因】
WBSしか興味ないPMと、工学的な意味でシステムがわかってないSEと、訳も分からず派遣された若手の下請けPGの組み合わせでは、わざわざ影響調査してデータベースとプログラムをリファクタリングしてNULLを撲滅しましょうっていう話にはならないでしょうね。動けばいいんです。

2018年7月21日土曜日

MacにBlenderをインストールしてみた

将来的に3Dプリンタで何か作ってみたい!!
ということで、3DなCDソフト「Blender」をインストールすることにしました。
中学生ぐらいの時に一回やってみて、すぐ挫折したのでリベンジです。
細かい作業は嫌いです。

ダウンロードサイト「https://www.blender.org/download/」にアクセスします。

インストーラを起動(隠しファイルが見えちゃってますね)















できたファイルに「blender」と「blenderplayer」がありますが、「blender」が正解です。














やっぱり表示が英語だと困るので、日本語にします。

[File] -> [User Preferences]で設定画面を表示します。
[International Fonts]をチェックして、[Default (Default)]をクリックします。

















日本語を選択して、[Interface]、[Tooltips]、[New Data]をそれぞれクリックします。

















最後に、[ユーザー設定の保存]をクリックして完了です。










2018年6月3日日曜日

結局、システムの設計書って何書けば良いの?っていう件

僕はいくつかシステムやチームに参加させてもらいましたが、驚くほど、

設計書がコスパ悪い。。。

個人的にはで、ドキュメントとして成立してないことも往々にしてあると思ってます。
そこそこ工数とってやってる訳ですから、情報資産としてイケてる設計書を作りたいのです。


という訳で、今回はそもそもなぜシステムの設計書は得てして微妙なのか考えてみました。

【微妙だと思うところ① 実装と整合性が取れていない】
これ出来てないと意味無いと思うんですけど、ちゃんとするの難しいし、もはや違ってて正常な空気すらあります。
内部設計が微妙な場合はたぶん、こういう状況でしょう。

外部設計作る→内部設計作る→内部設計間違っとるぞと思いながら正しいだろう実装をする→修正の時間ないOR忘れるOR製造終わったし放置でよくね?OR運用さん宜しく

僕は根本原因はWBSにあると思うんですよね。
実装が遅れるとか、仕様が変わるとかはリスク高いので考慮してますけど、
ユーザーへの資料でもないし実装できちゃうし、考慮してないですよね。
WBSになければ、時間ないし忘れちゃうでしょう。
内部設計が間違ってるのが分かるのは製造や単体テストのフェーズなんで、ウォーターフォール自体が失敗してるというのもWBSに書きにくい理由ですかね。
運用さん宜しくってのは、どのチームでも出来ることじゃ無いですよね。ソース読めない人もいますし。属人化やらしてるレベルだと優先順位は最下位でしょうね。


【微妙だと思うところ② 資料多すぎ。しかも断片的】
システムが大きくなれば、資料が増えるのは分かりますけど、必要以上に多くなってませんかね。例えば、プロジェクトごとに資料を新規作成している場合。
特に、システムの変更箇所のみ設計書作るとか。

2003年 [基本設計書]リンゴ画面表示対応.xls
                詳細画面の中央にリンゴを表示する。

2004年 [基本設計書]リンゴ画面表示個数変更対応.xls
                詳細画面の中央にリンゴを5個表示する。

2005年 [基本設計書]オレンジ画面表示対応.xls
                詳細画面にオレンジを2個表示する。 ※リンゴ画面表示個数変更対応.xls参照

2007年 [基本設計書]画面表示切替対応.xls
                詳細画面に表示する果物をラジオボタンで切替可能にする。

2010年 [基本設計書]詳細画面改修対応.xls
                詳細画面のラジオボタンをプルダウンに変更し、管理者はバナナを選択可能にする。

2011年 [外部設計書]果物管理システムリプレース対応.xls
                果物管理画面の下部に備考欄を追加する。※要件定義書を参照

2015年 [外部設計書]みかん個数入力欄追加対応.xls
                果物管理画面の上部にみかんを表示し、個数入力欄を追加する。

。。。で、結局全体としてはどうなっちゃったの?よくわからんから、システム触ってみよ。
となるパターン。
上記の場合だと、画面名や果物名もしれっと変わってるし、バナナがどこに書いてあるのか調べるのは大変でしょう。過去の資料を参照にすると、陳腐化して使い物にならん資料も大事にとっとかないといけない。それと資料間の境目的な仕様の記載が漏れがち。実は2007年時点で果物の表示は全て1個でした。とか色々出てくる。
そして将来は、みかんの個数だけインサートするテーブルが多いとかベテランしか知らない状況が生まれるんでしょうね。


【微妙だと思うところ③ 肝心なところがスカスカ】
詳細設計書に一生懸命ロジックを書くと、保守が大変なのか手を抜いてることがありますね。文章にしにくいときもあるのでこれも難しいところ。

詳細設計書曰く、
 詳細リスト取得・・・リンゴ、バナナ、オレンジについて詳細マスタからデータを取得する。

ソースコードは、
public class L001001 extends BusinessLogic {
    public void getDetailList(String userId, InfoTable info){
        switch(info.fruitsId) {
            case Const.APPLE:
                addApple();
                break;
            case Const.ORANGE:
                if(SystemUtil.getServiceID(SystemConst.S01).equals(info.serviceId)) {
                    if(!CommonUtil.isEmpty(SystemUtil.getCustomData("REMARK", "S01"))){
                        try {
                            getRemark();
                        } catch(BLException e) {
                             exceptionHander.add(e);
                        }
                    }
                }
                addOrange();
                break;
            case Const.BANANA:
                addBanana();
                break;
        }
        addRemark();
    }
}

適当だけど、こんな風になってたりする。
あれ、オレンジの時だけなんかやってるじゃん。リンゴはしなくていいの?
みたいな。嫌ですね。経験上、設計書がザルすぎるところは単体テストも適当。
かといって、10Kステップあったら設計書に10K行書くのも嫌です。
設計書とか関係ないけど、個人的には何でもかんでもメソッドの型がvoidなのは本当に見る気失せます。



ということで、努力目標程度ならまだしも、設計書とプログラムをバッチリ辻褄合わせるのって、本当に難しいし、そこに時間やら人やらつぎ込むのは、たぶん無理というか無駄。資金が潤沢にあればいいレベルまで持ってこれるでしょうが、UI設計とかテストとかに時間使った方が、ユーザは喜ぶと思うんですよね。

この件について、私なりの結論は、

詳細設計だか内部設計だか知らないが、ソースコードに吸収されてしまえ。

です。
詳細の記載場所はJavadocとかコメントとかにして、概要とか全体像は資料にしておく方がいいと思うので、基本設計書はしっかり作るべきです。