Rubyと筋肉とギターとわたし

筋トレが仕事です

elementary OSにandroid studioを入れようとしたときにadd-apt-repositoryコマンドがないと言われた

業務でkotlinを使うことになり、最初にjavaを入れようとしたら速攻詰まりました。

add-apt-repositoryコマンドがない!!!!!!!!

ubuntu環境への環境構築の記事等でよく見ていたので知ってはいたんですけど、標準装備でないとは想定外でした。

パッケージの検索

以下からadd-apt-repositoryを検索

Ubuntu – Ubuntu パッケージ検索

すると結果がこれ

Ubuntu – Package Contents Search Results -- add-apt-repository

software-properties-commonの中にあるっぽい。

$ sudo apt install software-properties-common

$ sudo add-apt-repository ppa:webupd8team/java

他の方法

apt-fileを使う方法

$ sudo apt install apt-file
$ sudo apt-file update
$ sudo apt-file search add-apt-repository
software-properties-common: /usr/bin/add-apt-repository
software-properties-common: /usr/share/man/man1/add-apt-repository.1.gz

software-properties-commonにあることがわかります

おわり

うまく行ったZE。

elementaryOSは最小構成とはいえ、add-apt-repositoryくらい入れておいて欲しいっすね。

Win10とelementaryOSでデュアルブートしてみた

Rubyのためにブログを開設したのにまったく違うことしか書いてないですが、今回もそんな感じっす。

新しい会社(まだ正式には入っていないけど)でPCを購入していただいたので、そちらのPCへLinux環境を作ってみました。

マシンスペック

なんで仮想環境にしなかったのか

VMとかVirtualBoxで作ってもよかったんですが、Linuxなのに仮想環境だとその早さを実現できないのではと危惧したからです。

実際他の方の記事をみるとそういった不満が多かったというね。

業務でwinを使うことはほとんどないですし、Linuxで捗る作業が多い。

でも、もしofficeとかいれることになったときに困るので、winのOSを残しつつデュアルブートで快適に開発を行おうと思ったのですた。

準備

以前、thinkpad x230にelementaryOSを入れたときのライブUSBがあったので、それをそのまま流用することにします(なので手順は省きます)。

一応以下のリンクからダウンロードできます(カスタムで0$にすれば無料です)。

elementary.io

システム修復ディスクの作成

めんどくさかったのでカット(USBメモリ買わんと行かんかったし)

バックアップの作成

会社のNASにぶち込みました。

「設定」->「更新とセキュリティ」->「バックアップ」でバックアップ先をNASにしてあげればいけます。

バックアップ先はデフォルトでは接続しているドライブしか表示されないので、「ネットワーク上の場所をすべて表示」で共有フォルダを選択したらおk。

win機のパーティション分割

f:id:rdwbocungelt5:20180309144723p:plain

左下のwinアイコンを右クリックし、「ディスク管理」を開きます。

Windows(C:)ドライブを右クリックしてボリューム縮小してください。

f:id:rdwbocungelt5:20180309145537p:plain

デフォルトでだいたい半分になったのでこれで行きます。

マルチブートの起動順位を変更

以下を参照

www.billionwallet.com

ライブUSBを指してF9連打

PCにelementaryOSの入ったUSBを指してブート画面を開きます。

「Try elementary OS without instaling」を選択。

すぐにelementary OSの象徴である「e」のマークが出てきます。

無事デスクトップが表示されたら、elementary OSのマークのアイコンを選択します。

elementary OSのインストール

言語で日本語を選択 -> wifiを接続

次に「elementaryのインストール中にアップデートをダウンロード」と「〜サードパーティーソフトウェアをインストール」にチェックをいれて、セキュアブートを無効にします。

インストールの種類で「それ以外」を選択し、「続ける」を押下。

パーティションの振り分け

winの方で縮小したドライブから、4GBだけ残してあとはすべて割り当てます。

空いている領域を選択し「基本パーティション」「この領域の始点」にチェックをつけ、利用方法を「ex4ジャーナリングファイルシステム」にします。そして、マウントポイントを「/」としておkを選択。

残りの4GBはswap領域として作成します。「基本パーティション」「この領域の終点」「スワップ領域」でおkを選択。

ブートローダをインストールするデバイスでは自身のSSD/HDDを選択するようなので、一番上を選択する(ここをミスるとOSにアクセスできなくなるらしい、要はチェックメイト状態)。

無事完成!…と思ったら

一旦再起動してwinの方を立ち上げてみたら、シャットダウン出来なくなりましたwww

シャットダウンしても、またwinが立ち上がるという。。。

ちょっと意味が分からなかったので、まだやっていなかったwinの高速スタートアップを無効にする設定をやりました。(これもあとで記事書くわ)

するとやっとシャットダウンできるようになった!!!

最後に

とりあえずデュアルブートできるようになって、起動したらBIOS画面が出るようになったのでめでたし。

新しいPCの設定をいろいろやっていきたいと思います。

それもまた記事にします。

何かわからないことがあればコメントにお願いします。

ではでは〜

React Nativeを環境構築してみたら詰まった話

ちょっと所用でReactを触ることになり、先にちょっとだけReact Nativeを触っちゃおうということになったので環境構築してました。

安定して詰まったのでそれをここに記す。

環境

  • OSX (バージョン忘れた)

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

nodebrewが入っている状態で進めていっています(これもバージョンわからないので後で書く。。。) まずはhomebrewでReactに必要なものをインスコします。

$ brew install npm

$ brew install watchman

$ brew install flow

npm5だとreact nativeが動かないようなので、対応するnodeを入れます。
ここではv7.10.1です(7系で一番新しいやつ)。

$ nodebrew install-binary v7.10.1

$ nodebrew use v7.10.1

$ node -v
v7.10.1

$ npm -v
4.2.0

npmでcreate-react-native-appreact-native-cliを入れます。 (なぜかcreate-react-native-appコマンドが使えなく、react-nativeコマンドしか使えなくなったので調査中)

$ npm install -g create-react-native-app

$ npm install -g react-native-cli

$ npm start
2018-03-01T17:30:34,051: [cli] Failed to open /Users/fndm40/Library/LaunchAgents/com.github.facebook.watchman.plist for write: Permission denied

Watchman:  watchman --no-pretty get-sockname returned with exit code=null, signal=SIGABRT, stderr= 2018-03-01T17:30:34,051: [cli] Failed to open /Users/fndm40/Library/LaunchAgents/com.github.facebook.watchman.plist for write: Permission denied

やっぱ何かしらエラー出ますよね。。。
brewで入れたWatchmanに権限がないようなので与えてあげます。

$ sudo chown -R $(whoami):staff ~/Library/LaunchAgents

$ npm start

うまく行けば、ブラウザに画面が表示されます!

最後に

今回はお試しでmac環境を作ったので、次は本格的にUbuntuの方で出来たらなぁーと思います。
React Nativeじゃなくて、kotlinを使うことになりそうですが。。。

MySQLエラーでRailsサーバーが全然起動しなかったんだよ

ひっさしぶりに1からRailsの環境を作ってみました。

すると、いろいろつまずきます。

最初に躓いたのがMySQLでした。

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) (Mysql2::Error)

$ rails s 
=> Booting Puma
=> Rails 5.0.4 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Exiting
/home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/mysql2-0.4.8/lib/mysql2/client.rb:89:in `connect': Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) (Mysql2::Error)
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/mysql2-0.4.8/lib/mysql2/client.rb:89:in `initialize'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/mysql2_adapter.rb:25:in `new'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/mysql2_adapter.rb:25:in `mysql2_connection'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:729:in `new_connection'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:773:in `checkout_new_connection'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:752:in `try_to_checkout_new_connection'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:713:in `acquire_connection'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:490:in `checkout'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:364:in `connection'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:883:in `retrieve_connection'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_handling.rb:128:in `retrieve_connection'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_handling.rb:91:in `connection'
    from /home/user/rwork/projects/config/environment.rb:15:in `<top (required)>'
    from /home/user/rwork/projects/config.ru:3:in `require_relative'
    from /home/user/rwork/projects/config.ru:3:in `block in <main>'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/builder.rb:55:in `instance_eval'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/builder.rb:55:in `initialize'
    from /home/user/rwork/projects/config.ru:in `new'
    from /home/user/rwork/projects/config.ru:in `<main>'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/builder.rb:49:in `eval'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/builder.rb:49:in `new_from_string'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/builder.rb:40:in `parse_file'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/server.rb:319:in `build_app_and_options_from_config'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/server.rb:219:in `app'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/server.rb:84:in `app'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/server.rb:354:in `wrapped_app'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/server.rb:148:in `log_to_stdout'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/server.rb:102:in `start'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/commands_tasks.rb:90:in `block in server'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/commands_tasks.rb:85:in `tap'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/commands_tasks.rb:85:in `server'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands.rb:18:in `<top (required)>'
    from /home/user/rwork/projects/bin/rails:9:in `require'
    from /home/user/rwork/projects/bin/rails:9:in `<top (required)>'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `load'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `call'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/client.rb:30:in `run'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/bin/spring:49:in `<top (required)>'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `load'
    from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `<top (required)>'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:68:in `require'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:68:in `require'
    from /home/user/rwork/projects/bin/spring:15:in `<top (required)>'
    from bin/rails:3:in `load'
    from bin/rails:3:in `<main>'

はい、出ましたMySQL2::Error

久々に現れたので、解決するのにまあまあ時間がかかりました。

mysqlを起動してみる

$ sudo mysql.server start
`mysql.server: コマンドが見つかりません` 

はいはい。PATHが通ってないんでしょ。

.bash_profileへPATHを記入。 export PATH="/usr/bin/mysql/bin:$PATH"を入れるだけ。

$ source ~/.bash_profile # .bash_profileを反映

$ sudo mysql.server start
`mysql.server: コマンドが見つかりません` 

なにぃ!?

ちょっとイミフなんで、別の方法で起動しました。

$ sudo mysql service start

$ mysql -u root -p
password入力:

これでちゃんと入れるようなので、問題なし。

mysql.serverコマンドが使えないのはまた今度とすることにしました。

もう一度rails s

さっきと同じMySQL2::Error

ん〜、よーわからん。。。

っと悩んでいると、よく考えたらrailsの方でsocketを指定していなかったことを思いだしました。

$ mysql_config --socket
/var/run/mysqld/mysqld.sock

とりあえずmysql_configでsocketの位置を確認。

/etc/mysql/my.cnfにsocket情報を追記してあげます。

$ sudo vim /etc/mysql/my.cnf

  1 #
  2 # The MySQL database server configuration file.
  3 #
  4 # You can copy this to one of:
  5 # - "/etc/mysql/my.cnf" to set global options,
  6 # - "~/.my.cnf" to set user-specific options.
  7 # 
  8 # One can use all long options that the program supports.
  9 # Run program with --help to get a list of available options and with
 10 # --print-defaults to see which it would actually understand and use.
 11 #
 12 # For explanations see
 13 # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
 14 
 15 #
 16 # * IMPORTANT: Additional settings that can override those from this file!
 17 #   The files must end with '.cnf', otherwise they'll be ignored.
 18 #
 19 
 20 !includedir /etc/mysql/conf.d/
 21 !includedir /etc/mysql/mysql.conf.d/
 22 
 23 [mysqld]
 24 character-set-server=utf8
 25 skip-character-set-client-handshake
 26 default-storage-engine=INNODB
 27 socket=/var/run/mysqld/mysqld.sock
 28 
 29 [client]
 30 socket=/var/run/mysqld/mysqld.sock
 31 
 32 [mysqldump]
 33 default-character-set=utf8
 34 
 35 [mysql]
 36 default-character-set=utf8

僕の設定はこんな感じです。
mysqldclientへsocketの位置を追記すればおkです。

そして、rails側のconfig/database.ymlへsocketの追加と設定しているパスワード・ユーザー名を追加すればおk。

パスワード・ユーザー名は環境変数を設定して見えないようにしてあげりゅこと。

  1 default: &default
  2   adapter: mysql2
  3   encoding: utf8
  4   pool: 5
  5   username: username
  6   password: password
  7   socket: /var/run/mysqld/mysqld.sock

これでrails sで問題なくpumaが動きました。
結構前に環境作ってからやってなかったんでまあまあ時間がかかってしまいました。

最後に

また最初からプロジェクトを作るときに、設定するのくっそ面倒くさいので、dockerで管理しようかなと思案中です。

あとvimの操作になかなか慣れない。。。
(コードに行番号が入っているのはvimのせい?おかげ?です)

【備忘録】vimを使い始めてみた

Vimは早い!

と、よく言われますが、コマンドでの移動や操作に慣れればの話ですよね。。。
僕はまだ簡単なカーソル移動しかできないので、全く恩恵を感じません。

感じる土俵にすら立っていないのかもしれないですね。

今のLinuxPCで開発やら勉強やらやるのに、エディタが必要だなぁと思っていましたが、今使っている会社PCのAtomはめっちゃ重いし、遅いとやる気が削ぎれていくので、この際Vimに乗り換えることにしました。

とりあえず、使いそうなコマンドをメモっていきます。

Vimコマンド

基本カーソル移動

  • k     上移動
  • l      右移動
  • h     左移動
  • j      下移動
  • w     次の単語
  • b     前の単語
  • f(文字)    カーソルがある行の(文字)に移動
  • F(文字)  カーソルがある行の(文字)に移動(逆向き)
  • 0     行頭
  • ^     行頭
  • $     行末
  • %     対応するカッコに移動
  • ctrl + u   半画面上
  • ctrl + d   半画面下
  • zz      カーソルが画面中央になるようにスクロール
  • ctrl + o   古いカーソル位置に戻る
  • ctrl + i     新しいカーソル位置に進む

モード変更

  • i    挿入モード
  • esc   ノーマルモード
  • :    コマンドモード
  • v     ビジュアルモード
  • ctrl + v ビジュアルモード(矩形)
  • o    新しい行を追加し挿入モード
  • R    上書きモード

単語補完

  • ctrl + p  前方検索の単語補完

行移動

  • gg   最初の行
  • 88G   88行目
  • G    最終行
  • H    画面上の最初の行(Home)
  • M   画面上の中央の行(Middle)
  • L    画面上の最後の行(Last)

ファイル操作

  • ZZ   上書き保存し、vimを終了
  • :w    内容を保存
  • :wq   内容を保存してvimを終了
  • :q    保存せずに終了 ※ ZZ以外のコマンドは!をつけると、強制的にそのコマンドをおこなう

検索と置換

  • ・   カーソル下の単語を検索
  • '#'   カーソル下の単語を検索(上方向に検索)

    マークダウンになってしまうためシングルクォートでかこんだ
  • :%s/hage/hoge/g   単語の置換(hageをhogeへ置換) %はファイル全体を表す

編集

  • .     直前の変更を繰り返す
  • u     Undo
  • ctrl + r    Redo

ウィンドウ

  • :vsplit     画面を左右に分割する
  • : filename    いまいるウィンドウにファイルを開く
  • :e test*.cc   ワイルドカードを指定してファイルを開く
  • ctrl + wh    左のウィンドウへ
  • ctrl + wl     右のウィンドウへ

コピー&ペースト

  • yy   いまいる行をコピー
  • p    カーソルの場所にペースト
  • yy5p  現在の行をコピーし、下に5行追加する
  • gv   直前の選択範囲を再選択  

とまあ書いてみましたが、使ってみないと覚えないですよね。。。。
ちょっと所要で簡単なRailsアプリを作らないといけなくなったので、その時に使いながら勉強していきます。

参考

https://qiita.com/hide/items/5bfe5b322872c61a6896

ただ列挙しただけというね!
さっさと覚えてvimmerになります。

バイナリーで保存したexcelデータをRubyXLを使って編集する

新年明けましておめでとうございます。

ブログ開設して初の技術記事です\(^o^)/

技術記事を書くときは特に業務でやったことの復習と備忘録代わりに書いてます。
今回も同じで、最近久しぶりに触ったRubyXLというgemに関して書いていきたいと思います。

RubyXLとは

主にexcel書き込み専用のgemです。
xlsxとxlsmに対応してます(確か)

あとは主なところはgithubを見ていただければ使い方はわかるかと\(^o^)/
ここ

github.com

僕は読み込みではrooを、書き込みではRubyXL使っています。
rooにはちょっとした罠があるので、それはまた今度記事として書きたいなと。

動作環境

本題

ブログのタイトルにあるとおり、DBに登録しているバイナリーデータに対して書き込みを行います。
実はまだ出力が未検証なので、後日そこは別の記事としてあげたいと思う所存です。

フレームワークはもちろんRuby on Railsです。

ExcelFileというモデルにbinary型のexcel_binカラムが存在するものとして話を進めていきます。
ファイルサイズ(limit)は特段設けずにそのままで。

まずバイナリーファイルの保存

適当なexcelファイルを準備します。 ここでは test.xlsxとします。
保存してアクセスしたときに、データがちゃんと取得できているのかどうか確認するために、エクセルファイルのB2に テスト、シート名をテストシートとしておきます。

excel = File.binread('該当ファイルパス/test.xlsx')
ExcelFile.create(name: 'テストエクセル', excel_bin: excel)

test.xlsxを置く場所はRailsプロジェクトの中でも別のディレクトリでもどこでもいいです。
File#binreadでバイナリーファイルとして読み込むときにファイルパスを指定するので問題ありません。
(なんの説明もなくExcelFileモデルにnameカラムがありますが、飾りみたいなもんです。気にしないでください。)

macなら、この状態でパンケーキと呼ばれるSequel Proを使い、該当のバイナリーデータをxlsxで保存すると、 test.xlsxと同じ内容のエクセルファイルを取得できるはずです。
興味のある方はやってみてください。

RubyXLを使ってバイナリーファイルを解析

何をするにしても一次情報を見ろとよくいいますが、実感しました。

というのも、RailsをやっていないPLの下で働いている僕なのですが、PLから教えていただいた一次情報で助けられたからです。
まだまだカスだなと、ゴミクズだなと実感しましたね。。。

ここを見せていただきました。PLに感謝です。
http://www.rubydoc.info/gems/rubyXL/3.3.21/RubyXL/Parser

RubyXL::Parser.parseでファイルパスを指定してやる方法は知っていたのですが、バイナリーファイルを展開する方法は知りませんでした。 むしろ、バイナリーファイルはRubyXLでは展開できないものと思っていましたが、違いました。
RubyXL::Parser.parse_bufferでバイナリーファイルを展開できるようです。

excel_bin = ExcelFile.find_by(name: 'テストエクセル').excel_bin
book = RubyXL::Parser.parse_buffer(excel_bin)
worksheet = book[0]
worksheet.sheet_name #=> テストシート
worksheet[1][1] #=> テスト

RubyXLでは座標を[y][x]で指定していきますが、A1が[0][0]になります。 なので、B2は[1][1]
RubyXLで展開ができたので、あとは書き込んで出力するだけです。
簡単ですね。

最後に

一次情報を見る前には詰んでてどうしようもない状態が続いていたんですが、なんとか実装できました。
後日、Railsのコードと一緒にまた記事にしたいなと思います。

ではでは。          

ブログ開設してみた

今まで技術コミュニティーのQiitaに記事を投稿してきましたが、これからは何気ないことも書いていきたいなと思ったので開設してみました。

ちなみに本ブログを開設したのは6月です←
そゆひもありますよね。

会社ではmac、自宅ではwinと開発環境が異なり、帰ってきたらcmdを触る毎日に嫌気がさしてきたので、とうとうLinuxに乗り換えました\(^o^)/ elementary OSです。macライクでとても使いやすい。
何よりもcmdを使わないでいいのがいい!
ヤフオクで運良く1万円で落としたThinkPad x230に安売りしてたSSHDを積んで使ってます、いいですねThinkPad

これからこのPCをつかって快適に開発 & 勉強をやっていこうと思います!
たまに筋肉のことだったりギターのことだったり書くこともありますが、よろしくです( ゚д゚)ノ

そういやtwitterでサンプリンクスさんから頂いたので、ついでに写真あげておきます\(^o^)/
f:id:rdwbocungelt5:20171221231502j:plain
全く関係ないですがw

ではでは ノシ