naopon blog

プログラミング未経験の大学生が1年間大学を休み、プログラマーとしてインターンをします。

Macが起動しないときにシングルビューモードでデータを移行する方法

先日作業している時に急にPCが動かなくなり、強制終了したところまったく開かなくなってしまいました。。。 りんごマークが出て、その下でクルクルした状態で停止、ユーザー選択画面までいくもののそのままフリーズ。

PRAMリセットやSMCリセット、リカバリーモードでの修復も試してみたもののうまくいかず。 外部から起動する方法もあったのですが、なんと私のMacBook Airはライトニングポートがうまく認識してくれないのです・・・w

バックアップもとっていないしどうしようか。 せめて重要なファイルだけでも取り出したい。。。 そんなときにシングルビューモードなるものを発見!

データの確認が出来たため、USBになんとか移行できないか?と考えました。

今回は、「シングルビューモードでUSBにデータを移行する方法」を説明いたします。

電源を入れたあとにすぐ ⌘command + s を同時押しつづけてください。

シングルビューモードに入ることができます。

基本的にls,cd,mvのコマンドさえわかれば何も怖くありません。

  • ls ディレクトリの内容を表示

  • cd ディレクトリの移動

  • mv ファイルの移動、名前変更

普段ならUSBは /Volumes の中にあるのですが見つかりません。

しかも、ファイルを移動させようとすると Read-only file system と出てきて移動や作成等が出来ません。。。

まずはこれを解除し、読み書き可能にする必要があります。

root# mount -uw /

// マウントして読み書き可能にする

root# ls /dev/disk*

// dev/diskを参照

root# mkdir /Volumes/usb

// Volumesにusbディレクトリを作成

root# mount_msdos /dev/disk1s1 /Volumes/usb

//msdos形式でdisk1s1をusbにマウントする

root# ls /Volumes/usb

これで中身を確認すればUSBの中身が確認できるはずです!

あとは移行したファイルを移動させるのみです。

mv /Users/naopon/Desktop/hogehoge /Volumes/usb

hogehogeファイルの中身をusbに移動

これで同じように移行させることが出来れば完了です!

いかがだったでしょうか? 思わぬエラーが出た際は、電源を一度切りUSBをさし直してみてもう一度お試しすることをおすすめします。

私はこれを機にHDDを買ったので、このようなことが起こる前にバックアップを取っておいた方が良いですね笑

USBではなく、HDDにすべて移行しようと思います。 どうしても開かないそんな時に上記の方法を試してみてください〜。

ではでは。

開かない場合はまずはこちらを試してみると良いかと思います。

自分でできる「Macが起動しないときの5つの対処法」 | 3streamer blog

今回参考にしたサイトはこちら

Accessing a USB drive while in Mac single-user mode | Mac OS X | iMac | alvinalexander.com

プログラミング初心者がRuby on Railsを勉強して1ヶ月でやったこと。

こんばんは、なおぽんです。

今日でちょうどRuby on Railsを勉強して1ヶ月となりました。 今月したことを振り返りたいと思います。

ちなみに僕の1ヶ月前のスペックとしては、 HTML・CSS・Webデザインそれぞれやっていたが、つまみ食い程度。 Rubyは少しずつ勉強していたが、オブジェクト?インスタンス?クラス?モジュール?もうよくわからない状態です。 大学もプログラミングとはほど遠い文系大学生です。

1ヶ月でやったことはとにかく基礎固めと実践の繰り返しです。 本は基本的に1冊全部は読んでいないです。 とにかく基礎を理解して自分の中に落とし込むまで、色々な本をつまみ食いしました。

その中で参考になった本やサイトを紹介します。

Ruby

Amazon.co.jp: たのしいRuby 第4版: 高橋 征義, 後藤 裕蔵, まつもと ゆきひろ: 本

Amazon.co.jp: みるみるプログラミングがわかる本: 掌田 津耶乃: 本

Ruby入門 (全23回) - プログラミングならドットインストール

http://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/

Ruby on Rails

Amazon.co.jp: 改訂新版 基礎Ruby on Rails (IMPRESS KISO SERIES): 株式会社オイアクス, 黒田 努, 佐藤 和人: 本

Amazon.co.jp: Ruby on Rails 3 アプリケーションプログラミング: 山田 祥寛: 本

他にもmysqlについてやgitについてなどをつまんで勉強していました。 Rubyの基礎と書かれている本でも、以前他のプログラミング言語を勉強していた人を対象とした本が多いため専門用語を多用されると混乱状態に陥ることがしょっちゅうありました。

とにかく焦らずに1つ1つ覚えて行くしかありません。一度にたくさん覚えようとすればするほど頭に入らないものです。

僕がまず最初に引っかかったのは、Model, View, Controller, Helperの役割ですね。 他にもrails g modelでモデルを作るものの、rake db:migrateをしていなかったり、あれ 上手くページに飛ばないぞ…?と思ったらroutesを設定するのを忘れていたり。 あとはassociationあたりは時間かかりましたねぇ;

1ヶ月たった今もまだまだではありますが、管理画面での投稿、更新や削除などの機能を実装してトップ画面に表示、ユーザーが何かアクションを起こした際にリマインダメールを飛ぶようにするなど基本的な機能は実装できるようになりました。

まだまだ未熟ではありますが、とにかく実際に作るのが一番の早道です。 2ヶ月目にはもっと深い内容を書けるようなっているはず・・・。

ではでは。

休学をしてエンジニアとして長期インターンすることになりました【東京編】

お久しぶりです、なおぽんです。

以前までは北海道からリモートインターンという形で合同会社FJORDのインターンに参加させていただいていたのですが、 東京に来るに伴い卒業させていただきました。

5月27日より株式会社CINQSMILEにてRailsエンジニアとしてインターンをしています。
期間としては来年の3月あたりまでを予定しています。

業務としてはRubyRailsを使っての自社サービス開発をメインにやっています。
日々勉強した内容を今後シェアしていきますね。

実際に働き感じているのは実務を通して覚えるのが一番早いということです。 今までの学習方法としては、とにかくテキストを読みながらコードをそのまま書いていくというもので、 身に付いたスキル内で仕事を選択していたんです。

インターンを始めてからは、
1. わからないながらとりあえずやってみる
2. 調べながら自分で考える
3. どうしてもわからない場合はヒントをもらう
4. なんとか動くものを作る
5. コードレビューをしてもらう

この5つの学習サイクルが常に回っています。 1人で学習するに比べ、圧倒的に学習スピードが早く、記憶に残りやすいです。

ここに金銭が発生しているのが何より学習に良いと思います。
最近では、LINE株式会社インターンの報酬40万円というニュースが話題になりました。
インターンの報酬「40万円」也! LINEの好待遇に驚きの声 : J-CAST会社ウォッチ

金銭が発生することにより、責任の重荷が異なってきます。
「給料の3倍稼いで1人前」 という言葉があるように、それだけの働きをした自分への対価が給料となります。

それだけの給料をもらうためには成果が求められ、成果を出すためには効率よく学習をすることが必然と重要になってきます。
残念ながら、現状僕はそれだけの働きができていません…情けない…。
今回の採用は、長期で働くからこそ僕の成長を見込んでの採用だと思っています。

その期待以上の働きが出来るように努力はもちろんのこと、効率を貪欲に求めていきたいと思います。

ではでは。

SSLってなに?

こんにちは、なおぽんです。

SSL」という言葉はご存知でしょうか?

OpenSSLの重大バグが発覚。インターネットの大部分に影響の可能性 | TechCrunch Japan

最近では、OpenSSLにHeartBleedと呼ばれる脆弱性が発見され話題になりました。


SSLとは

Secure Sockets Layer: ネットスケープコミュニケーションズ (Netscape) が開発した、インターネット上で情報を暗号化し安全な通信を提供するプロトコル

SSL - Wikipedia

これだけ見てもイマイチよくわからないかと思うので、どういう仕組みで安全な通信が確立されているのか書いていきます。


例えば僕がAmazonで買い物をするとしましょう。
Amazonで買い物をするためにクレジットカード番号を登録したいです。
しかし、漏洩を防ぐためにSSL通信でやりとりをしたい......。

そこで、僕(ブラウザ)からAmazon(サーバー)に「SSL通信をしたい」と要求します。
するとサーバーはブラウザに暗号化に使う鍵(公開鍵)を送ってきます。

この公開鍵を使って暗号化した共通鍵を生成し、サーバーに送ります。

受け取ったサーバーは共通鍵を、自分だけが持っている秘密鍵を使って復号化するのです。
そこで初めて共通鍵を使用し、安全なSSL通信を確立出来るようになります。

この公開鍵と秘密鍵を使った暗号方式を公開鍵暗号方式と言います。

公開鍵暗号(こうかいかぎあんごう、Public key cryptosystem)とは、暗号化と復号に別個の鍵(手順)を使い、暗号化の為の鍵を公開できるようにした暗号方式である。1980年代にかけ、日本で紹介された直後は「公衆暗号系」と訳されていた。

公開鍵暗号 - Wikipedia


しかし、ここで問題があります。

僕が見ているページは本当にAmazonなのでしょうか?
見た目は全く同じですが、誰かがAmazonになりすましている可能性があるのです。


そこで本人かどうかを証明するために認証局と呼ばれる第三者機関が出来ました。

Amazon認証局電子証明書を発行します。
(この電子証明書には、公開鍵、公開鍵の発行者、認証局の情報などが含まれています。)

そして先ほどと同じようにブラウザからのSSL通信の要求に対して、電子証明書(公開鍵を含む)を送るのです。
受け取ったブラウザはこの電子証明書を発行している認証局は本当に信用していいのか確認します。

「この認証局は信用出来るから間違いなくAmazonだ!」と判断すると、公開鍵を使用して共通鍵を生成しサーバーに送るのです。

サーバーが秘密鍵を使って複合化し、始めてSSL通信が確立されるのです。

この第三者(認証局)を使って、保証を実現する仕組みをPKI(Public Key Infrastracture)と言います。

暗号技術において、公開鍵基盤(こうかいかぎきばん、英: public key infrastructure、以下PKI)は、利用者の身元について「信頼できる第三者」(英: trusted third party)が審査を行い、保証を実現する仕組みのことである。

公開鍵基盤 - Wikipedia

SSLを理解する上で公開鍵暗号PKIの理解は欠かせないものとなります。
より詳しい内容については参考サイトが詳しく解説してくださっているのでどうぞ。


SSLの仕組み | トラスティワークス

2012-05-25 - アンカテ

PKI基礎講座(1):PKIの基礎を理解しよう! - @IT


電子証明書や公開鍵はブラウザから見る事が出来るので、気になる方は見てみてはいかがでしょうか?

さくらVPSでssh設定(公開鍵認証)

こんにちは、なおぽんです。

 

さくらVPS上でsshを設定してみました。

 

sshとは

Secure Shell(セキュアシェル、SSH)は、暗号認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコルパスワードなどの認証部分を含むすべてのネットワーク上の通信が暗号化される。

Secure Shell - Wikipedia

 

パスワード認証ではなく、公開鍵認証方式での設定を行います。

 

なぜsshを設定する必要があるか

telnetftpでの通信は暗号化されないので、なりすましや情報が漏えいする恐れがあります。

そこでサーバーと安全に通信を行うためにsshを使用します。

 

#aptitude update
#aptitude install ssh

sshをインストールします。(※Linuxには標準で入っています。)

 

$mkdir ~/.ssh          //sshディレクトリを作成
$chmod 700 ~/.ssh          //ディレクトリのパーミッション(アクセス権)を変更します。

 

700は八進数での表記になります。

詳しくこちら 

 

$cd ~/.ssh //sshディレクトリに移動
$ssh-keygen -f client_rsa -t rsa //client_rsaというrsa鍵の生成
(/Users/yyyyyyy/.ssh/client_rsa): //何も入力せずreturn
Enter passphrase:           //何も入力せずreturn
Enter some passphrase again:           //何も入力せずreturn

ssh-keygenで認証鍵の生成をします。

-f :鍵の名前を指定

-t :鍵の種類を指定 (rsaとdsaの2種類があります)

 

$ls ~/.ssh          //sshディレクトリを参照
client_rsa     client_rsa.pub

 

2つの鍵が生成されていることがわかります。

client_rsa秘密鍵になり、クライアント側に置きます。

client_rsa.pubが公開鍵になり、サーバー側に置きます。

 

$ scp ~/.ssh/client_rsa.pub ユーザー名@192.168.1.1:~          //サーバーに公開鍵を登録します。
user@192.168.1.1 ‘s password:           //パスワードを入力します。

 

scp :sshでファイルを転送

$ ssh user@192.168.1.1          //sshでサーバーに入ります。
admin@192.168.1.1 ‘s password:
Last login: Sat Apr 26 10:34:15 2014 from 192.168.1.1

この時点ではまだパスワード認証になっているため、公開鍵をリモートサーバーに登録する必要があります。

 

$ mv ~/client_rsa.pub ~/.ssh          //公開鍵をsshディレクトリに移動
$ cat ~/.ssh/client_rsa.pub >> authorized_keys         
//公開鍵の内容を出力してauthorized_keysに追記する。
$ chmod 600 authorized_keys          //パーミッションを変更

mv :移動

cat :出力や連結に使用 

>> :追記

> :上書き、ファイルがない場合は新規作成

 

$ rm ~/.ssh/client_rsa.pub          //コピーを終えた公開鍵は削除します。

rm :削除

 

$ exit          //一度ログアウトします。
$ ssh -i ~/.ssh/client_rsa user@192.168.1.1         

-i :RSA鍵認証の際に読み込むファイルを指定

 

パスワード入力を求められなければ、認証成功です。

 

# vi /etc/ssh/sshd_config          //いくつかファイルの内容をを変更します。
Port 10022          //ログがたくさん出るためポート番号を変更 
PasswordAuthentication no         //パスワード認証を不可にする
PermitRootLogin no          //rootログインを不可にする

 

#  /etc/init.d/ssh restart          //変更を更新するため再起動
$ ssh -p 10022 user@192.168.1.1

-p :ポート番号を変更したので指定

 

これで接続できれば完了です。

さくらVPSを使うまではVirtual Box上で試みたのですが、かなり苦戦しました。。。

思い切ってさくらVPSにしたところうまくいきました。

 

 

 

aptのインストール

こんにちは、なおぽんです。

 

今月いっぱいだけ短期でアルバイトをしています。

ルーターのことを取り扱っているので近々まとめてみたいと思います。

 

大変遅れてしまいましたが、aptについて書きたいと思います。

 

apt ( Advanced Packaging Tool )の略でLinuxディストリビューションであるDebian用のパッケージ管理システムになっています。

 

Linuxディストリビューションとは、Linuxを、一般利用者が導入(インストール)したり、利用できる形にまとめ上げたもの(頒布形態)。GNU/Linuxディストリビューションとも。

Linuxディストリビューション - Wikipedia

 

aptを使うことにより、パッケージのインストール、アンインストール、検索や更新などが簡単できます。

 

パッケージインストール

#apt-get install パッケージ名

 

パッケージのアンインストール

#apt-get remove パッケージ名

 

ソースパッケージのダウンロード

#apt-get source パッケージ名

 

パッケージリストの取得・更新

#apt-get update

#apt-get check

 

パッケージの検索

#apt-cache search パッケージ名

 

主に上記のコマンドで管理が可能になります。

rootログインを前提に記述してますが、先頭にsudoをつけることによってその必要がなくなります。

 

sudo を使う利点

suを使わずsudoを推奨するオペレーティングシステムでは以下のような利点が挙げられる。[7]

 

  • オペレーティングシステムをインストールする際の、設定項目を減らすことができる。
  • ユーザが余計なパスワードを覚えなくてもよくなる。
  • 大きな変更を加える際、パスワードの入力を求められるようにすることで、ユーザは何をしようとしているか再認識することができる。
  • sudoコマンド実行ログが残り、何か不具合が発生した際にどのようなコマンドを実行したのかを確認することができる。システム監視の意味でも有用。
  • rootアカウントでのログインを無効にしている場合、パスワードの総当たりなど、強引な手法でシステムに侵入を試みるクラッカーがrootアカウントで侵入できない。
  • ユーザを管理者グループに追加、削除することにより、管理者権限を持つことのできるユーザーを限定できる。
  • sudo は su に比べて、より細かいセキュリティポリシーを設定することができる。
  • 管理者権限を時間経過で自動的に破棄するように設定することができる。

sudo - Wikipedia

このようなことからrootログインはせずにsudoを使ったほうが良いみたいです。

 

$sudo apt-get install vim

本日はvimをダウンロードして終了です。

 

次はsshsslについて書きます。

1年間大学をお休みすることにしました

お久しぶりです、なおぽんです。

 

3月は引っ越しや手続きなどでバタバタしておりましたが、落ち着いたので改めてブログを再開します。

 

本来は4月から大学4年生になる予定でしたが、休学することにしました。

 

理由は "Webサービスをつくるスキルを身につけたい" です。

僕は大学では経営学を専攻していて、プログラミングなどは勉強してませんでした。

 

それでもITやWebといったものには昔から興味を持っていてHTMLやCSSを触っていたりはしたのですが、プログラムを書くという行為にはなかなか踏み出せずにいました。

 

それは "今から始めても遅いだろう" といった諦めからくるものでした。

しかし、ここになってやはり諦めきれなくなったんです。

 

だからこそまとまった学習期間を設けようと思いました。

あまり多くは語りませんが、日々のブログで成果を報告していきたいと思います。

 

では!