elementary OSにandroid studioを入れようとしたときにadd-apt-repositoryコマンドがないと言われた
業務でkotlinを使うことになり、最初にjavaを入れようとしたら速攻詰まりました。
add-apt-repositoryコマンドがない!!!!!!!!
ubuntu環境への環境構築の記事等でよく見ていたので知ってはいたんですけど、標準装備でないとは想定外でした。
パッケージの検索
以下からadd-apt-repositoryを検索
すると結果がこれ
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環境を作ってみました。
マシンスペック
- HP Spectre x360 13-ac000
- Windows 10 Home (64bit)
- インテル Core i7-7500U プロセッサー (2.70-3.50/4)
- 512GB SSD (PCIe NVMe M.2)
- メモリ1866MHz 16GB
なんで仮想環境にしなかったのか
VMとかVirtualBoxで作ってもよかったんですが、Linuxなのに仮想環境だとその早さを実現できないのではと危惧したからです。
実際他の方の記事をみるとそういった不満が多かったというね。
業務でwinを使うことはほとんどないですし、Linuxで捗る作業が多い。
でも、もしofficeとかいれることになったときに困るので、winのOSを残しつつデュアルブートで快適に開発を行おうと思ったのですた。
準備
以前、thinkpad x230にelementaryOSを入れたときのライブUSBがあったので、それをそのまま流用することにします(なので手順は省きます)。
一応以下のリンクからダウンロードできます(カスタムで0$にすれば無料です)。
システム修復ディスクの作成
めんどくさかったのでカット(USBメモリ買わんと行かんかったし)
バックアップの作成
会社のNASにぶち込みました。
「設定」->「更新とセキュリティ」->「バックアップ」でバックアップ先をNASにしてあげればいけます。
バックアップ先はデフォルトでは接続しているドライブしか表示されないので、「ネットワーク上の場所をすべて表示」で共有フォルダを選択したらおk。
win機のパーティション分割
左下のwinアイコンを右クリックし、「ディスク管理」を開きます。
Windows(C:)ドライブを右クリックしてボリューム縮小してください。
デフォルトでだいたい半分になったのでこれで行きます。
マルチブートの起動順位を変更
以下を参照
ライブ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-app
とreact-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
僕の設定はこんな感じです。
mysqld
とclient
へ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は早い!
と、よく言われますが、コマンドでの移動や操作に慣れればの話ですよね。。。
僕はまだ簡単なカーソル移動しかできないので、全く恩恵を感じません。
感じる土俵にすら立っていないのかもしれないですね。
今の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)
ファイル操作
検索と置換
- ・ カーソル下の単語を検索
- '#' カーソル下の単語を検索(上方向に検索)
↑
マークダウンになってしまうためシングルクォートでかこんだ - :%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^)/
全く関係ないですがw
ではでは ノシ