macのクリーンインストール @ansibleで自動インスコ付き【2019/09版】
雑なメモ書きですが約1.5年ぶりにクリーンインストールしたので作業メモです。
OSのクリーンアップ
- 必要なファイル等は外付けHDDなどに退避する。
- 今は情報の転送はしないを選択
- Macを探すは許可する
- コンピュータアカウントを作成(iCloudアカウントは使わなかった)
- FileVaultディスク暗号化を有効にする
- 診断と使用状況はチェックした
- クリーンインストールが終わったらApp storeからシステムアップデートをかける。
最新のOSをインストール
- 新規で購入したMBPなのにHighSierraが入っていなかったのでインストール
Xcodeをインストール
Dock
セキュリティとプライバシー
- スリープとスクリーンセーバの解除を15分後に
- Apple WatchでこのMacのロックを解除できるようにする → チェック入れても動かなかったので未設定
キーボード
- キーのリピートを速く(最速)
- リピート入力時間を短く(最短)
トラックパッド
- タップでクリックにチェック
- 軌跡の速さを速くする(最速)
サウンド
- メニューバーに音量を表示にチェック
共有
- コンピュータ名をかわいいのに変える
日付のオプション
- 曜日を表示
- 日付を表示
表示オプション
- デスクトップを右クリック → 表示オプションを表示
- アイコンサイズ 16x16
- ラベルの位置 右側
- 表示順序 名前
Homebrewをインストールする
Homebrewのインストール
xcode-select --install /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
anacondaをインストールする
brew install python 3系のanaconda入れたいので却下
brew install ansible pythonのフォルダにインストールしようとするので却下
anacondaは以下からダウンロード
https://www.anaconda.com/download/#macos
chmod 755 ./Anaconda3-2019.07-MacOSX-x86_64.sh ./Anaconda3-2019.07-MacOSX-x86_64.sh
確認
Python -V Python 3.7.3
ansibleインストール
brew install ansible
Ansibleの実行
プロビジョニング用のディレクトリ作成。
mkdir .macbook-provisioning cd .macbook-provisioning/
ansible用のinventoryファイル作成
echo 'localhost' > hosts
テキストを開き、以下をlocalhost.ymlとして保存
- hosts: localhost connection: local gather_facts: no sudo: no vars: homebrew_taps: - caskroom/cask - homebrew/services homebrew_packages: - { name: readline } - { name: openssl } - { name: openssl, state: linked, install_options: force } - { name: git } - { name: wget } - { name: curl } - { name: go } - { name: rbenv } - { name: ruby-build } - { name: vim } - { name: mysql } - { name: redis } - { name: p7zip} - { name: cmake} - { name: swig} homebrew_enabled_services: - mysql # - redis # redisは今後自動起動に入れない homebrew_cask_packages: - { name: iterm2 } - { name: firefox } - { name: google-chrome } - { name: google-japanese-ime } - { name: atom } - { name: skype } - { name: slack } - { name: vagrant } - { name: virtualbox } - { name: phpstorm } - { name: pycharm } - { name: datagrip } - { name: sequel-pro } - { name: postman } - { name: cyberduck } - { name: gimp } - { name: marp } - { name: vmware-fusion } - { name: sourcetree } - { name: docker } - { name: bettertouchtool } - { name: firefox } tasks: - name: homebrew の tap リポジトリを追加 homebrew_tap: tap={{ item }} state=present with_items: "{{ homebrew_taps }}" - name: homebrew update確認 homebrew: update_homebrew=yes # brew - name: brew packageのインストール homebrew: > name={{ item.name }} state={{ item.state | default('latest') }} install_options={{ item.install_options | default() | join(',') if item.install_options is not string else item.install_options }} with_items: "{{ homebrew_packages }}" register: brew_result - name: brew パッケージの情報保存先ディレクトリを作成 file: path=brew_info state=directory - name: brew パッケージの情報を保存 shell: brew info {{ item }} > brew_info/{{ item }} with_items: "{{ brew_result.results | selectattr('changed') | map(attribute='item') | map(attribute='name') | list }}" # brew services - name: Get currently available brew services. shell: "brew services list | sed '1 d' | cut -d ' ' -f 1" register: brew_services - name: Enable brew services. command: "brew services start {{ item }}" with_items: "{{ homebrew_enabled_services }}" when: "'{{ item }}' in brew_services.stdout_lines" # cask - name: cask パッケージをインストール homebrew_cask: > name={{ item.name }} state={{ item.state | default('installed') }} with_items: "{{ homebrew_cask_packages }}" register: cask_result - name: cask パッケージの情報保存先ディレクトリを作成 file: path=cask_info state=directory - name: cask パッケージの情報を保存 shell: brew cask info {{ item }} > cask_info/{{ item }} with_items: "{{ cask_result.results | selectattr('changed') | map(attribute='item') | map(attribute='name') | list }}" handlers: - name: run fc-cache shell: fc-cache -vf
Homebrew Caskオプションを設定
echo 'export HOMEBREW_CASK_OPTS="--appdir=/Applications"' >> ~/.bash_profile source ~/.bash_profile
作成したPlaybookを実行する
ansible-playbook -i hosts -vv localhost.yml -e 'ansible_python_interpreter=/Users/<ユーザー名>/anaconda3/bin/python'
以上で概ねアプリはインストールできる。
インストール中の注意
- アクセシビリティの許可が必要なアプリがいくつかあります。(VirtualBox等)
失敗したらインストール済みのPackageを.ymlでコメントアウトして実行すると時間を短縮できます。
動作確認環境
MacBookPro 2019 Mid 15インチ (Mojave)で動作確認済み
(CPU : 8core x 2.3GHz Intel Core i9、Mem : 16GB、SSD : 512GB)
感想
バックアップが一番めんどくさいですね。
不要なものを削除しつつ、7z で固めて保存しているので手間が掛かります。
タイムマシンとかで自動化すると便利なのでしょうけど、仕事のファイルは消さなければいけないものも結構あるので、この機会に手動でお掃除しています。
学生アルバイト・103万円の壁について
所得税は103万を超えると課税されるが、勤労学生控除が適用されると130万円まで非課税
いわゆる「150万円の壁」は配偶者に関するものなので学生は関係なし
勤労学生控除の対象となる3つの条件
(1)「給与所得などの勤労による所得があること」
(2)「合計所得金額が65万円以下(収入が130万以下)で、しかも(1)の勤労に基づく所得以外の所得が10万円以下であること」
(3)「特定の学校の学生、生徒であること」
住民税も勤労学生控除は適用される。
勤労学生控除が適用されない場合、例えば年収120万円の大学生Aさん(20歳)だと所得税と住民税で3万程度の納税が必要になる。
年収が130万を超えると社会保険の扶養からも外れる。
→会社の社会保険に加入するか、国民健康保険に加入する必要がある。
例)月11万、年収132万だった場合で会社の社会保険に加入すると
健康保険と厚生年金合わせて月15,526円→年18万以上給与から引かれます。(社会保険は保険と年金がセットです)
国民健康保険に加入する場合は健康保険だけの加入もOK。
例)年収132万で沖縄市在住の場合の国民健康保険料は年82,555円かかります。
20歳未満は国民年金を払う必要がなく、20歳以上は支払う義務があるが学生納付特例の猶予制度あり。
--------↑ここまでは学生本人について↑--------
--------↓ここからは親の納税について↓--------
子供の年収が103万を超えると親の扶養控除からは外れる(勤労学生かは関係ない)
例)年収120万円のAさん(20歳)のケース
年齢が19歳以上23歳未満の扶養家族は「特定扶養親族」に当てはまり、所得税63万円、住民税45万円が親の課税所得から扶養控除として差し引かれる。
所得税率は課税所得により異なりますが、仮にAさんの父親の課税所得が195万円超330万円以下だったとすると、税率は10%です。Aさんの年収が103万円を超えると控除されていた分の所得税や住民税を支払うことになるので、単純計算で
63万円×0.1(所得税率)+45万円×0.1(住民税率)=10万8000円
親の納税が増えることになる。
勤め先独自の家族手当等がある場合、それらも外れる可能性あり。
年収が130万を超えると社会保険の扶養からも外れるが、親の社会保険料に変更はない。
結論>学生本人も年調や確定申告の手間が増えるので103万を超えないほうが妥当
Python札幌(PythonBeginners沖縄オーガナイザー来札スペシャル)で登壇してきました!
こんにちは(`・ω・´)ゞやすはるです
2018/09/05(水)にPython札幌 (PythonBeginners沖縄オーガナイザー来札スペシャル)で登壇してきました!
Python札幌 勉強会 PythonBeginners沖縄オーガナイザー来札スペシャル | connpass
当日の様子(Facebookグループ「PythonBeginners沖縄・助け合い所」アルバム)
はじめに
久々の札幌入り!
15年住んでいたこともあり愛着の深い札幌。上の息子が北海道にいることもあり定期的に札幌に帰っています。(できれば拠点ほしい)
Python札幌3日前には息子と食事へ
息子の手前、見栄を張って注文した「網走監獄和牛」
くっそ美味かったけど財布は空になりました!
勉強会直前には「すみれ」のらーめん食いに行きました。
開店直後なのに行列。。。勉強会に間に合わなくなるんじゃないかと不安にw
次回はもう少し早めに行こう・・・w
会場は株式会社インサイトテクノロジーの札幌開発センターで行われました。
ちなみに今回の勉強会はPython札幌の稲地さんに相談して1時間後には内容、会場が決まりました(仕事早い!)
この日は早朝の台風で被害が出ていました。
足が遠のくかと心配しておりましたが、たくさんの参加者が来てくださり、大変盛況でした。
[LT1] 沖縄のPython・データ分析コミュニティ(やすはる)
最初の登壇者は私でした。
沖縄のPython・データ分析コミュニティについて紹介させていただきました。
今回来場者が多かったのでなぜ来てくれたのかを聞いてみたところ、「沖縄から来た」という点と「Beginner向け」だったことが来場しやすさに繋がったようでした。
[LT2] 業界未経験で1年間独学を続けて、どんなものを作れるようになったのか(nokonoko_1203 さん)
次はプログラミング業務未経験のnokonokoさんの発表でした。
初心者もLTしやすいのが「Beginner向け」の醍醐味ですよね。
「これまでに作ったもの!」
Python、bot、ラズパイ、progate、Mecabなどなど・・・沢山のことにチャレンジしていて凄いですね!
[LT3] モチベ保つ自分用サービス作ってみる話(大城慶知くん)
次は琉球大学三年生の大城慶知くん
唯一の学生LTだったので超絶期待LTですね!
まとめ「LT駆動開発で誘惑の多いところにいてはいけない(戒め)」
安定のネタLTでした。期待を裏切らない男ですねw
海鮮丼やらラーメンやらが美味しすぎるのが悪い、と札幌をAgeつつネタをまとめるネタスキルの高さを見せつけてくれました。
[LT4] M5GOでMicroPython(稲地さん)
次はPython札幌の稲地さん
PyCon Boot Camp in 札幌でお会いして、IoTの知識が豊富な方だなと思っていました。
こんな形で一緒に勉強会ができて嬉しかったです。
M5Stack凄いですね。私も触ってみたいと思いました。
[LT5] モデルを圧縮してFPGA実装した話(中澤くん)
次はPythonBeginners沖縄でおなじみの人気講師・中澤くん
モデル圧縮してFPGA実装した話です。
FPGAという超並列でプログラマブルなプロセッサのポテンシャルを引き出すために立ちはだかる容量の壁をモデル圧縮して押し込む貴重な話でした。
札幌の方々でもFPGA+Pythonの話は貴重だったようです。
[LT6] 中村良幸さんの話(Insight Labや勉強会について)
最後は今回会場をご提供いただいたインサイトテクノロジーの中村さんのLT
Python札幌のオーガナイザーでもあります。
Insight Labの行っている様々な事業の紹介や、ご自身が立ち上げた勉強会(めちゃくちゃ多い!)について語っていただきました。
実際の案件や事業に関わる話は中村さんだけでしたので貴重なお話を聞くことが出来ました。
サブリミナル紹介で知っているワードが見えてしまいましたが、ここには書くことは出来ませんねw(秘密ですw
懇親会
勉強会の後、懇親会にも参加しました。
バックグラウンドの異なる方々一人ひとりとお話させていただき、みなさんとの距離が近づくのを感じることができました!
週の半ばの平日でしたし、終電近くなってしまったので切り上げましたが、もう少し一緒に話していたかったですね。。。
懇親会後には札幌駅前で記念撮影しました
なぜか三脚をお持ちの宮沢さん(準備良すぎぃw)のおかげで懇親会参加者全員の写真を取ることが出来ました。
そしてこの一枚
中澤くんだけ異次元転送直前みたいになってて笑ってしまいました。
おわりに
Python札幌の方々との勉強会はとても楽しく、時間が短く感じました。
Python札幌オーガナイザーの中村さんとは、もし沖縄に来る機会があったら沖縄でも勉強会をしましょうね、と話して盛り上がりました。
ほんとに実現できたらとても嬉しいですねw
そして、このブログは翌日には書き上げるつもりだったのですが、この約3時間後に北海道胆振東部地震が起きまして、MacBookProの電池切れを懸念してアップを差し控えることに。
その翌々日には電気が回復いたしましたが、各種イベントが再開されるまでは自粛しておりました。
被災された皆様の復興をお祈り申し上げます。
ちなみに停電中の様子がこちらです。
ご覧のように私達はたくましく生きておりましたので、ほとんど被害にはあいませんでした。
また札幌には行くつもりですので、次回も一緒に勉強会したいですね!
札幌の皆さん、よろしくお願いいたします!
関連リンク
Python札幌 conpass
Python札幌 github.io
PythonBeginners沖縄 conpass
PythonBeginners沖縄 助け合い所
PythonBeginners沖縄 slack(招待は助け合い所でご相談ください)
PythonBeginners沖縄 twitter
Djangoのmigrationでforeignkeyを設定する
意外とModel側と似たような書き方で思ったとおりに書ける。シンプル。
migrations.CreateModel( name='ChildModel', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True)), ('parent_model', models.ForeignKey('ParentModel', on_delete=models.CASCADE)), ], options=[ ('db_table', 'child_models'), ] ),
これでMulキーも付きます。
int型。
DB上のカラム名は 'parent_model_id' になる。
環境:Django2.0 Python3.6
macのクリーンインストール @ansibleで自動インスコ付き【2018/01版】
雑なメモ書きですが
クリーンインストールメモ
参考サイト
Macbookクリーンインストールでやった事(Homebrew+Ansible)
https://qiita.com/decobisu/items/661eb3fb1faa14a2a76d
OSのクリーンアップ
- 必要なファイル等は外付けHDDなどに退避する。
- 今は情報の転送はしないを選択
- Macを探すは許可する
- コンピュータアカウントを作成(iCloudアカウントは使わなかった)
- FileVaultディスク暗号化を有効にする
- 診断と使用状況はチェックした
- クリーンインストールが終わったらApp storeからシステムアップデートをかける。
最新のOSをインストール
- 新規で購入したMBPなのにHighSierraが入っていなかったのでインストール
Xcodeをインストール
Dock
セキュリティとプライバシー
- スリープとスクリーンセーバの解除を15分後に
- Apple WatchでこのMacのロックを解除できるようにする → チェック入れても動かなかったので未設定
キーボード
- キーのリピートを速く(最速)
- リピート入力時間を短く(最短)
トラックパッド
- タップでクリックにチェック
- 軌跡の速さを速くする(最速)
サウンド
- メニューバーに音量を表示にチェック
共有
- コンピュータ名をかわいいのに変える
日付のオプション
- 曜日を表示
- 日付を表示
表示オプション
- デスクトップを右クリック → 表示オプションを表示
- アイコンサイズ 16x16
- ラベルの位置 右側
- 表示順序 名前
Homebrewをインストールする
Homebrewのインストール
xcode-select --install ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/insta
参考サイトの情報のままだと上手く行かないのでanacondaインストールする
brew install python ---> 2.7系が入るので嫌。3系のanaconda入れたい brew install ansible ---> pythonのフォルダにインストールしようとする brew install caskroom/cask/brew-cask ---> エラー出る
anacondaは以下からダウンロード
https://www.anaconda.com/download/#macos
chmod 755 ./Anaconda3-5.0.1-MacOSX-x86_64.sh ./Anaconda3-5.0.1-MacOSX-x86_64.sh
確認
Python -V Python 3.6.3 :: Anaconda, Inc.
ansibleインストール
brew install ansible
どうもこれ↓は入れなくて良い様子
brew install caskroom/cask/brew-cask ---> エラー出る
Ansibleの実行
プロビジョニング用のディレクトリ作成。
mkdir .macbook-provisioning cd .macbook-provisioning/
ansible用のinventoryファイル作成
echo 'localhost' > hosts
テキストを開き、以下をlocalhost.ymlとして保存
- hosts: localhost connection: local gather_facts: no sudo: no vars: homebrew_taps: - homebrew/binary - homebrew/dupes - caskroom/cask - homebrew/services homebrew_packages: - { name: readline } - { name: openssl } - { name: openssl, state: linked, install_options: force } - { name: git } - { name: wget } - { name: curl } - { name: go } - { name: rbenv } - { name: ruby-build } - { name: vim } - { name: mysql } - { name: redis } homebrew_enabled_services: - mysql - redis homebrew_cask_packages: - { name: iterm2 } - { name: firefox } - { name: google-chrome } - { name: google-japanese-ime } - { name: atom } - { name: skype } - { name: slack } - { name: vagrant } - { name: virtualbox } - { name: phpstorm } - { name: pycharm } - { name: datagrip } - { name: sequel-pro } - { name: postman } - { name: cyberduck } - { name: gimp } - { name: marp } - { name: vmware-fusion } - { name: sourcetree } tasks: - name: homebrew の tap リポジトリを追加 homebrew_tap: tap={{ item }} state=present with_items: "{{ homebrew_taps }}" - name: homebrew update確認 homebrew: update_homebrew=yes # brew - name: brew packageのインストール homebrew: > name={{ item.name }} state={{ item.state | default('latest') }} install_options={{ item.install_options | default() | join(',') if item.install_options is not string else item.install_options }} with_items: "{{ homebrew_packages }}" register: brew_result - name: brew パッケージの情報保存先ディレクトリを作成 file: path=brew_info state=directory - name: brew パッケージの情報を保存 shell: brew info {{ item }} > brew_info/{{ item }} with_items: "{{ brew_result.results | selectattr('changed') | map(attribute='item') | map(attribute='name') | list }}" # brew services - name: Get currently available brew services. shell: "brew services list | sed '1 d' | cut -d ' ' -f 1" register: brew_services - name: Enable brew services. command: "brew services start {{ item }}" with_items: "{{ homebrew_enabled_services }}" when: "'{{ item }}' in brew_services.stdout_lines" # - name: Install bundler(インストールは成功するが、Projectによってはうまく動作しなかった) # gem: # name: bundler # user_install: no # executable: /usr/local/bin/gem handlers: - name: run fc-cache shell: fc-cache -vf
Homebrew Caskオプションを設定
echo 'export HOMEBREW_CASK_OPTS="--appdir=/Applications"' >> ~/.bash_profile source ~/.bash_profile
作成したPlaybookを実行する
ansible-playbook -i hosts -vv localhost.yml
※MacBookPro 2017 Mid 15インチ (High Sierra)で動作確認済み
SettingWithCopyWarningメモ
こんな感じでdataframeにseriesを入れようとするとエラーが出る
df2['time'] = s1
表示されるエラー文はこんな感じ
/Users/Suzuki_Yasuharu/miniconda3/lib/python3.6/site-packages/ipykernel_launcher.py:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy This is separate from the ipykernel package so we can avoid doing imports until
対策
# こう↓するとエラーが出なくなる pd.options.mode.chained_assignment = None df2['time'] = s1
消費メモリを小さくするためのワーニングですんで、そのこと理解した上で使いましょー(・ω・)ノシ
参考サイト
indexing-view-versus-copy(エラー文に書いてあるページ)
pandas 0.21.0 documentation
How to deal with SettingWithCopyWarning in Pandas?
ちなみにこちら↓のようにconcatするとワーニング出ません(なんかちょっとやりたいことがが変わってしまう気はしますが)
python pandasでの列(column)へのSeriesの追加
要素1つ1つを選択しているのならこちらのやり方が正です。
Pythonの覚え書き(DataFrameのSettingWithCopyWarningの対処方法)