寿命が来て壊れたHDDからデータを抜き取る
HDDからデータを抜き取る前に
個人的に気をつけようとしたのは以下です。 ・HDDは衝撃に強くないので保管する際には注意 ・HDDを取り出す際には静電気防止手袋をつける ・自己責任で最終手段として行う
個人で取り出せる範囲
記号|区分|症状の内容 :-|:-:|:-: A|論理|回復不能かつ広範囲なデータ欠損 B|論理|ディレクトリ構造やファイル名に関する情報が回復不可能 C|論理|回復・代替可能なデータの欠損 D|物理|散発的なセクタ異常 E|物理|基盤異常等開封を伴わずに回復可能な異常 F|物理|ヘッドスタックアセンブリ等回復に開封作業を伴う異常 G|物理|プラッタが損傷している 引用:nas-rescue.com
A,G - 専門業者でも対処不可能 E,F - 個人では対処不可能 B,C,D - 個人でできる範囲はここ!!
HDDをSSDに交換した際にSATAのものを買ったので、SATAタイプを購入。 www.amazon.co.jp
HDDの接続規格にはSATAとIDEがあり、データの転送方式が大きな違いなようです。 IDEー複数の線を利用してデータを並行して転送する SATAー1本の線のみで連続してデータの転送する
現在はSATAが主流。 参考: www.dospara.co.jp
日頃からバックアップを
いつ壊れるかわからないのは、HDDが壊れたときに身にしみたのでクラウド上に保存しくことを心がけないといけない。
Ubuntu18.04にnodebrew使ってnode.jsをインストールした
Angularを使ってみるということでまずはNode.jsをインストールしました。
node.js の環境管理ツール nodebrewをインストール
node.js の環境管理ツールについて
他の環境管理ツールはnvm, nave , n , nodeenvなどがあるみたいです。
Jxckさんがnodebrewを絶賛してます。 jxck.hatenablog.com
nvmをインストールしてた方はアンインストールする必要があります。 chaika.hatenablog.com
nodebrewをインストール
以下のREADMEの手順でインストールしていきます。 github.com
curl -L git.io/nodebrew | perl - setup
をしたのだが、curlをインストールしてなかったのでまずはそちらをインストール。
curlとはまざまなプロトコルに対応したデータを転送するためのコマンドです。
「wget」コマンドのように、“HTMLを解析して、リンク先もダウンロードする”ような機能はありませんが、URLに連番を指定するといった使い方ができます。
POSTDの記事が分かりやすかったです。 postd.cc
機能の比較表。 curl - Comparison Table
Install and Learn to Use Curl on Ubuntu 18.04 – Linux Hint 上記のブログに従ってUpdateして、その後にcurlを入れました。
sudo apt-get update sudo apt-get install curl
curl --version curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.0g zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
インストールできたみたい。
nodebrewをインストール。
curl -L git.io/nodebrew | perl - setup
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
.bash_profileを再読込み
source ~/.bash_profile
nodebrewがインストールされたか確認
nodebrew help
インストールされてたら以下のような感じになる。
nodebrew 1.0.0 Usage: nodebrew help Show this message nodebrew install <version> Download and install <version> (from binary) nodebrew compile <version> Download and install <version> (from source) nodebrew install-binary <version> Alias of `install` (For backword compatibility) nodebrew uninstall <version> Uninstall <version> nodebrew use <version> Use <version> nodebrew list List installed versions nodebrew ls Alias for `list` nodebrew ls-remote List remote versions nodebrew ls-all List remote and installed versions nodebrew alias <key> <value> Set alias nodebrew unalias <key> Remove alias nodebrew clean <version> | all Remove source file nodebrew selfupdate Update nodebrew nodebrew migrate-package <version> Install global NPM packages contained in <version> to current version nodebrew exec <version> -- <command> Execute <command> using specified <version
node.jsのインストール
nodebrewで最新版のNode.jsをインストール
nodebrew install-binary stable
nodebrew install-binary
を使うと、通常と違いコンパイルしないので速くインストールできます。
qiita.com
nodebrewでインストールされたNode.jsのバージョンを確認
nodebrew ls // 以下が表示された v10.7.0 current: none
nodebrewで利用するNode.jsのバージョンを指定
nodebrew use v10.7.0
v10.7.0しかなかったのでこのバージョンにしました。7/29現在の最新版です。
Node.jsのバージョンを確認
node -v v10.7.0
とりあえずインストール完了
無事インストールできたみたいです。 よかったです。
BitbucketにPushできなかったときの対処
git pushできなかった
エラーが出ました。
git remote set-url origin git@bitbucket.org:mongpa/calculatesales.git fatal: No such remote 'origin'
どうやらremoteにaddしていなかったので、以下のようにしたら無事にpushまでできました。
// まずこれ $ git remote add git@bitbucket.org:mongpa/calculatesales.git // それから $ git remote set-url origin git@bitbucket.org:mongpa/calculatesales.git // プッシュ $ git push -u origin master
git remote set-url
は向き先を変えるということなのでエラーが出たとのこと。
現在のアドレスを確認するのは以下。
git remote -v
解決
よかったよかった。
Markdown記法
一覧
表
- 「:」の位置で左寄せ、中央寄せ、右寄せを指定できる。
|指定無し |左寄せ |中央寄せ |右寄せ | |--------|:-----|:------:|-----:| |1 |2 |3 |4 |
(省略形)
指定無し|左寄せ|中央寄せ|右寄せ -|:-|:-:|-: 1|2|3|4
指定無し | 左寄せ | 中央寄せ | 右寄せ |
---|---|---|---|
1 | 2 | 3 | 4 |
2列×3行(中央寄せ×中央寄せ)
中央|中央 :-:|:-: 1|2 1|2 1|2
3列×3行(左寄せ×中央寄せ×中央寄せ)
左|中央寄せ|中央寄せ :-|:-:|:-: 1|2|3 1|2|3 1|2|3
4列×3行(中央寄せ×右寄せ×右寄せ×右寄せ)
中央|右|右|右 :-:|-:|-:|-: 1|2|3|4 1|2|3|4 1|2|3|4
箇条書き
- 頭に「*」をつけると箇条書きになる。
- 「*」の直後に半角スペースかタブが必要。
- 前後に空行が必要
- 階層は半角スペース4つかタブ1つで表現
(空行) * 階層1 * 階層1-1 * 階層1-2 * 階層2 * 階層3 * 階層3-1 (空行)
番号付きリスト
- 数字は全部1でいい。
- 「*」の直後に半角スペースかタブが必要。
- 前後に空行が必要
- 階層は半角スペース4つかタブ1つで表現
1. 番号付きリスト1 1. 番号付きリスト1_1 1. 番号付きリスト1_2 1. 番号付きリスト2 1. 番号付きリスト3
引用
>引用文 >> 入れ子
引用文
水平線
--------------------------------------------------- *************************************************** ___________________________________________________
強調
- *が多いほど強調が強い
*強調* **強調** ***強調***
強調
強調
強調
リンクの挿入
リンクの挿入は
[テキスト](URL)
または
[テキスト](URL "タイトル")
画像の挿入
![テキスト](画像URL)
または
![テキスト](画像URL "タイトル")
画像サイズの指定は
画像URL =横ピクセルx縦ピクセル //=の前に半角スペースが必要
![テキスト](画像URL =200x100) //横200px, 縦100px ![テキスト](画像URL =200x) //横のみ指定 ![テキスト](画像URL =x100) //縦のみ指定
cloud9でAngularの学習を進めるまで(環境構築等)
環境構築
まずはcloud9を開いてプロジェクトの作成。 https://console.aws.amazon.com/cloud9/home 無料でプロジェクトが作成できるが、初回はクレジットカードの登録が必要。
以下のQiitaが参考になる。おおよそはこれに沿ってやっていけばOK。 https://qiita.com/siro33950/items/3e4ab29deef8d97ef00a https://qiita.com/siro33950/items/005790021823bc2afef0
nodeとnpmのバージョンを確認。
ec2-user:~/environment $ node --version v6.14.3 ec2-user:~/environment $ npm --version 3.10.10
その後
// Angular-CLIをインストール npm install -g @angular/cli // Angular-CLIを利用してプロジェクトを作成 ng new アプリ名
Angular-CLIをインストールし、プロジェクトを作成しようとしたのですが、
You are running version v6.14.3 of Node.js, which is not supported by Angular CLI v6. The official Node.js version that is supported is 8.9 and greater. Please visit https://nodejs.org/en/ to find instructions on how to update Node.js.
とエラーが出たので、7/30現在のnode.js推奨版の8.11.3をインストール。 https://nodejs.org/ja/
$ nvm install v8.11.3 ec2-user:~/environment $ node --version v8.11.3
再度プロジェクトの作成。 しかし、
ec2-user:~/environment $ ng new アプリ名 bash: ng: command not found
ということなので、再度Angular-CLIをインストール
// Angular-CLIをインストール ec2-user:~/environment $ npm install -g @angular/cli ec2-user:~/environment $ ng new アプリ名
プロジェクトが作成完了し、cd アプリ名
で移動。
アプリの実行
アプリの実行も以下の記事を参考にしていった https://qiita.com/siro33950/items/005790021823bc2afef0 しかし、以下のようにオプションが使えないと表示されてしまいアクセスできない。
$ ng serve --public https://xxxxxxxx.vfs.cloud9.ap-southeast-1.amazonaws.com Unknown option: '--public'
https://www.youtube.com/watch?v=n0y0JX0S2Go このYouTubeに習って以下のようにしてもアクセスできた。
ng serve --host 0.0.0.0 --port 8080 --disableHostCheck
しかし、あまりよくない感じはするが特に何もするなく立ち上げまでできたので、あまり気にならなければこれでいい気がする。
package.jsonで指定しておくと楽でいい。
{ "name": "angular-cal", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve --host 0.0.0.0 --port 8080 --disableHostCheck", // 追記 "build": "ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" }, // 以下略
すると以下だけで実行できる。
npm run start
しっかりホスト名を指定してアクセスする方法
コンストラクタについて
コンストラクタとは
クラスにおいて、オブジェクトの生成時に呼び出される特殊な関数。これにより、オブジェクトを使用する前に必要な初期化を行うことができる。
マンガPGのマンガで分かる Java入門講座がわかりやすかった。 https://manga.crocro.com/?cat=java&pg=constructor
以下のブログも参考にした。 https://nobuo-create.net/java-beginner-20/
コンストラクタを使うことでインスタンスの生成と値の設定を一度に行なえる。 コンストラクタの条件は以下のようになる。 * クラス名と同じ名前のメソッドである * 引数を渡せる(初期化などに使う) * 戻り値を定義できない
public class Man{ String name; int length; void printMan(){ System.out.println("名前は"+ this.name + "、身長は" + this.length); } } // インスタンス呼び出し Man m = new Man(); m.name = "Bob"; m.length = 175;
コンストラクタを使うとインスタンスの生成と値の設定を一度に行なえる。
public class Man{ String name; int length; // 追加(コンストラクタ-クラス名と同じ) Man(){ this.name = "Bob"; this.length = 175; } void printMan(){ System.out.println("名前は"+ this.name + "、身長は" + this.length); } } Man m = new Man(); m.printMan(); // 名前はBob、身長は175
public class Man{ String name; int length; // 変更(引数をとるようにする) Man(String name, int length){ this.name = name; this.length = length; } void printMan(){ System.out.println("名前は"+ this.name + "、身長は" + this.length); } } Man m = new Man("Bob", 175); // 名前はBob、身長は175
オーバーロード オーバーロードを使うことでさまざまな初期化方法を定義できる。
オーバーロードとは同一クラス内でメソッド名が同一で引数の型、数、並び順が異なるメソッドを複数定義することを言います。 http://www.javaroad.jp/java_class8.htm
ただし、引数(型)の個数、順番が全く同じものはダメ。 あと、コンストラクタを自分で定義したら引数なしのコンストラクタは用意されないので注意! 自分で引数なしのものも書かないといけない。
public class Man{ String name; int length; // 変更(引数をとるようにする) Man(String name, int length){ this.name = name; this.length = length; } void printMan(){ System.out.println("名前は"+ this.name + "、身長は" + this.length); } } Man m = new Man("Bob", 175); // 名前はBob、身長は175
ポリモーフィズムについて少しだけメモ
スーパークラスの型の変数に、サブクラスのインスタンスを代入できる。
逆のサブクラスの型にスーパークラスのインスタンスは代入できない。
大は小を兼ねるみたいなこと。
同じ名前のメソッドを呼び出しても、インスタンスの種類(クラス)によって異なる処理が実行されます。
オブジェクト指向プログラミングの構成要件はWikipediaによると以下のようになります。 * カプセル化 * ポリモーフィズム
その中でポリもーフィズムは
あるオブジェクトへの操作が呼び出し側ではなく、受け手のオブジェクトによって定まる特性。クラスベースのオブジェクト指向の場合には、派生クラスの複数分岐として多態性を実現する。 プロトタイプベースのオブジェクト指向の場合では関係がない概念とされる。
以下のブログに簡単にカプセル化とポリモーフィズムが説明してあった。
http://brbranch.jp/blog/201511/%E9%9B%91%E8%A8%98/oop/
カプセル化とは、簡単に言えば「オブジェクトの内部データはそのオブジェクトにしか扱わせない」というひとつの宣誓です。 そしてポリモーフィズムとは、「オブジェクトがどんな振る舞いをするかそのオブジェクトにまかせる」原則になります。
class Person{ // Personクラス } class Man extends Person{ // Manクラス } class Woman extends Person{ // Womanクラス } // インスタンス代入できる Person m = new Man(); // 逆はダメ(コンパイルエラー) Man m = new Person();
ポリモーフィズムのメリット
class Person{ void walk(){ System.out.println("人が歩く"); } } class Man extends Person{ // オーバーライド void walk(){ System.out.println("男が歩く"); } } class Woman extends Person{ // オーバーライド void walk(){ System.out.println("女が歩く"); } void talk(){ System.out.println("井戸端会議"); } }
Person w = new Woman(); // コンパイルエラー // あたかもPerson クラスのインスタンスであるかのように扱われるため w.talk(); w.walk(); // 女が歩く Person m = new Man(); m.walk(); // 男が歩く
ちなみにw.talk();
のコンパイルエラーはキャストを使って((Woman)w).talk();
でエラーなく通る。
Person 型の変数が参照するインスタンスに対してwalk メソッドを呼び出 すと、そのインスタンスのクラスに応じて実行結果が変わってきます。このよう な性質がポリモーフィズムなのです。
class PersonWalk{ public static void main(String[] args){ Person[] persons = new Person[3]; person[0] = new Person(); person[1] = new Man(); person[2] = new Woman(); for(int i = 0; i < persons.length; i++){ persons[i].walk(); } } }
実行結果は
人が歩く 男が歩く 女が歩く
以下のブログ記事も参考になった。 http://noiselessworld.hatenablog.jp/entry/2017/01/30/002252
プログラマー1年生がポリモーフィズムについて学んだのでRPGで説明する。 - Qiita
最後
正しい内容を理解しているかは怪しいので、もっと深めていく必要があると感じる。