【Ubuntu】Ubuntu Desktop 16.04 ~ MicroSDにインストールする手順 ~

Windows 10 のノートPCで、microSD カードに Ubuntu Desktop をフルインストールする手順を記載します。
Windows環境には影響を与えずに、microSD カード内に Ubuntu 環境を構築していきます。
以下の手順を実施すると、デフォルトで起動する OS を Windows または Ubuntu の好きな方に設定することができるようになります。

Ubuntuを導入する環境」
ThinkPad X1 Carbon 4th Signature Edition
Windows 10 home

「準備するもの」
・外付けDVDドライブ  http://pioneer.jp/pcperipherals/bdd/products/bdr_xd05bk2_r2_w2_sv2/
・DVD-R (データ用)   
microSD        https://www.teamgroupinc.com/jp/product/color-card
・USBアダプタ     http://buffalo.jp/product/peripheral/card-reader/bscrmsdc/
microSD と USB アダプタは、USBメモリでも代用可能です。

「目次」
1. microSDカードをフォーマットする
2. インストール DVD を作成する
3. 作成したインストールDVDからPCを起動する
4. MicroSDUbuntu をインストールする
5. BIOS の Boot Priority Order を設定する

1. microSDカードをフォーマットする
USBアダプタにmicroSDカードを装着して、USBポートに挿す。
ファイルエクスプローラーのデバイスとドライブで、挿入したMicroSDカードを右クリックする。
フォーマットをクリックして、クイックフォーマットにチェックを入れてOKをクリックする。

2. インストール DVD を作成する
2.1 ISOイメージをダウンロードする
以下のサイトから、ubuntu-ja-16.04-desktop-amd64.isoをダウンロードする
https://www.ubuntulinux.jp/download/ja-remix
2.2 外付けDVDドライブをPCに繋いで、データ用DVD-Rを入れる
2.3 ISOイメージをDVD-Rに焼く
ダウンロードした、isoイメージを右クリックして、プログラムから開く > このPCで別のアプリを探すをクリックする。
f:id:hatehate_masaki:20180913000049p:plain
isoburn.exeを選択して開く。
f:id:hatehate_masaki:20180913000112p:plain
書き込みをクリックする。
f:id:hatehate_masaki:20180913000143p:plain

3. 作成したインストールDVDからPCを起動する
コントロールパネル > 電源オプション > カバーを閉じたときの動作 から、現在利用可能でない設定を変更します をクリックする。
f:id:hatehate_masaki:20180913000417p:plain
高速スタートアップのチェックを外す。
f:id:hatehate_masaki:20180913000443p:plain
PCを再起動して、起動ロゴ表示中にF12を押下して、DVDからブートする。
f:id:hatehate_masaki:20180913000509p:plain

4. MicroSDUbuntu をインストールする
Try Ubuntu without installing を選択してEnter
f:id:hatehate_masaki:20180913000635p:plain
デスクトップでインストールアイコンをダブルクリックする
f:id:hatehate_masaki:20180913000707p:plain
サードパティソフトウェアをインストールするのチェックを外して、続ける
(※ ココにチェックが入っていると古いPCで Ubuntu OS を起動した場合に失敗する恐れがあるため)
f:id:hatehate_masaki:20180913000744p:plain
インストールの種類は、"それ以外" を選択する
f:id:hatehate_masaki:20180913000830p:plain
sdaの部分はいじらない。/dev/sdbの部分を変更する
f:id:hatehate_masaki:20180913000845p:plain
パーティション3: Ubuntu OS用
パーティション2: swap領域
パーティション3: Windows とファイル共有用
f:id:hatehate_masaki:20180913001025p:plain
インストール開始
f:id:hatehate_masaki:20180913001042p:plain

5. BIOS の Boot Priority Order を設定する
Ubuntu のインストール完了後に、再起動を求められるので、再起動中に F12 を押下して、OSの起動優先度を設定する
Ubuntu のインストール後は Ubuntu が1番になっているので、デフォルト起動を Windows にしたい場合は Windows Boot Manager を1番上にする)
f:id:hatehate_masaki:20180913001136p:plain


お疲れさまでした。以上ですべて完了です。
MicroSDカードを持ち運ぶことで、外出先でもUbuntu環境を利用できるようになりました。

JavaScript スコープとクロージャ

スコープとクロージャの例

var logElementNumber = function(len) {
    var funcArray = [];
    var i;
    // 1.0 まだ解釈されない。
    var func = function(n) {
        return function() {
            console.log(n, i);
        };
    };

    for (i = 0; i < len; i++) {
        // 1.1   i:0 len:3
        // 1.2   i:1 len:3
        // 1.3   i:2 len:3
        funcArray[i] = func(i);
        // 1.1.1  i:0 → var func = function(0) {
        // 1.2.1  i:1 → var func = function(1) {
        // 1.3.1  i:2 → var func = function(2) {
        // この時点では、 console.log(n, i); の n は決定している。
        //               console.log(n, i); の i はundifine
    }
    // funcArray[0]の中では、iはundefineのまま関数が定義される。
    // funcArray[1]の中では、iはundefineのまま関数が定義される。
    // funcArray[2]の中では、iはundefineのまま関数が定義される。
    // ※funcArrayを返却したときには、iは3または5になっている。
    return funcArray;
};

// 1. 定義
var myArray1 = logElementNumber(3);
var myArray2 = logElementNumber(5);

// 2. 実行
//   funcArray[x]の中では、iはundefineであるが、
//   ※印の時には、3または5になっているので、以下の実行結果となる。
myArray1[0](); // 結果: 0 3
myArray1[1](); // 結果: 1 3
myArray1[2](); // 結果: 2 3
myArray2[0](); // 結果: 0 5
myArray2[1](); // 結果: 1 5
myArray2[2](); // 結果: 2 5

www.oreilly.co.jp

【Ubuntu】Windows端末にLinux環境構築

Windows端末にVirtualBoxを使ってLinux環境を構築する手順を記載します。
ホストOS(Windows)からゲストOS(Ubuntu)にSSH接続可能な状態に設定します。


「導入環境」

  • Windows10 home 64bit (lenovo x1 carbon)


「インストールするソフトウェア」


「目次」

  1. VirtualBoxをインストー
  2. 仮想マシンを作成
  3. Ubuntuをインストー
  4. 仮想マシンを設定
  5. UbuntuSSH設定
  6. ホストOSからゲストOSにSSH接続


「手順」
1. VirtualBoxをインストー
インストーラをダブルクリックして、すべて"Next"でOKです。

f:id:hatehate_masaki:20170626234831p:plain

f:id:hatehate_masaki:20170626234852p:plain

f:id:hatehate_masaki:20170626234912p:plain

f:id:hatehate_masaki:20170626234923p:plain

f:id:hatehate_masaki:20170626234937p:plain

f:id:hatehate_masaki:20170626234949p:plain

f:id:hatehate_masaki:20170626235000p:plain



2. 仮想マシンを作成

  • 新規をクリック

f:id:hatehate_masaki:20170627000149p:plain

f:id:hatehate_masaki:20170627000200p:plain

f:id:hatehate_masaki:20170627000243p:plain

f:id:hatehate_masaki:20170627000253p:plain

f:id:hatehate_masaki:20170627000303p:plain

f:id:hatehate_masaki:20170627000532p:plain

f:id:hatehate_masaki:20170627000546p:plain



3. Ubuntuをインストー
[光学ドライブ]空をクリックして、ダウロードしたOSイメージを選択する。

f:id:hatehate_masaki:20170627001434p:plain

f:id:hatehate_masaki:20170627001634p:plain

詳細は以下のサイトに書いてありました。

Ubuntu 16.04 LTS : インストール : Server World


4. 仮想マシンの設定
作成した仮想マシンを右クリック > 設定
ポートフォワーディングの設定を行う。

f:id:hatehate_masaki:20170627002350p:plain



5. UbuntuSSH設定
openssh-serverをインストールして、22番(SSH)ポートを有効にする。

f:id:hatehate_masaki:20170627002810p:plain

サブウィンドウで以下のコマンドを実行する。
> sudo apt-get install openssh-server
> sudo ufw allow 22


6. ホストOSからゲストOSにSSH接続
puttyをインストールして、起動する
f:id:hatehate_masaki:20170627003812p:plain

接続先IPは、コマンドプロンプトでipconfigして確認してください。
f:id:hatehate_masaki:20170627004035p:plain

以下のようにSSH接続が出来れば完了です。
f:id:hatehate_masaki:20170628231453p:plain


以上です。お疲れさまでした。^^

Bean型のリストから特定のフィールドを抜き出して、Integer型リストに変換する

package trial;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Loop {

    public static void main(String[] args) {

        /******************************************
         * ループ処理いろいろ
         *  HogeBean型のリストから、Integer型のリストを作る
         *  HogeBean
         *  - private int id
         *  - private String password;
         *  - String name;
         ******************************************/

        List<Integer> idList;
        List<HogeBean> hogeList = new ArrayList<HogeBean>();

        int cnt = 0;
        while (cnt < 5) {
            HogeBean hogeBean = new HogeBean();
            hogeBean.setId(cnt);
            hogeList.add(hogeBean);
            cnt++;
        }

        /********************
         * Java5より前の場合
         ********************/
        // 普通のfor文
        idList = new ArrayList<Integer>();
        for (int i = 0; i < hogeList.size(); i++) {
            idList.add(hogeList.get(i).getId());
        }

        /********************
         * Java6 ~ Java7の場合
         ********************/
        // 拡張for文
        idList = new ArrayList<Integer>();
        for (HogeBean hogeBean : hogeList) {
            idList.add(hogeBean.getId());
        }

        /********************
         *    Java8の場合
         ********************/
        // Stream ラムダ式
        idList = hogeList.stream().map(hogeBean -> hogeBean.getId()).collect(Collectors.toList());

        // Stream コロコロ式
        idList = hogeList.stream().map(HogeBean::getId).collect(Collectors.toList());
    }
}

【Visual Studio Code】 プロジェクトを複数開く

Visual Studio Codeでプロジェクト(フォルダ)を複数開く方法 ~

1. バージョン 1.12.1 win版
f:id:hatehate_masaki:20170515232204p:plain

2. プロジェクト(フォルダ)を複数開く
ctr + shift + n

論理的思考テスト【回答】

Javaで思いついたまま書きました。
ダメだし、他の方法、他の言語での回答、お待ちしています。^^

package main.java;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class Logical {

    /*
     * 9つの鉄球の中から、重さの異なる1つの鉄球を、天秤を3回だけ使って
     * 特定せよ。
     */
    public static void main(String[] args) {

        /*
         * 1つのだけ重さの異なる9つの鉄球を準備する。
         */
        ArrayList<Integer> array = new ArrayList<Integer>();

        Random rnd = new Random();
        int onlyNum = rnd.nextInt(10);
        int standardNum = rnd.nextInt(10);

        while (standardNum == onlyNum) {
            // 標準とは異なる重さの鉄球を入れる
            onlyNum = rnd.nextInt(10);
        }

        int cnt = 0;
        while (cnt < 8) {
            // 8個の標準の重さの鉄球を入れる
            array.add(standardNum);
            cnt++;
        }
        // 1個の重さの異なる鉄球を入れる
        array.add(onlyNum);
        // シャッフル
        Collections.shuffle(array);

        // 中身を表示
        cnt = 0;
        while (cnt < 9) {
            System.out.print(array.get(cnt) + " ");
            cnt++;
        }

        /*
         * 9つの鉄球の中から、重さの異なる1つの鉄球を、天秤を3回だけ使って
         * 特定する処理
         */
        int ans;
        ArrayList<Integer> groupA = new ArrayList<Integer>();
        ArrayList<Integer> groupB = new ArrayList<Integer>();
        ArrayList<Integer> groupC = new ArrayList<Integer>();
        for (int cnt3 = 0; cnt3 < 3; cnt3++) {
            // 0, 1, 2
            groupA.add(array.get(cnt3));
            // 3, 4, 5
            groupB.add(array.get(cnt3 + 3));
            // 6, 7, 8
            groupC.add(array.get(cnt3 + 6));
        }
        int totalA = groupA.get(0) + groupA.get(1) + groupA.get(2);
        int totalB = groupB.get(0) + groupB.get(1) + groupB.get(2);
        int totalC = groupC.get(0) + groupC.get(1) + groupC.get(2);

        // 【1回目】 ・・・ グループAとグループBを天秤にかける
        if (totalA == totalB) {
            // つりあった場合は、重さの違う鉄球はグループCにいる
            int groupC_a = groupC.get(0);
            int groupC_b = groupC.get(1);
            int groupC_c = groupC.get(2);
            // 【2回目】
            if (groupC_a == groupC_b) {
                // つりあった場合は、重さの違う鉄球は、groupC_cです。
                ans = groupC_c;
            } else {
                // 不釣り合いの場合は、重さの違う鉄球は、groupC_aかgroupC_bです。
                // 【3回目】
                if (groupC_c == groupC_a) {
                    ans = groupC_b;
                } else {
                    ans = groupC_a;
                }
            }
        } else {
            // 不釣り合いの場合は、重さの違う鉄球はグループAかグループBにいる
            // Ptn1 グループA > グループB ・・・ Aに重い鉄球がいるか、Bに軽い鉄球がいる
            // Ptn2 グループA < グループB ・・・ Aに軽い鉄球がいるか、Bに重い鉄球がいる
            // 1回目の天秤測定で、Pnt1かPnt2かは分かっている。

            if (totalA > totalB) {
                // Pnt1の場合 ・・・ Aに重い鉄球がいるか、Bに軽い鉄球がいる
                // 【2回目】
                if (totalC == totalA) {
                    // つりあった場合は、重さの違う鉄球は、グループBにいる
                    int groupB_a = groupB.get(0);
                    int groupB_b = groupB.get(1);
                    int groupB_c = groupB.get(2);
                    // 【3回目】
                    if (groupB_a == groupB_b) {
                        // このルートはPtn1なので、これは軽い鉄球
                        ans = groupB_c;
                    } else {
                        // このルートはPtn1なので、3回目の計測で軽かった方が重さの違う1つの鉄球
                        ans = groupB_a > groupB_b ? groupB_b : groupB_a;
                    }
                } else {
                    // 不釣り合いの場合は、重さの違う鉄球は、グループAにいる
                    int groupA_a = groupA.get(0);
                    int groupA_b = groupA.get(1);
                    int groupA_c = groupA.get(2);
                    // 【3回目】
                    if (groupA_a == groupA_b) {
                        // このルートはPtn1なので、これは重い鉄球
                        ans = groupA_c;
                    } else {
                        // このルートはPtn1なので、3回目の計測で重かった方が重さの違う1つの鉄球
                        ans = groupA_a > groupA_b ? groupA_a : groupA_b;
                    }
                }
            } else {
                // Pnt2の場合 ・・・ Aに軽い鉄球がいるか、Bに重い鉄球がいる
                // 【2回目】
                if (totalC == totalA) {
                    // つりあった場合は、重さの違う鉄球は、グループBにいる
                    int groupB_a = groupB.get(0);
                    int groupB_b = groupB.get(1);
                    int groupB_c = groupB.get(2);
                    // 【3回目】
                    if (groupB_a == groupB_b) {
                        // このルートはPtn2なので、これは重い鉄球
                        ans = groupB_c;
                    } else {
                        // このルートはPtn2なので、3回目の計測で重かった方が重さの違う1つの鉄球
                        ans = groupB_a > groupB_b ? groupB_a : groupB_b;
                    }
                } else {
                    // 不釣り合いの場合は、重さの違う鉄球は、グループAにいる
                    int groupA_a = groupA.get(0);
                    int groupA_b = groupA.get(1);
                    int groupA_c = groupA.get(2);
                    // 【3回目】
                    if (groupA_a == groupA_b) {
                        // このルートはPtn2なので、これは軽い鉄球
                        ans = groupA_c;
                    } else {
                        // このルートはPtn2なので、3回目の計測で軽かった方が重さの違う1つの鉄球
                        ans = groupA_a < groupA_b ? groupA_a : groupA_b;
                    }
                }
            }
        }
        // 重さの違う鉄球はこれです。
        System.out.println("\r\nAnser : " + ans);
    }
}

論理的思考テスト

ある会社のプログラマ採用試験の問題らしく、論理的な思考が出来る人と出来ない人では、開発時間に7倍の差が出るとかでないとか。
プログラマに論理的思考は必須だとか、プログラミングはセンスだとか言うのはあまり好きではないのですが、
気になって解いてみたので問題と回答を載せてみます。

【問題】
9つの玉があります。
ひとつだけ重さの違う玉があります。
天秤測りを3回だけ使って、重さの違う玉を見つける手順を示しなさい。

論理的思考力テスト【解答つき】 − @ITクラブ Cafe − @IT

【回答(コード)】
http://hatehate-masaki.hatenablog.com/entry/2017/03/12/045915