xcode textViewにborderセットしたかった。

@IBOutlet weak var textArea: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()


    textArea.layer.borderWidth = 1.0    //ボーダーの幅
    textArea.layer.cornerRadius = 10.0    //ボーダーの角の丸み
     // textArea.layer.borderColor = UIColor.lightGray.cgColor
    let borderColor : UIColor = UIColor(red: 0.85, green: 0.85, blue: 0.85, alpha: 1.0)
    textArea.layer.borderColor = borderColor.cgColor

}

mysql error対応!なぜか動かなくなった!時用

個人的にmysqlエラーが出た時の対応を下記にメモ。

#なんかよくわからんけどややこしいエラー出た時。
$ mysql_upgrade -u root -p --force
→もしくは mysql_upgrade -u root --force
#パスワード設定してなければ下のコマンド使います。

## macOSなどのアップデートが原因で死ぬ時
$ xcode-select --install

#基本的に設定書き換えたら動かし直す必要あるので
$ pkill mysql
$ mysql.server start

#番外編...いやいやそれでも動かない時。
$ brew doctor  #brewの、依存関係の確認

エラー文はないですがsocket error(2)では そもそも起動してない時が多い $ mysql.server start

起動時などに、socket error(38) これは権限などが足りてない場合が多いので mysqlの設定ファイルなどがあるディレクトリに対してchownしてあげる必要がある

jupyter で seabornnが突然使えなくなった。 " ModuleNotFoundError: No module named 'seaborn' " jupyeterのupdate

結論:jupyterのアップデートで治った。

pip3 install -U jupyter

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-103076a70ec3> in <module>()
      2 import pandas as pd
      3 import matplotlib.pyplot as plt
----> 4 import seaborn as sns
      5 import numpy as np
      6 from numpy import nan

ModuleNotFoundError: No module named 'seaborn'

juoyterを使い始めて二ヶ月。やっとkaggleのチュートリアルタイタニックを挑戦しています。

ただ、先日まで問題なくできていた。モジュールのインポートでエラーに。。。。

そしてなぜか shift + enterで。実行がうまくできなかった。。。。。 原因はよくわからないです。

解決法

moduleがないって言われているからpip3でいれてやる。

pip3 install seaborn ただ、なぜかその後も反応が悪かったので。 pip3 install -U jupyter

てして、jupyterをupdateしたら治った。 なんだったんだろうか。。。

xcode9 ~indexind prebuildingが終わらない。~

先日より、swiftの勉強をはじめました。

swiftをはじめ、最初はbuildがうまくいっていたのに、突然buildができなくなった時があった。 15分近くまってましたw

変更したのは独自クラス。 User.swiftを作成して、Constractorの定義のみ。。。。

メモリや、プロセスみてもよくわからず。。。

cmd + Q しても終了できなくて、おかしいなぁと思ったら。

gyazo.com

やっぱりおかしかったみたい。

これで強制終了して解決しました。

p.s. build待ってる間に他のお仕事が進んだことは言うまでもない。。。。。

Table 'performance_schema.session_variables' doesn't exist ってなった

昔開発してたプロジェクトをリファクタリングしようと思って

rake db:migrate したら

@fumihumi:bundle exec rake db:migrate
rake aborted!
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'performance_schema.session_variables' doesn't exist: SHOW VARIABLES LIKE 'character_set_database'
/Users/fumihumi/.rbenv/versions/2.3.1/bin/bundle:23:in `load'
/Users/fumihumi/.rbenv/versions/2.3.1/bin/bundle:23:in `<main>'
Mysql2::Error: Table 'performance_schema.session_variables' doesn't exist
/Users/fumihumi/.rbenv/versions/2.3.1/bin/bundle:23:in `load'
/Users/fumihumi/.rbenv/versions/2.3.1/bin/bundle:23:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

忌々しいmysql error !!!!!!!!!!!!w

なぜだ。。。。。

過去に開発してたとはいえrails 4系で開発していた環境を5系に変えたくらいしか心当たりがなかった。。。。。

bundle update や、rake db:dropmysql.server restartを試したもののうまくいかず。。。(数日放置した。)

ふと思い出したのは、mysqlのバージョンをあげたなぁと。(以下記事) fumihumi.hatenablog.com

しらべてみると mysqlの5.7はだいぶ構造が変わっているとのこと。

エラーメッセージは

Mysql2::Error: Table 'performance_schema.session_variables' doesn't exist: SHOW VARIABLES LIKE 'character_set_database' なので。mysqlにたいして上記の参照ができないよ!ってことかと。。

解決

個人的にmysqlエラーが出た時の必殺技

$ mysql_upgrade -u root -p --force
$ mysql.server restart

を試したらうまく動作するようになりました。


P.S. (備考) mysqlエラーの時は

brew doctor

xcode-select --install

といったコマンドたたくと治るときが多いような気がしてるw

macに機械学習環境の構築 pyenvのuninstall

pyenvを使いたくない。。。。。。。

背景:

brew で pyenvをいれていた uninstallがうまくいかなくてちょっと残骸が残ってる状況w

(追記:できた)

python3系を使えば良さそう! と思い、環境構築しました

とりあえず。

which python3 でちゃんと入ってればおk

→なければ

brew install python3 で入ります

$which pip3 でpip3が入ってることの確認、

pip3 install numpy && pip3 install scipy && pip3 install matplotlib && pip3 install pandas && pip3 install scikit-learn&& pip3 install chainer && pip3 install jupyter で必要そうな奴をとりあえずぶち込むw

jupyter notebook で開けたw


python2系を使うことはないだろうけど使えないのはまずいので後ほど直そう..........

追記:

#pyenv-virtualenvをインストールしていたら先に削除します
brew uninstall pyenv-virtualenv

#pyenvをアンインストールする
brew uninstall pyenv

qiita.com

本来はこうしないといけないのに "brew uninstall pyenv"しかしてなかったみたいなので

brew install pyenv
brew install pyenv-virtualenv
// して一度いれて、後ほど消す

brew uninstall pyenv-virtualenv
brew uninstall pyenv

これで綺麗になりました。

which python でエラーなくできました

rails初学者がよくわからず書いていたことについて

railsとは何ぞやって人向け

  • railsの特徴のおさらい
  • CoC
  • DRY
  • REST
  • MVC

rails初心者が躓きそうな点

  • 命名規則について
  • rake routes(どうやってみるの〜〜〜)
  • gem(なんとなく使っているけど実態がわからない。。。)
  • rails helper (なんか聞き覚えはあります。。。。ね!w)

  • params (たまにみる。params.permitって何!?!!w)

  • strong parameters(んーーとりあえず使っているけどよくわからないてなってたw)
  • debug(デバッグ手法が難しい、、、)

railsの特徴

通称railsことRuby on railsオープンソースのWebアプリケーションフレームワークです

上記の2つを守ることで高速開発ができる...とされています! (チーム開発をする時に真価を発揮!!!)

Convention over Configuration

  • 設定 より 規約
    「規約」、言い換えれば「初期値の設定」
    あらかじめrailsによって用意されている規約に従ってアプリ開発をすることでコーダーが実際に記述する量が減ります!。

 ex)モデルの命名規則

例えば、"rails g model product"というgeneratorコマンドを実行すると。あらかじめ決められている規則にしたがって下記のようになります。 テーブル名がproducts(複数形)、モデルのクラス名はProduct(単数形)、記述するファイルはproduct.rb(app/models以下)となります。

このように決まっている設計思想に従うことで無駄な記述が減ります。

 メリット

  • 設定ファイルを記述する必要がない(ほとんど)
    上記のルールに従うことで本来であれば”〇〇モデルは〇〇sテーブルを参照する”と言ったような記述が必要になるがそれが不要になる
  • 共同開発時、コードの解説が最小限で済む
    お互いがrailsのルールを知っていればおおよそのチーム内での決まりごとが決まっているのと同じ意味になります!

Don't Repeat Yourself

  • 繰り返しを避けよ。(そのままですねw)

DRYは「DRY原則」とよばれ、railsをつかったwebアプリケーションでは同じ記述何回も記述するのは避けることが推奨されています。 同じことソースコードや設定ファイルの中で繰り返し記述するのは仕様変更やbugの原因になってしまうからです。

DRYを意識することで効率よく品質の高いアプリケーション開発ができます 作成できます。

  • なんでわざわざDRYにしなきゃいけないの??
    全部コーディングすればええやん?って方は下記をご覧ください

参考 1.怠慢(Laziness) 2.短気(Impatience) 3.傲慢(Hubris)

プログラマの三大美徳ともいわれるこの思想。
世間からすればダメ人間と思われるかも?しれない。 でもこれができるエンジニアはエンジニア界から崇められる...らしい?

REST

  • REpresentational State Transfer 
  • すべてのリソースに一意となる識別子がある
    (雑すぎfixme)

MVCとは

MVCとはそもそもなんなの? →railsだけがMVCじゃないよ。
Model View Controllerの三つの要素から構成されるものです。
それぞれが各々の仕事のように役割分担をするから、便利だよねって考え方。 実際は下記のような分担をします

  • M...model
    DBとrailsの中間に位置する。DBからの値を取り出したりしてます。ビジネスロジックを担う部分
  • V...view
    modelやcontrollerで用意したデータ等を駆使して利用者に、見せる部分
  • C...controller
    modelのロジック呼び出し。必要なviewの選択。modelとviewの中間にあたります

wiki 引用
MVC(Model View Controller モデル・ビュー・コントローラ)は、ユーザーインタフェースをもつアプリケーションソフトウェアを実装するためのデザインパターンである。 アプリケーションソフトウェアの内部データを、ユーザーが直接参照・編集する情報から分離する。そのためにアプリケーションソフトウェアを以下の3つの部分に分割する。


命名規則

これはCoCに相当する考え方の部分に当たります
(todo:表作成)

rake routes

      Prefix Verb   URI Pattern                    Controller#Action
      groups GET    /groups(.:format)                groups#index
             POST   /groups(.:format)                groups#create
   new_group GET    /groups/new(.:format)            groups#new
  edit_group GET    /groups/:id/edit(.:format)       groups#edit
       group PATCH  /groups/:id(.:format)            groups#update
             PUT    /groups/:id(.:format)            groups#update

こういった結果の時の読み方。No route matchesとかなったりしても冷静になればイケる
実はrake routesしたときの PrefixVerb,URIPattern,Controller#Action、この記述が肝。
- PrefixVerb... 特定のHTTPメソッド (GET、POST、PATCH、PUT、DELETEなど)を表す部分

  • URIPattern...どのURLでアクセスするのか。という部分。
    localhostで開発しているなら「localhost//」の「/」のところ。 ex)一行目を表すURLというのはrake routes上では→ /groups(.:format) URLは"localhost/groups"になります。
    逆に"localhost/groups"の時はrake routesの「/groups(.:format)」を見るということです

  • Controller#Action... どのコントローラ、アクションなのかを判断する。
    左の二つが一致しているものを見つけたらこの部分を見てどこのアクションかを判断します。

ex) GETメソッドでURLが"/groups"だったら、「groups#index」これが参照され、groupscontrollerのindexアクションが呼ばれます

リソースフルルーティングでは 1つのアクションに対して、データベース上での特定のCRUD (Create/Read/Update/Delete) にもなります。 上記の上二つ。URLは同じでもhttpメソッドが違うために、別のアクションを呼んでいる

gem

gem は、Ruby用のパッケージ管理ツールになります。

Ruby用ライブラリのインストール、アンインストール、バージョン管理などを簡単に実行することができます。
gem自体はプログラミング言語Rubyのファイルに付属されていて、無料で誰でも使うことができるソフトになります。
余談ですが。gemの正式名称はRubyGemsです
例えば下記のgemを使うと

devise

  • loginとか、User管理が簡単にできるよね
  • facebook認証も手軽に

Mechanize

  • Scrapingするのに便利だね
  • webからデータを集める際に便利!

kaminari

  • ページネーション便利だね
  • 多くのデータを複数のページに跨らせることはUI,UX的にも大事
  • bootstrapと組み合わせればそんなにダサくないですw

rails helper

Viewファイルにて複雑なロジックを簡単に記述できる

form_tag

検索の時に頻繁に使う。
頑張ればform_forみたいなことできるけど。頑張る必用もないよね...(form_forが楽ならそっち使いましょう)

form_for

モデルに紐づいている場合に利用するとか言われています。 投稿フォームとか、DBに値を突っ込むときに使うイメージ

form_with

https://techracho.bpsinc.jp/hachi8833/2017_05_01/39502 rails 5系から新規参入したヘルパー。これがなかなか協力

link_to

HTTPメソッド指定してリンクを作れる prefixを使用して記述できる

etc(まだまだたくさんある)

params

URLから送られてきた値やフォームで入力した値をparams[:パラメータ名]で取得する
rails4系ではpryで'params'と取得ができていたが、「rails5」からは取得できなくなったっぽい?

params[:パラメータ名] フォームの内容を受け取ったりする時に上記のような書き方をしますね

メリット
  • リンクによるパラメータの受け渡し
  • フォームによるパラメータの受け渡し

strong parameters

マスアサイメント脆弱性の対策としてrails4よりこれが必須になった。 簡単にまとめられそうもないので、下記参考にしていただければと思います。 参考

debug

gem "pry-rails" を入れることで rails console 上でpryコンソールが起動する。 (pry-rails を入れるまでは irb が起動する)

  • Rails console で Pry が起動するようになる
  • Rails console で help と打つと、使えるコマンドがわかる
  • show-routes,ls ...etc コマンドが console上 で使えるようになる
  • binding.pry を挟むとその位置で処理を止めてデバッグできるようになる
参考書籍

改訂3版 基礎 Ruby on Rails 基礎シリーズ パーフェクトRuby on Rails

この記事は私自身がrails開発を初めて数ヶ月の間に疑問に思ってたことを改めてまとめたものです。