- 投稿日:2020-12-15T23:52:02+09:00
モデル作成後に、サーバ起動&アクセス時に「TypyError:'set' object is not reversible」となる場合の確認箇所について(@Python/jango)
はじめに
今回は、Djangoアプリ作成過程で起きたエラーについて触れていこうと思います。
TypyError:'set' object is not reversibleモデル作成を行った後、サーバー起動しアクセスした際に発生しました。
結論としては、入力ミスでしたので内容を確認していきます。
エラー詳細
models.pyを編集した後に、
以下のコマンドでサーバ起動しアクセス。$ python manage.py runserver原因
アプリケーションフォルダ内の
urls.pyの記述が以下の通りになっていました。。urlpatterns = { path('', views.index, name='index'), }誤:{}
正:[]
まとめ
基礎を確認しながら引き続き頑張ります!
参考にさせていただいた記事の作成者様ありがとうございました。
- 投稿日:2020-12-15T23:43:56+09:00
Big Surで文鎮化したMacBook Proを復旧する: How to Fix a Bricked MacBook Pro with Big Sur
まず始めに...
この記事は
今年は水没しなかったTokyo City University Advent Calendar 2020の25日目の記事です.
前日はましま氏の友人とともにCNCペンプロッタを作ってみたお話でした.導入
先日発表されたmacOS Big Surをご存知でしょうか.
このBig Sur, 「MacBook ProのMid2014モデル対応」と謳われていたのですが, アップデートを実施することで起動しなくなる=文鎮化するという報告が多数なされていました.
macOS Big Surアップデート中にMacが文鎮化するトラブルが多発Macのアップデートで文鎮化はほぼ毎回のように話題に出ているので, 今回も限られた一部の人だけが発症してるんだろう...そう思って意気揚々とBig Surのアップデートを実行したところ
Big Surアプデ後に文鎮化して草
— Nulldehyde (@null_1682) November 17, 2020
MacBook Pro Retina 13 in mid2014なのでモロ不具合報告の症例にヒットしましたね… pic.twitter.com/pa0EOUSpdm見事に文鎮化しました.
これといった解決策の書かれたサイトも見つからないので, 誰かの参考になれば, ということでクリスマスプレゼント代わりに置いておきます.
概要
実のところAppleもこの問題を認識しているらしく, 公式で対処法を発表しています.
If you can’t install macOS Big Sur on certain 13-inch MacBook Pro computers from 2013 and 2014
それならこの記事必要ないじゃん! と思うかもしれませんが, そうは問屋が卸さないということで...まずは事態の概要から見ていきましょう.
文鎮化した僕のMacBook Proの詳細を記載しておきます.モデル:MacBook Pro retina 13" Mid2014
CPU: i5, 2.6 GHz
RAM: 8 GB
SSD: 128 GB
アップデート前OS: macOS 10.15.7 Catalina今回, 文鎮化報告の多数は13インチのMacBook Pro Late2013, Mid2014に集中しているようなので, 僕の端末も当てはまります.
症状はBig Surアップデート中の再起動後にブラックアウトで文鎮化.
電源を入れるとバックライトは点灯するが画面は暗いまま. 林檎マークも表示されない.
キーコンビネーションは一切効かず, macOS復旧やPRAMリセット等も不可能.
外部モニタへの出力も当然不可.
Catalinaが入っている別のMacのSSDと交換しても起動せず.
といった具合です.ちなみに上記のAppleの解決方法はキーコンビネーションが使えることが前提であり, それができないのであればAppleサポートに連絡してくれ, となっていますが, Appleに連絡してもロジックボード有償交換がオチでした. しかも生産終了品のため在庫がなければ有償修理すら不可能...
ネットの情報を見ているとどうやらEFIファームウェアの破損が原因らしいのですが, EFIファームウェアの上書きもどうにかして本体を起動しないとどうにもならないわけで...
では万事休すなのかと言えば決してそうではなく, とりあえず結果から書くと
OS 起動可不可 備考 OS X Marvericks~El Capitan 可能 I/Oボードの有無関係無し macOS 可能 I/Oボードの有無関係無し となりました.
要するにどうにかなった訳です.根本的に解決したのかは疑問が残りますが, まぁ起動すればOKということで.
方法
長い前節を経ていよいよ本題です.
方法とは言ってもI/Oボードを外すだけなのですが.くれぐれも自己責任でおねがいします.
1. I/Oボード無しで起動できるかの確認
まずMacBook Proの裏蓋を開けてバッテリコネクタを外し, I/Oボードとロジックボードの接続ケーブルを外します.
— Nulldehyde (@null_1682) December 15, 2020ここでAppleのサポートは消滅します.
バッテリコネクタのみを接続し直し, command+Rまたはoption等の適当なキーコンビネーションで起動できるか確かめます.
ここで起動できない場合は残念ながら今回の手法は使えません.2. Mavericksのインストール
EFIブートROMを書き込むために一度Mavericksをインストールします.
正直EFIブートROMを書き込んだ後にもHigh Sierraの動作が若干不安定だったので, これに意味があるのかはわかりませんが, とりあえずおまじない代わりにでもやっておきます.command+RのmacOS復元や, 任意のバージョンのインストールディスク等適当な方法でMarvericksをインストールしてください.
Mavericksのインストーラは現在AppleのHPからダウンロードできないので, mas-cli等を使いどうにかこうにか入手します.SSDをフォーマットせずに実行したら失敗したのでフォーマット推奨です.
当然データは消えるので, ターゲットディスクモードやシングルユーザモードでデータの移行をしておきましょう.3. EFIブートROMの書き込み
Mavericksを入れたらEFIブートROMを書き込んでいくのですが, Appleから落としてきたpkgファイルを実行しようとしても「もう最新バージョンが入ってるから意味ないで」というようなメッセージが出て実行できません.
そこで以下のように操作を行います.
- AppleからEFIブートROMのDL
- pkg内のscapファイルを取り出して
sudo bless -mount / -firmware /path/firmware.scap- 再起動
この処理をした後, I/Oボードをつけた状態でHigh Sierraにアップデートしたら見事に起動しなかったので, 十中八九失敗してます. (Sierraは起動しました.)
何か他にやり方がありそうなもんですが全くわかりません. 教えてエロい人.4. Big Surのインストール
何が最適な方法なのかはわかりませんが, 今回僕は検証も兼ねて
1. Mavericks
2. Yosemite
3. El Capitan
4. Sierra
5. High Sierra
6. Catalina
7. Big Sur
の順番でインストールしました.
ただ, Sierra~Catalinaの時, すなわちBig Surを除くmacOS時にI/Oボードを接続していると起動しなかったので, 任意のOSをインストールする前に一度Big Surまで駆け抜けるのがミソなのかなと.5. I/Oボード再接続
一度システム終了してから, 1で外したケーブルを再接続してBig Surの起動確認をします.
(tweet内の「モッサモサ」は再起動で解消されました)I/Oボード抜きでBigSur起動できたけどめちゃモッサモサで草 pic.twitter.com/zOEXVt7a0q
— Nulldehyde (@null_1682) December 14, 2020BigSurにアプデしたらI/O付きで普通に起動するようになって草
— Nulldehyde (@null_1682) December 14, 2020ここで起動しない場合はI/Oボード無しでの運用若しくはOS Xでの運用になります.
I/Oボードが無くても右側I/OポートとWi-Fi, BTが使えなくなるだけなので...6. 任意のOSにダウングレード
必要であれば, 適当なインストールディスクを作成する等して任意のOSにダウングレードしてください.
一度Mavericksに戻し, El Capitan -> High Sierra -> Yosemite -> Catalinaの順でインストールしましたが, Big Surインストール後ではI/Oボードを付けたまま全て正常に起動できました.Big Surで文鎮化したMacBook Pro, どうにかして一度Big Surに完全にアプデしちゃえばBig Sur以外のmacOSもI/Oボード有りで使えるようになるっぽいわね
— Nulldehyde (@null_1682) December 18, 2020
(応急処置後OS XはI/Oボード有りでも起動したけどmacOSは起動しなかった) pic.twitter.com/t0JeMIQlWi終わりに
ここまでやっておいてなんですが, Macの起動プロセスが「POST -> ジャーン -> EFI」らしいので, EFIというよりもPOST(Power-On Self-Test)の方で問題が起きてそうな気もします.
とは言えI/Oボードは他のMacBook Proで普通に使えたので, ロジックボードとの相性問題でしょうか.
そういえば再度インストールしたBig Surのバージョンが11ではなく11.1でした.
ということは今回の故障は初期Big Surによるファームウェアアップデート時の破損ではなく, 元々の仕様でI/Oボードとの相性悪化が原因...?最初I/Oボードを取り付けた状態でOS Xは正常に起動できてmacOSは起動しなかったことも気になりますが, ま〜〜〜サッパリです.
と、いうわけでいかがでしたか?
今回はBig Surに文鎮化されたMacBook Proの復旧方法について調べてみました!
やはり林檎なだけあって, 本質は皮に包まれて改善できませんでしたね!
しかし, 難易度が高いほどモチベーションが上がると言うもの!
今後もAppleの動向から目が離せませんね!それでは, ここまで読んでいただきありがとうございました!
- 投稿日:2020-12-15T22:21:25+09:00
iPhoneのスクリーンタイムをデータとしてスプレッドシートに記録してみた
はじめに
スマホ、触りすぎていませんか?
私は隙があればついついスマホでYouTubeやSNSを長々と見てしまいます。YouTubeを始めた芸能人も多く、無限にコンテンツを楽しめてしまいますよね。コロナ渦で自宅にいることが増えたこともあってか、スクリーンタイムを見て唖然としてしまう日も少なくありません...。
そんな中、スクリーンタイムをSNSに投稿して勉強のモチベーションにしている受験生を見て、こういう使い方もあるんだなぁと感心しました。
とはいえ、わざわざ設定画面を開いてスクショを撮り、それをトリミングしてSNSに手動で投稿するのは少々面倒に感じます()幸いなことに、macからも同じApple IDで登録されてデバイスのスクリーンタイムを見ることができます。また、macにはAutomatorという操作を自動化するアプリケーションがあります。
さらに、Googleが公開しているCloud Vison APIを使えば、画像から文字を抽出することができます。これらを上手いこと使って自動で「iPhoneのスクリーンタイムをデータとして記録する」までを行ってみました。
日々の生活を記録することで自己管理を効率化できるのではないかと思います!スクリーンタイムについて
スクリーンタイムで見れる項目には、
- App使用時間
- 通知
- 持ち上げ/再開回数
があります。
macのスクリーンタイム画面からは、サイドバーからこれらを選択して各項目の利用状況のグラフを見ることができます。注目すべきはシステム環境はウインドウサイズが一定で、スクリーンタイム内の文字やグラフの配置も同じような箇所にあることです。そのため、OCRで読み取りたい箇所だけを決め打ちでトリミングできます。Automator
文字認識をしたいスクリーンタイムの画像を取得するためにAutomatorを使います。
Automatorの大まかな流れはこのような感じです。
- システム環境設定を開く
- 操作を記録して、スクリーンタイムを開き、取得したいデバイスを選択する
- 「App使用時間」「通知」「持ち上げ/再開回数」それぞれでスクリーンショットを撮影 & OCRしたい箇所をトリミング
- トリミングした画像をくっつけてVisonAPIでテキスト取得、スプレッドシートに記録
Automatorの詳細
システムの外観モードを変更
起動したタイミングで外観モードをライトに変更しています。
AppleScript
「アプリケーションを開く」でシステム環境設定を開くと画面が手前にならないことがあり、操作を記録のステップで処理がコケてしまうのでAppleScriptで起動しています。
tell application "System Preferences" activate end tell操作を記録
Automatorアプリの
(記録)ボタンを押して、システム環境設定 > スクリーンタイム > デバイスの選択 > 日付を昨日に変更 までの流れをを記録させています
シェルスクリプトを実行
screencaptureコマンドで画面のスクリーンショットを撮影します。-lオプションで指定したwindow1dの画面を撮影することができます。また、-xは撮影音OFF、-oはスクリーンショットの影をなくすオプションです。
前の手順でクリックした直後に撮影しないように念のためシェルスクリプトの最初でsleep 1sとしています。sleep 1s dir="$HOME/lifelog" filepath=$dir/`date -v -1d +%Y%m%d`_screentime.png crop="/tmp/cropped_1.png" screencapture -xo -l$(osascript -e 'tell app "システム環境設定" to id of window 1') $filepath /usr/local/bin/convert $filepath -crop 828x574+466+152 $filepath # パスが通っていないので、フルパスで書く /usr/local/bin/convert $filepath +repage -crop 400x60+20+60 $crop操作を記録
システム環境設定のサイドバーにある「通知」のクリック操作を記録しています。「通知」をクリックした後は上記と同じ内容のシェルスクリプトを実行します。「持ち上げ/再開」でも同様に行います。
画像の結合とVisionAPI
/usr/local/bin/convert /tmp/cropped_1.png /tmp/cropped_2.png /tmp/cropped_3.png -append /tmp/combined.png python record_screentime.py # Vision APIとシートに記録スクリーンショットとトリミング
macでは、
screencaptureコマンドでCLIからスクリーンショットを撮影できます。
トリミングにはImageMagickのconvertコマンドを使用しています。-cropオプションの値には、(width)x(height)+(left)+(top)を指定しています。
また、一度cropした画像にさらにcropしようとするとconvert: geometry does not contain imageというエラーが出てしまいましたが、-cropの前に+repageをつけることで解消できました。# ウインドウを指定してスクリーンショットを撮影 screencapture -xo -l$(osascript -e 'tell app "システム環境設定" to id of window 1') screentime.png # crop convert screentime.png -crop 828x574+466+152 screentime.png # OCRしたい箇所でさらにcrop convert screentime.png +repage -crop 400x60+20+60 screentime_cropped.png上記コマンドでOCRで文字認識したい箇所でcropすると、
- App使用時間
のようになります。これらを結合した画像をVisino APIに投げます。画像の結合は、以下のコマンドで行いました。
+appendで縦方向、-appendで横方向に結合できます。convert /tmp/cropped_1.png /tmp/cropped_2.png /tmp/cropped_3.png -append /tmp/combined.png結合した画像
これで準備完了です。
Vision APIとシートに記録
いよいよ準備した画像を使って、文字認識を行ってデータとして保存します。
以下の記事などを参考にさせていただきました。![]()
- PythonでGoogleのCloud Vision APIを利用して画像から日本語文字検出する
- 【Google Colab】Vision APIで『レシートOCR』!
- Pythonでのスプレッドシート操作方法(gspreadの使い方)
import gspread import json from datetime import datetime, timedelta from oauth2client.service_account import ServiceAccountCredentials import os import io import re from google.cloud import vision credential_path = '【サービスアカウントキーのパス】' os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = credential_path file_path = "/tmp/combined.png" with io.open(file_path, "rb") as image_file: content = image_file.read() image = vision.Image(content=content) client = vision.ImageAnnotatorClient() response = client.text_detection(image=image) data = response.text_annotations[0].description.split() # [0]でfull textを取得 scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] credentials = ServiceAccountCredentials.from_json_keyfile_name(credential_path, scope) gc = gspread.authorize(credentials) SPREADSHEET_KEY = '【スプレッドシートのキー】' worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1 yesterday = datetime.today() - timedelta(days=1) date = datetime.strftime(yesterday, '%Y/%m/%d') d = re.findall("\d+", data[0]) # 'xx時間yy分` -> ['xx','yy'] d = list(map(int, d)) if len(d) == 2: # xx時間yy分の場合 data[0] = d[0]* 60 + d[1] elif len(d) == 1: # yy分の場合 data[0] = d[0] data = list(map(int, data)) data.insert(0, date) worksheet.append_row(data, value_input_option="USER_ENTERED")スクリーンタイムのデータがシートに反映されました!
あとはAutomatorのアプリを起動すれば今までの処理を自動で行ってくれます。(本当はcronで設定したかったけど、画面操作があるためできませんでした。。)ちなみに、VisionAPIを使った文字認識の結果はこうなりました。緑がParagraph、黄色が文字を表しています。きれいに認識できていますね。
おわりに
自動化ソフトや画像認識のツールを使って、スクリーンタイムをログに残してみました。せっかくならスクショだけはでなくて数字で記録に残せるといいですよね。
VisionAPIは1ヶ月1000リクエストまで無料なので毎日スクリーンタイムを記録して問題なさそうです。今のところスクリーンタイムを記録する術は英語でググっても見つからなかったので、この記事が誰かの参考になれば幸いです。
(Appleさん、スクリーンタイムもヘルスケアから読み取れるようにしてください)
- 投稿日:2020-12-15T22:21:25+09:00
iPhoneのスクリーンタイムをOCRで記録してみた
はじめに
スマホ、触りすぎていませんか?
私は隙があればついついスマホでYouTubeやSNSを長々と見てしまいます。YouTubeを始めた芸能人も多く、無限にコンテンツを楽しめてしまいますよね。コロナ渦で自宅にいることが増えたこともあってか、スクリーンタイムを見て唖然としてしまう日も少なくありません...。
そんな中、スクリーンタイムをSNSに投稿して勉強のモチベーションにしている受験生を見て、こういう使い方もあるんだなぁと感心しました。
とはいえ、わざわざ設定画面を開いてスクショを撮り、それをトリミングしてSNSに手動で投稿するのは少々面倒に感じます()幸いなことに、macからも同じApple IDで登録されてデバイスのスクリーンタイムを見ることができます。また、macにはAutomatorという操作を自動化するアプリケーションがあります。
さらに、Googleが公開しているCloud Vison APIを使えば、画像から文字を抽出することができます。これらを上手いこと使って自動で「iPhoneのスクリーンタイムをデータとして記録する」までを行ってみました。
日々の生活を記録することで自己管理を効率化できるのではないかと思います!スクリーンタイムについて
スクリーンタイムで見れる項目には、
- App使用時間
- 通知
- 持ち上げ/再開回数
があります。
macのスクリーンタイム画面からは、サイドバーからこれらを選択して各項目の利用状況のグラフを見ることができます。注目すべきはシステム環境はウインドウサイズが一定で、スクリーンタイム内の文字やグラフの配置も同じような箇所にあることです。そのため、OCRで読み取りたい箇所だけを決め打ちでトリミングできます。Automator
文字認識をしたいスクリーンタイムの画像を取得するためにAutomatorを使います。
Automatorの大まかな流れはこのような感じです。
- システム環境設定を開く
- 操作を記録して、スクリーンタイムを開き、取得したいデバイスを選択する
- 「App使用時間」「通知」「持ち上げ/再開回数」それぞれでスクリーンショットを撮影 & OCRしたい箇所をトリミング
- トリミングした画像をくっつけてVisonAPIでテキスト取得、スプレッドシートに記録
Automatorの詳細
システムの外観モードを変更
起動したタイミングで外観モードをライトに変更しています。
AppleScript
「アプリケーションを開く」でシステム環境設定を開くと画面が手前にならないことがあり、操作を記録のステップで処理がコケてしまうのでAppleScriptで起動しています。
tell application "System Preferences" activate end tell操作を記録
Automatorアプリの
(記録)ボタンを押して、システム環境設定 > スクリーンタイム > デバイスの選択 > 日付を昨日に変更 までの流れをを記録させています
シェルスクリプトを実行
screencaptureコマンドで画面のスクリーンショットを撮影します。-lオプションで指定したwindow1dの画面を撮影することができます。また、-xは撮影音OFF、-oはスクリーンショットの影をなくすオプションです。
前の手順でクリックした直後に撮影しないように念のためシェルスクリプトの最初でsleep 1sとしています。sleep 1s dir="$HOME/lifelog" filepath=$dir/`date -v -1d +%Y%m%d`_screentime.png crop="/tmp/cropped_1.png" screencapture -xo -l$(osascript -e 'tell app "システム環境設定" to id of window 1') $filepath /usr/local/bin/convert $filepath -crop 828x574+466+152 $filepath # パスが通っていないので、フルパスで書く /usr/local/bin/convert $filepath +repage -crop 400x60+20+60 $crop操作を記録
システム環境設定のサイドバーにある「通知」のクリック操作を記録しています。「通知」をクリックした後は上記と同じ内容のシェルスクリプトを実行します。「持ち上げ/再開」でも同様に行います。
画像の結合とVisionAPI
/usr/local/bin/convert /tmp/cropped_1.png /tmp/cropped_2.png /tmp/cropped_3.png -append /tmp/combined.png python record_screentime.py # Vision APIとシートに記録スクリーンショットとトリミング
macでは、
screencaptureコマンドでCLIからスクリーンショットを撮影できます。
トリミングにはImageMagickのconvertコマンドを使用しています。-cropオプションの値には、(width)x(height)+(left)+(top)を指定しています。
また、一度cropした画像にさらにcropしようとするとconvert: geometry does not contain imageというエラーが出てしまいましたが、-cropの前に+repageをつけることで解消できました。# ウインドウを指定してスクリーンショットを撮影 screencapture -xo -l$(osascript -e 'tell app "システム環境設定" to id of window 1') screentime.png # crop convert screentime.png -crop 828x574+466+152 screentime.png # OCRしたい箇所でさらにcrop convert screentime.png +repage -crop 400x60+20+60 screentime_cropped.png上記コマンドでOCRで文字認識したい箇所でcropすると、
- App使用時間
のようになります。これらを結合した画像をVisino APIに投げます。画像の結合は、以下のコマンドで行いました。
+appendで縦方向、-appendで横方向に結合できます。convert /tmp/cropped_1.png /tmp/cropped_2.png /tmp/cropped_3.png -append /tmp/combined.png結合した画像
これで準備完了です。
Vision APIとシートに記録
いよいよ準備した画像を使って、文字認識を行ってデータとして保存します。
以下の記事などを参考にさせていただきました。![]()
- PythonでGoogleのCloud Vision APIを利用して画像から日本語文字検出する
- 【Google Colab】Vision APIで『レシートOCR』!
- Pythonでのスプレッドシート操作方法(gspreadの使い方)
import gspread import json from datetime import datetime, timedelta from oauth2client.service_account import ServiceAccountCredentials import os import io import re from google.cloud import vision credential_path = '【サービスアカウントキーのパス】' os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = credential_path file_path = "/tmp/combined.png" with io.open(file_path, "rb") as image_file: content = image_file.read() image = vision.Image(content=content) client = vision.ImageAnnotatorClient() response = client.text_detection(image=image) data = response.text_annotations[0].description.split() # [0]でfull textを取得 scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] credentials = ServiceAccountCredentials.from_json_keyfile_name(credential_path, scope) gc = gspread.authorize(credentials) SPREADSHEET_KEY = '【スプレッドシートのキー】' worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1 yesterday = datetime.today() - timedelta(days=1) date = datetime.strftime(yesterday, '%Y/%m/%d') d = re.findall("\d+", data[0]) # 'xx時間yy分` -> ['xx','yy'] d = list(map(int, d)) if len(d) == 2: # xx時間yy分の場合 data[0] = d[0]* 60 + d[1] elif len(d) == 1: # yy分の場合 data[0] = d[0] data = list(map(int, data)) data.insert(0, date) worksheet.append_row(data, value_input_option="USER_ENTERED")スクリーンタイムのデータがシートに反映されました!
あとはAutomatorのアプリを起動すれば今までの処理を自動で行ってくれます。(本当はcronで設定したかったけど、画面操作があるためできませんでした。。)ちなみに、VisionAPIを使った文字認識の結果はこうなりました。緑がParagraph、黄色が文字を表しています。きれいに認識できていますね。
おわりに
自動化ソフトや画像認識のツールを使って、スクリーンタイムをログに残してみました。せっかくならスクショだけはでなくて数字で記録に残せるといいですよね。
VisionAPIは1ヶ月1000リクエストまで無料なので毎日スクリーンタイムを記録して問題なさそうです。今のところスクリーンタイムを記録する術は英語でググっても見つからなかったので、この記事が誰かの参考になれば幸いです。
(Appleさん、スクリーンタイムもヘルスケアから読み取れるようにしてください)
- 投稿日:2020-12-15T22:16:48+09:00
第11回、RubyでClass化
Class
本記事は大学院前期過程の講義[マルチスケールシミュレーション特論]に関する記事です
Ruby で Class を扱っていきます。Class化する前のhelloメソッド
def hello(name) puts "hello #{name}" end def gets_name name = ARGV[0] if name == nil puts "What\'s your name? " name = gets.chomp end return name end hello gets_nameこれに対して、Hello Classを定義して、RubyにおけるClassをみていきます
いきなりClass化
いきなりですが、Class化が完了したソースコードを拝見。
class Hello def initialize @name = gets_name puts_hello end def puts_hello puts "Hello #{@name}." end def gets_name name = ARGV[0] || 'world' return name.capitalize end end Hello.newなるほど。簡単やん。ここで注目すべきポイントを下に記述します。
- initialize
- これはいわゆるコンストラクタ。
- @name
- これはClassのメンバー変数となる。(アットマークをつける)
- capitalize
- 大文字にしてくれる。英単語そのままやけど。
- Hello.new
- これでハローclassの宣言が可能となる。
継承とかオーバーライド
これに関してもコードをみて学習。
# 継承 class Hello < String def hello "Hello #{self}." end end # オーバーライド class String def hello "Hello #{self}." end endなるほど。すごく単純。ここで改めて思うこと、Ruby ってめちゃめちゃ簡単やし単純やし学習コスト低いなー。
ちなみに呼び出しとか使用は以下の通りrequire 'colorize' # 継承呼び出し greeter = Hello.new(ARGV[0]) puts greeter.hello.green # オーバーライド呼び出し puts ARGV[0].hello.greenRuby簡単。Cで組込み開発してるけどしたくなくなる。以上。
- source ~/Library/Mobile Documents/com~apple~CloudDocs/KG/class/M1/multi_scale_sim/grad_members_20f/members/ryomichi56/./qiita/no11.org
- 投稿日:2020-12-15T21:29:19+09:00
macでGNUコマンドを使う
背景
Unixコマンドを書籍やブログ通りに実行しても同じ結果にならない。。。ので調べていると、UnixコマンドはBSD系のOS(macOSやFreeBSD)とLinux系のOS(GNU)で異なる実装がされているのですね。
自分の環境(macOS)でもGNUコマンドが使用できるようにします。参考:Homebrew で macOS に GNU コマンドをインストールする
環境
PC: MacBook Pro 2020
OS: macOS Catalina (10.15.5)
shell: zsh (5.7.1)方法
Homebrewでインストールします。
brew install coreutils brew install grepcoreutilsではcutやsortなど複数のコマンドがインストールされます。
既存のコマンドと区別するためGNUコマンドはgを先頭につけるようにとあります。すなわちGNUのcutやsortを使う場合はgcutやgsortと入力します。
coreutilsでインストールされたコマンドは「/usr/local/Cellar/coreutils/8.32/bin」にあります。
個人的に使いたかったgrepはcoreutilsには含まれていないので別途インストールしています。結果
grep(BSD grep)とggrep(GNU grep)のバージョン情報を表示させてみます。問題なくインストールできているようです。
grep --version; ggrep --version
- 投稿日:2020-12-15T12:24:47+09:00
MacOS Big Surアップグレード後VirtualboxのGUIが動かなくなった際の対処
いきなり対処法(結論)から
下記を実行する。
- VirtualBox(とそのExtension)をアンインストールする
- MacOSをCmd + Rを押し続けながら再起動する(Recovery modeへ入ります)
- Recovery modeでTerminalを開く
- 下記のコマンドを実行する
csrutil clear rebootこの後VirtualBoxをHomebrewなりインストーラを起動するなりでインストールする。
必要に応じてSecurity & PrivacyのGeneralタブからOracle Extensionを許可する。経緯
MacOS Big SurでVirtualBoxが正常に動作しない問題は現在(2020年12月15日)こちらのチケットで進行中。
Qiitaでも色々な方が対処法を記載して頂いているようです。
- MacOS Big SurにしたらVritualBoxとVagrantが動かなくなったので動かすまでやったこと!
- 【macOSアップデート】vagrant upできない時に一通り試すと良いかもしれない方法
- Vagrant up でエラーが出た(macOSをBig Surにアップデートしたとき)
ただ私の環境だとこれらの対処法では解決せず、VagrantのBackendにVirtualBoxを使っている関係上
かなり困っていました。
4,5時間程度色々な対処法を検索しては試しを繰り返していたのですが、ようやくこちらの手順で解決できました。
どうにも許可設定周りがバグってる感じで、リセットしたくてVirtualBoxに付属のアンインストールスクリプトを実行したり再起動したりしていましたが、
いずれも解決には至りませんでした。同様に困っている人の助けになれば幸いです。
- 投稿日:2020-12-15T10:56:35+09:00
node.jsを自分のMacにインストールした
備忘録として。
node.jsを自宅のMacにインストールしようと思うHomebrewから今回はやってみた
HomebrewとはMacOSで広く使われるパッケージ管理システム。。らしいHomebrewを下記URLからまずインストール
https://brew.sh/index_jaターミナルで
brew -v
とコマンドを入力したら下記のようにバージョンが表記されたらインストール完了Homebrew 2.6.1 Homebrew/homebrew-core (git revision dfe59; last commit 2020-12-14)そしたらいよいよnode.jsのインストールへ。
brew install nodebrewインストールが完了したら下記コマンドで確認
nodebrew -vnodebrew 1.0.1~~
上記のようなばーじょんから始まる長ったらしい文が表示されたらOK続いて下記コマンドを入力
nodebrew ls-remoteしたら、ズラーっとvX.XX.Xのような表記でバージョンが並べられる
どのバージョンでもいいが推奨のバージョンをインストールする方がいいと思われるので、
今回は推奨バージョンをインストールすることに。
調べたら下記コマンドで推奨バージョンをインストールできるらしいnodebrew install-binary stable僕の場合ここでエラーが出てしまった
調べたところフォルダを作ってあげなきゃいけないみたいで
こちらのコマンドで作成。。。mkdir -p ~/.nodebrew/srcインストール完了したらバージョンを確認
nodebrew ls下記のように表示されればOK
現在インストールされてるバージョンが羅列される
ちなみにcurrentの部分には現在使用中のバージョンが入るv14.15.1 current: noneuseの後に使用するバージョンを選択
nodebrew use v14.15.1もう一度nodebrew lsを試したら
v14.15.1 current: v14.15.1上記のようにcurrentに入る
次は環境パスの設定
環境パスとはフルパスを指定せずソフト名のみを指定するだけで
プログラムを起動できるようにシステムに予め設定しているパス。
'>>'の後には各SHELLごとに合わせたファイルを指定
自分はzshだったので~/.zprofileを指定echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zprofileそしたらnodeコマンドを実行
node -vインストールしたバージョンが表示されたらOK
以上でnode.jsインストール完了













