20200521のMacに関する記事は9件です。

【Python】スクリーンショットを撮る【Mac】

環境

macOS Mojave
Python 3.7.6

動機

数多のスクリーンショットの取り方を見たが、全くわからない。
そもそも、このコードを入れるとかあるが、それがターミナルなのかコードで書けばいいのか全くわからなかったので備忘録も兼ねてここに書き連ねておく。

スクリーンショットを撮る

はじめに

まずここで気をつけて欲しいことは、sshを通してやらないこと。(ここでかなり苦戦した)
環境構築の際にVagrantを使った人もいるかもしれないが、今回は使わないのでターミナル起動時の

(base) 自分のMacの名前:ユーザー名$ 

の状態になっていることを確認して欲しい。

次にpyautoguiのインストール

ターミナルに

pip install pyautogui

を打ち込む。
しばらくするとインストールが完了するので終わったら今度はテキストソフトで

import pyautogui

screenshot = pyautogui.screenshot()
screenshot.save('保存名.png')

を打ち込んでscreenshot.pyで保存。(screenshotという名前でなくてもいい)
そしたらターミナルに戻り、

python screenshot.py

と打ち込む。これでスクリーンショットが保存される。

注意点

screenshot.pyは自分のユーザーファイルに入れておく。
例えば、ターミナルに

(base) mba:yamadatarou$

と表示されているのならば、yamadatarouというフォルダに入れなければならない。
またスクリーンショットもそのフォルダに入っているので注意が必要。

おわりに

研究でpythonを使うため初めて2日目の初心者だがwebを見て調べても何を言っているのかさっぱりわからなかったためこの記事を作成した。初心者なのでこの記事には至らぬ点も多いと思うが自分の備忘録兼同じ悩みを抱えているpython初心者の人の役に立てれば幸いだ。
それと勘違いして欲しくなのいのだが、参考記事の方が悪いのでなくPythonの理解が全くない自分が悪いということだけは覚えておいて欲しい。
#参考
【Python】スクリーンショットをとる

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac にhomebrew caskでfira-codeフォントをインストールする

インストールメモ

MacのVisual Studio Codeで合字(リガチャ)フォントを使用したくて、Windowsでも使用しているfira-codeをインストールしようとしたのだが、ググって出てくる記事が古いのが多かったので、自分用メモ

homebrewのバージョン

  • 2.2.17

記事でよくみたコマンド

brew tap caskroom/fonts
brew cask install font-fira-code

このコマンドだと以下のエラーが出てしまうので、

Error: caskroom/fonts was moved. Tap homebrew/cask-fonts instead.

正しくは

brew tap homebrew/cask-fonts
brew cask install font-fira-code

これにてインストール完了!
ってここまで書いて、ちゃんとエラーメッセージみれば答え書いてあるじゃん。。。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

mac で現在 LISTEN しているポート番号を知る

mac で現在 LISTEN しているポート番号の一覧を見たい場合。

環境

  • macOS Mojave version 10.14.6
  • lsof revision 4.89

コマンド

$ lsof -iTCP -sTCP:LISTEN -P

結果

COMMAND     PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
rapportd    356 egawata    3u  IPv4 0xd68c30d678a3f317      0t0  TCP *:55070 (LISTEN)
rapportd    356 egawata    4u  IPv6 0xd68c30d67bdca4d7      0t0  TCP *:55070 (LISTEN)
mysqld      622 egawata   27u  IPv4 0xd68c30d665a35017      0t0  TCP localhost:3306 (LISTEN)
mysqld      622 egawata   30u  IPv4 0xd68c30d665a34697      0t0  TCP localhost:33060 (LISTEN)
com.docke 70416 egawata   10u  IPv4 0xd68c30d6795be017      0t0  TCP localhost:56632 (LISTEN)

オプションの解説

-i : 特定のインターネットアドレスにマッチするもののみ抽出

インターネットアドレスとは、以下の形式で指定するもの。使いたい条件のみ指定すれば良い。

[46][protocol][@hostname|hostaddr][:service|port]
  • 46
    • IPv4, もしくは IPv6 のいずれかのみ
    • 例: -i4
  • protocol
    • TCP UDP のいずれかのみ
    • 例: -iTCP
  • @hostname|hostaddr
    • 特定の hostname もしくは address を持つもののみ。頭に @ をつける。
    • 例: -i@localhost
  • :service|port
    • 特定のサービス あるいはポートのみ。頭に : をつける。
    • 例: -i:3306
  • 以上を組み合わせ、例えば -iTCP:3306 のように指定しても良い。

-s : 特定のプロトコルとステートを条件指定

-s(protocol):(state) の形式。例: -sTCP:LISTEN だと、TCP の LISTEN しているもののみ抽出される。

-P : ポート番号を名前変換しない

例えば 3306mysql などと変換しない。
若干動作が早くなる。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

初めてのPython ~コーディング編2~

対象者

前回の記事の続きです。
本記事では前回の記事のgraph_plot.pyを元に話題をPythonのリストや条件分岐、ループ処理に移していきます。
全部すっ飛ばしても大丈夫な人は不連続な関数を描こうへどうぞ。

目次

Pythonのリスト

前回の記事では、Pythonには配列が存在しないと述べました。
その代わり、Pythonにはリスト(List)と呼ばれるデータ構造が標準搭載されています。
今回はそれについて少し触れます。

リストとは

まずリストについて簡単な説明から行います。


list_sample.py
list_sample.py
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(x)

x.append(10)
print(x)

#print(x + 3)
# TypeErrorが起こる

print(x + [3])
print(x * 3)

x = np.array(x)
print(x)
x = list(x)
print(x)

リストは配列と似た概念で、次のように用いることができます。

list_sample.py
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(x)

このxnumpy_calc.pyで定義したxと出力結果が同じになっていることに気づきましたか?
つまり、リストと配列は似たデータ構造であることがわかります。
その最大の違いはデータサイズが可変であることです。

list_sample.py
x.append(10)
print(x)

10が追加されましたね。
このappendメソッドはリスト型のデータ構造が持っている関数1で、要素を追加するためのものです。
もちろんnumpy配列で同じことをしようとしてもエラーが出るだけです。
numpyでは一度定義した配列のサイズを変更するには(内部処理で)どこかに改めてコピーする必要があります。
その点リストは予め大きめにメモリを確保することで、要素を追加する際にかかるメモリ確保の時間を節約することができます。
要するにそれぞれメリット/デメリットがあるということです。
他にもリストには要素を削除する関数などもあります。
また、リストにはnumpy配列のブロードキャスト機能はありません。

list_sample.py
#print(x + 3)
# TypeErrorが起こる

ただし次のようなことはできます。

list_sample.py
print(x + [3])
print(x * 3)

リスト同士の足し算であれば要素の追加になります。
リストと自然数の掛け算はリストそのものを数値の数だけ繰り返したリストとなります。2
その他の演算はTypeErrorが出てできません
さらに、numpy配列とリストは相互に変換もできます。

list_sample.py
x = np.array(x)
print(x)
x = list(x)
print(x)

以上で本記事で必要なリストの知識の紹介はおしまいです。
要約すると

  • リストはデータサイズが可変の配列のようなもの
  • numpyとリストは相互に変換できる

だけ知っておけば本記事ではOKです。

条件分岐とループ処理

条件分岐とは「ある条件を満たすなら〇〇、そうでなければ××」という処理のことです。
(この処理は人間の意思決定とも似ているところがありますね)
ループ処理とは「ある条件を満たすまで同じ処理を繰り返す」という処理のことです。
(これは機械っぽい処理ですね)

では具体的にどのようにコードを書くのか、実際にやっていきましょう。

if

Pythonの条件分岐と言えばif文だけ3です。
C言語などをやったことのある人は「え、switchとかないの?」と思うかもしれませんね。
Pythonではswitch文の類はありません。いちいち書かなければいけません。面倒ですね。
初めての人にとっては覚えることが減ってラッキーかもしれません笑。
とりあえず、この条件分岐を使ってみましょう。


if_sample.py
if_sample.py
x = 5
if x > 0:
    # 条件式x > 0が真ならばここの処理
    print("xは0より大きいです。")
else:
    # 条件式x > 0が偽ならばここの処理
    # つまりx <= 0ならばここの処理です
    if x == 0:
        # 条件式x == 0が真ならばここの処理
        # <note>
        # ==は式の両辺が等しいか、という条件式です
        # 逆に、式の両辺が等しくないか、という演算は!=です
        print("xは0です。")
    else:
        # 条件式x == 0が偽ならばここの処理
        # つまり、x != 0ならばここの処理です
        print("xは0より小さいです。")

if x > 0:
    print("xは0より大きいです。")
elif x == 0:
    print("xは0です。")
else:
    print("xは0より小さいです。")

この二つのif文は全く同じ動作をします。
上の方はif elseのみ、下の方はif elif elseという文法を使って書いています。
見ての通りですが、if文の中にif文を書く(ネストする、といいます)ことができます。
もちろんもっとたくさんネストさせることも可能ですが、読みにくくなってしまうのでできるだけネストは少なめにするよう心がけましょう。
つまり下の方が読みやすいコードということですね。

文法まとめ

if_grammer_summary.py
if (条件式1):
    # (条件式1)が真(True)ならここに記述された処理を実行
#-----ここから-----
elif (条件式2):
    # (条件式1)が偽(False)で(条件式2)が真(True)ならここに記述された処理を実行
elif (条件式3):
...
else:
    # 全ての条件式が偽(False)ならここに記述された処理を実行
#-----ここまで-----
# 全て省略可能です。つまり最初のifだけでもOK。

for文とwhile

続いてループ処理です。
Pythonのループ処理にはforwhileの二つがあります。
二つある理由はたまに使い分けたいことがあるからですが、for文をwhile文に、while文をfor文に、等価な処理を行うように変換できますのでお好みで...と言いたいですが、基本的にfor文を使うことを個人的にオススメします。
理由は後ほど...

for

まずはfor文から。


for_sample.py
for_sample.py
for i in range(10):
    print(i)
print("----------")

for i in range(1, 10):
    print(i, end=" ")
    if i > 5:
        print("\n{} > 5".format(i))
        print("ループを抜けます")
        break
else:
    print("この文は出力されません。")

さて、上の方のfor文は0〜9まで、縦に並べて出力されます。
下の方は6までが横に並べて出力されて、「6 > 5」「ループを抜けます」と出力されて終わるはずです。
(ついでなのでいくつか紹介していない関数などを使っています。気になった方はググってみましょう。)

for文は文法を見た方がわかりやすいですね。

for_grammer_summary.py
for (変数名) in (配列やリストなど):
    (繰り返したい処理をここに書く)
else:
    (ループが正常に終了した場合の処理やループが1度も実行されなかった時に行いたい処理をここに書く)

range関数は指定された数までのリストのようなもの4を返します。
break文はループを強制的に抜けるためのものです。
for文では、(配列やリストなど)で指定された数値が順番に(変数名)に代入されて処理が行われます。

for_sample.pyの一つ目のループでは

  • 変数i0が代入される
  • print関数によって0が出力される
  • 変数i1が代入される
  • print関数によって1が出力される
  • ...

のように処理が進みます。

二つ目のループはfor else文の紹介のために書きました。
Pythonでは他の言語には滅多にない、ループ処理にelseを使うことができます。
elseの中には、ループが正常に終了した時に行って欲しい処理を書きます。
つまり、break文でループを強制的に終了した場合はその処理が行われません。
あまり積極的に使うことはありませんが、ネストされたfor文を全て抜けたい時などによりスッキリしたコードを書くことができます。


nested_for.py
nested_for.py
# elseあり
for i in range(10):
    for j in range(10):
        print(i, j)
        if i * j > 10:
            # i = 2, j = 6でここに入ります
            break
    else:
        continue
    break

# elseなし
flag = False
for i in range(10):
    for j in range(10):
        print(i, j)
        if i * j > 10:
            # i = 2, j = 6でここに入ります
            flag = True
            break
    if flag:
        break

continue文は以降の処理をスルーして次のループに移るためのものです。

while

次はwhile文です。


while_sample.py
while_sample.py
i = 0
while i < 10:
    print(i)
    i += 1
print("----------")

i = 0
while i < 10:
    print(i, end=" ")
    if i > 5:
        print("\n{} > 5".format(i))
        break
    i += 1
else:
    print("この文は出力されません")

このwhile_sample.pyはそれぞれfor_sample.pyと等価なループ処理となっていることが確認できると思います。
while文の文法は次の通りです。

while_grammer_summary.py
while (条件式):
    (繰り返したい処理をここに書く)
else:
    (ループが正常に終了した場合の処理やループが1度も実行されなかった時に行いたい処理をここに書く)

while文の特徴は条件式が満たされる限りループ処理をすることですね。
for文では予めループする回数が決まるのに対して、while文は不定なことがあるのが大きな違いです。
これが個人的にwhile文を使わないようにして欲しい理由につながります。

while_sample.pyの一つ目のループを以下のように変更して実行すると大量の0が出力され続けます。
<<注意>>
実行する場合は止め方をよく頭に入れておいてください。

while_sample.py
i = 0
while i < 10:
    print(i)
    #i += 1

<<止め方>>
上部の■をクリックすれば止まります。
jupyter notebookでは簡単な操作で実行を中断できるので便利ですね〜
while_error.gif

変数iの値が変わらないためにいつまでも条件式i < 10が満たされ続けてしまい、処理が無限に行われてしまうためこのようなことが発生します。
このような状況を無限ループと言います。
今回はprint関数で出力しているため異常が分かり易いですが、例えばこれが1000行のコードの中で、print関数などによる出力もない状態で発生したらどうでしょう?

一生懸命書いたコードがなぜかエラーで動かない!
ではなく
一生懸命書いたコードがエラーもないのに反応しない!

という状況になります。
初心者の頃は無限ループなんてそう簡単には気づけないためずーっと頭を悩ませることになりかねません。
以上の理由から、while文でなければ書けないようなループはまずないでしょうから、基本的にfor文を使用するようにしましょう。

不連続な関数を描こう

長くなりましたが、条件分岐とループ処理を用いて不連続な関数を書いてみましょう!
graph_plot.pyの関数fの部分を次のように変更しましょう。

graph_plot.py
# リストを用いたバージョン
def f(x):
    result = []
    for i in x:
        if i < 0:
            result.append(i + 3)
        else:
            result.append(i ** 2)
    return result
graph_plot.py
# numpy配列を用いたバージョン
def f(x):
    result = np.zeros(len(x))
    for i in range(len(x)):
        if x[i] < 0:
            result[i] = x[i] + 3
        else:
            result[i] = x[i] ** 2
    return result

こんな感じのグラフがプロットされればOKです。
discontinuous.png

めんどくさい?

めんどくさいって?間違いない。
ということでスマートな書き方も紹介しておきます。

graph_plot.py
def f(x):
    return np.where(x < 0, x + 3, x ** 2)

numpyのwhere関数は俗にいう三項演算子というやつです。
詳しくはググりましょう。
ちなみに頑張れば標準の書き方でもそれなりにスマートになります。

graph_plot.py
def f(x):
    return [i + 3 if i < 0 else i ** 2 for i in x]

リスト内包表記とif文の三項演算子を組み合わせたものですね。

list_comprehension_grammer.py
[(処理) for (変数名) in (配列やリストなど)]
ternary_operator_grammer.py
(条件式が真の時の処理) if (条件式) else (条件式が偽の時の処理)

とはいえ読みにくいし複雑です。
パッケージの偉大さがよくわかります。

初めてのPythonシリーズ記事


  1. 正確にはリスト型のクラスが持つappendメソッドです。 

  2. 0以下の整数値は空のリストを返します。試してみてください。 

  3. try文は条件分岐と言えなくもないです。 

  4. 実際はイテレータ(ループ処理可能な)オブジェクトを返します。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macOS Catalina で "エラー: メイン・クラス○○が見つからなかったかロードできませんでした" と言われたら

今回はMacOSさんがとっても優秀過ぎて勝手に沼にハマった私の備忘録です。

環境

macOS Catallina

なにがあったか

私が久しぶりにJavaのソースコードを書いていてターミナルからコンパイルしたくなった時のことです。

javac -cp "classpathをいろいろ" -d 出力先ディレクトリ ./package名/Example.java

と普通に打ちます。
classファイルが生成されます。
ここまでは順調でした。

$ cd 出力先ディレクトリ
$ java package名/Example
エラー: メイン・クラスExampleが見つからなかったかロードできませんでした

orz

やらかしました。

いろいろ調べた結果、最終的には事なきを得たのでよくあるパターンと共に記事にしてみました。
(後の伏線になるのですが、今回私はDesktopディレクトリ以下で作業していました。)
同じことやらかした人に届けこの想い…。

Pattern1 ディレクトリ構成が違う

今回調子に乗ってsrcディレクトリとbinディレクトリに分けていて、
さらにパッケージも分けていましたので、まずディレクトリ構成からです。

これを最初にやっておくとエラー様の言う通り(場所の勘違いなどから)本当にclassファイルがない場合もここで発覚します。

project/
      ├src/package名/
      │            └─Example.java
      └bin/package名/
                   └─Example.class

問題なかったです。

Pattern2 mainメソッドが無い

javaで実行するclassにはmainメソッドが必須です。
たまに書いてなくておなじみのエラーを出している人を見ます。

Pattern3 環境変数CLASSPATH

私は使ったことなかったので意識したことなかったですが、これを下手に設定して失敗するパターンもあるようです。

$ echo $CLASSPATH
$

まぁ使ったこと無いので当然ですけど大丈夫でした。

ここまで来るとなにがいけないのか。。。

Pattern4 macOSさんかしこい

いろいろ試して疲れた頃、(そもそもこんなに発覚しないことある…?)o.(;´Д`)とか思いだしました。
そこで、まさかと考えて「システム環境設定」→「セキュリティとプライバシー」を見るとscreen.png
こいつぁひでぇや!
はい解決です。

まとめ

皆さんはこんなしょうもない設定してないと思うのですが、ネットで
"エラー: メイン・クラス○○が見つからなかったかロードできませんでした"
について調べても解決できず、エラーも権限の問題なのにそれがわかりにくかったので、後に現れるかもしれない私と同じミスをする人のために書いてみました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

初めてのPython ~コーディング編~

対象者

前回の記事の続きです。
本記事ではプログラミング初めての方を対象としていますので、ある程度他のプログラミング言語を嗜んでいらっしゃる方は初めてのPythonまで読み飛ばしてください。

目次

プログラミングとは

プログラミングを始めようとしているあなたにとって、プログラミングとは一体何でしょうか?
「IT業界が今後伸びそうだな〜」「プログラマとかシステムエンジニアとか需要ありそうだな〜」と思って闇雲に勉強を始めようとしていませんか?
それは挫折フラグです。
例えば受験勉強で、目標・目的がないまま勉強して辛かった思い出とかありませんか?
人間、目標がないと興味ややる気が続かないものです。
なのでまずはなんでもいいので目標を決めましょう。
例えば

  • 機械学習・深層学習について知っていきたい
  • 数値計算で偏微分方程式を解いて、可視化してみたい

などの、難易度の高いものである必要はありません。
もっと簡単に、

  • いろんなグラフを表示してみたい
  • ゲームを作ってみたい
  • 100行くらいのコードを書いてみたい

のような、ふとした思いで十分OKです。

プログラミングとは手段です。それを忘れないようにしましょう。

プログラミングで大切なこと

プログラミングをする上で最も大切なことは何だと思いますか?選んでみてください。
(チェックボックスはチェックできませんので注意笑)

  • センス
  • 創作意欲
  • 勤勉さ
  • 新しいもの・技術への興味
  • 大規模なコードを書ける体力
  • 読みやすいコードを書くこと
  • google先生に聞く力


選んだらここをクリック
あくまで個人的にですが、最後の「google先生に聞く力」だと思っています。
もちろん上記全て大切です。それでも、自分一人で解決できない問題に苦しんだ時にその解決策を知る手段を調べたり、今自分が取り組んでいる課題に対してよりスマートに解決する手段はないか調べたりする能力というのは、プログラミングを継続していくためには重要ではないでしょうか。
「好きこそ物の上手なれ」1とか昔の人も言ってますしね。
ということで、google先生をフル活用する方法を少しご紹介します。

google先生の使い方

エラーで困った時

まずはエラーで困った時の調べ方です。
もちろんエラー文を読み解いて原因を探り解決できるのが最もいいでしょうが、どうしても自分ではさっぱりわからないことも多いです。
そんな時はエラー文をまるっとコピペしてgoogle先生に聞いてみましょう。
Pythonのエラーの場合は「〇〇Error: [エラー文]」などとなっている部分をコピペします。
すると、大抵誰かが同じ悩みでどこかに相談していて、既に誰かが解決しています。
(英語のサイトしかヒットしない場合もありますが、それすらもgoogle先生は翻訳という解決策を提示してくれる有能っぷり笑)
ちなみに、エラー文の「〇〇Error」の部分だけで検索するとそのエラーについて包括的に知ることができるので勉強になります。

課題解決

あなたが今取り組んでいる課題が一見複雑そうに見える時、例えば解決策はわかるがコードが長くなるとか、いまいちパッとしない、そんな時はキーワードで検索しましょう。
あなたの課題を端的に3単語くらいで表すならどうなるかを考えて、3単語程度(必要なら増やしましょう)で検索をしてみましょう。
最初の単語は使用しているプログラミング言語を入れましょう。そしてそれを除いた3単語で検索します。
きっと誰かがスマートな解決策を提示してくれていますよ!

例:複数のグラフを一つにまとめて表示したい!
→ python グラフ 複数 表示

初めてのPython

さて、ようやくコーディングに移ります(長々と申し訳ない...)。
大抵のプログラミング入門書や入門サイトではまず条件分岐(多くはif文など)やループ処理(多くはfor文やwhile文など)を取り扱っていると思います。
ですが、ここでは最初に別のトピックを扱いたいと思います。
理由は簡単、面白くないからです。
ぼくが初めてプログラミングに触れたのは高校1年生の頃だった気がしますが、秒で飽きました。はい。
if文?for文?はぁ?で、何ができるの?って感じで、先が見えなかったことが原因かなぁと思ってます。
あとシンプルな出力(Hello worldとか)以上のことがあまり出てこなかったからでしょうか。
要するに地味なんですね。
ということで、本記事では最初にnumpyの使い方をスーパー簡単に紹介したら、いきなりグラフ描きます。

numpyの使い方

numpyは他の多くのプログラミング言語には標準搭載されている配列というデータ型が存在しません2
numpyはPythonで配列を使えるようにするパッケージだという認識で最初は構わないでしょう(実際はもっと色々できます)。
何はともあれ実践あるのみ。


numpy_calc.py
numpy_calc.py
import numpy as np


# 配列を生成
x = np.arange(10)
print(x)

# 足し算
print(x + 3)

# 引き算
print(x - 3)

# 掛け算
print(x * 3)

# 割り算
print(x / 3)

# 累乗
print(x ** 3)

# 割った時の商
print(x // 3)

# 余り
print(x % 3)

とりあえずよく使う演算子の計算を紹介しました。
(他にどんな演算子があるのか気になる人はググってね?)
ここでは実はnumpyの便利な機能であるブロードキャストというものが使われています。
ブロードキャストとは、簡単にいうとサイズの違う配列同士や配列と数値(スカラ値)の演算の際に、勝手にサイズを合わせて計算してくれる機能です。
つまり先のnumpy_calc.pyでは配列と数値の演算なので、数値の方が配列の方にサイズを合わせて計算していることになります。
もっと噛み砕いていうと、出力結果を見たらわかる通り最初の配列xの全要素にそれぞれ3が足されたり引かれたりされていると思います。

グラフを描く

はい、もうグラフを描いちゃいます。
とりあえず以下のコードをjupyter notebookの新規セルにコピペ&「Shift+Enter」で実行しましょう。


graph_plot.py
graph_plot.py
# グラフを表示してみる
import matplotlib.pyplot as plt
import numpy as np


def f(x):
    return x ** 2


x = np.arange(-3, 3, 0.1)
y = f(x)

plt.plot(x, y)
plt.show()

# HW0. 色々調べる(defとは? np.arangeとは? plt.plotとは? etc.)
# HW1. グラフにタイトルを追加する
# HW2. グラフに凡例を追加する
# HW3. グラフにx軸ラベルとy軸ラベルを追加する
# HW4. グラフの線の色を変える
# HW5. なんかグラフ色々書いてみる

(読みやすくするための空行やコメントを除けば)たったの8行で二次関数のグラフが描けましたね!
様々なパッケージを用いるとこんなに簡単に色々できるのがPythonの強みです。

ところで...コード中にコメントで書かれているHWですが、勉強がてらgoogle先生に聞きながらやってみてください。
解答の一例も載せておきます。
何ができるのか、どうやって動いているのか、どういうことをしている人がいるのか、 etc.
色々考えながら調べ尽くしてみてください。


解答一例はこちら
graph_plot.py
# グラフを表示してみる
import matplotlib.pyplot as plt
import numpy as np


def f(x):
    return x ** 2 - x + 2


x = np.arange(-3, 3, 0.1)
y = f(x)

plt.plot(x, y, label='hoge', color='red')
plt.title('test plot')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.show()

# HW0. 色々調べる(defとは? np.arangeとは? plt.plotとは? etc.)
#     def: 関数の定義のためのビルドイン
#     np.arange: 配列を生成する関数。他にも色々ある
#     plt.plot: グラフを生成する関数。表示するわけではない
# HW1. グラフにタイトルを追加する
# HW2. グラフに凡例を追加する
# HW3. グラフにx軸ラベルとy軸ラベルを追加する
# HW4. グラフの線の色を変える
# HW5. なんかグラフ色々書いてみる

初めてのPythonシリーズ記事


  1. どんなことであっても、人は好きなものに対しては熱心に努力するので、上達が早いということ。 

  2. ただ、Pythonには標準でnumpyが搭載されているので実質標準搭載されていると言って良かったりします笑 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

北陽電機 URG-04LX-UG01 mac コンソールで通信してみた

北陽電機 測域センサをmac コンソールで通信

測域センサをROSなどを使って使用することが一般的になっているが、動作チェックをしたくて、SCIP2.0(シリアル通信ベース)やってみようとしたら、ハマった。
なんとか通信チェックができたので、関連記事などを まとめておく.

手順

  • ひとつめのターミナル1を開く
[terminal:1]
sudo stty -f /dev/cu.usbmodem14101 raw 19200
cat /dev/cu.usbmodem14101 
  • ふたつめのターミナルを開く
[terminal:2]
cat - > /dev/cu.usbmodem14101  

以下は、このふたつめのターミナル2にSCIP2.0のコマンドなどを打ち込むとひとつめのターミナル1に返答がかえってきた。
例えば、以下のようにターミナル2に入力すると

[terminal:2]
SPIC2.0

ターミナル1には以下のような返答が帰ってきた。

[terminal:1]
SPIC2.0
0Ee

同様に、一箇所だけスキャンするコマンドをターミナル2から送信すると

[terminal:2]
MD0384038400001

やったー!

[terminal:1]
MD0384038400001
00P

MD0384038400000
99b
8C?6`
00e5

やった〜!
ひさしぶりに、かなり、うれしい!

ハマった原因

  • tty.usb*** ではなく cu.ubs*** で接続する

参考になったサイト

関連サイト

著者の関連ページ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac 初期セットアップ

新しい MacBook Pro 13インチがもうすぐ届くので、改めて Mac の初期セットアップでやることをまとめておく。

システム設定

トラックパッド

  • 軌道の速さを最大にする

キーボード

「キーボード」タブ

  • キーのリピート : 最速
  • リピート入力認識までの時間 : 最短
  • Touch Bar に表示する項目 : F1、F2 などのキー
  • 修飾キー : Caps Lock キーを Control に設定する

「ショートカット」タブ

  • 入力ソース > ショートカットを無効にする
  • スクリーンショット > 「ファイルとして保存する」ほうを ctrl キーありのキーにする

Spotlight

「検索結果」を以下の項目だけ有効にする

  • アプリケーション
  • システム環境設定

日付と時刻

  • 「秒を表示」にチェックする

Dock

  • 「Dock を自動的に表示/非表示」にチェック
  • 「最近使ったアプリケーションを Dock に表示」のチェックをはずす

一般

  • 「スクロールバーの表示」を「常に表示」にする

ソフトウェアのインストール&設定変更

Google Chrome

ダウンロードリンク : https://www.google.com/intl/ja_ALL/chrome/

Clipy

ダウンロードリンク : https://clipy-app.com/
My Snippets をインポート : https://github.com/y-u-t-a/clipy-snippets

設定

  • ショートカット > メイン を「option × 2」に設定

SF Mono(フォント)

ターミナルに使用するフォント
ダウンロードリンク : https://developer.apple.com/fonts/

iTerm2

ダウンロードリンク : https://www.iterm2.com/
My Profile をインポート : https://github.com/y-u-t-a/iterm2-profile

設定

  • Preferences > General > Window にて Adjust window when changing font size を OFF にする

Docker Desktop for Mac

ダウンロードリンク : https://hub.docker.com/editions/community/docker-ce-desktop-mac/

VisualStudio Code

ダウンロードリンク : https://code.visualstudio.com/

Setting Sync で設定を同期することもできるが、あえて1からセットアップする。

拡張機能

  • Bracket Pair Colorizer 2
  • Code Runner
  • Draw.io Integration
  • GitHub Theme
  • google-search
  • Material Icon Theme
  • Remote Container

設定

  • "diffEditor.ignoreTrimWhitespace": false
  • "editor.fontSize": 13
  • "editor.mouseWheelZoom": true
  • "editor.renderWhitespace": "boundary"
  • "editor.tabCompletion": "on"
  • "workbench.editor.enablePreview": false
    • ↑ ファイルを常に新しいタブで開く設定
  • "workbench.startupEditor": "newUntitledFile"
  • "window.zoomLevel": 1
  • "files.autoSave": "afterDelay"
  • "files.defaultLanguage": "markdown"
  • "explorer.confirmDelete": false
  • "explorer.confirmDragAndDrop": false
  • "extensions.ignoreRecommendations": true
  • "terminal.integrated.copyOnSelection": true
  • "terminal.integrated.fontSize": 13

GitHub Desktop

ダウンロードリンク : https://desktop.github.com/

HyperSwitch

ダウンロードリンク : https://bahoom.com/hyperswitch

設定

  • Include windows from other spaces をチェック
  • Include windows from other screens をチェック
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

初めてのPython ~環境構築編~

対象者

プログラミング始めたいな〜と思っているMac使用者の方向け

目次

環境構築

プログラミング始めたいな〜という人が1番最初に遭遇する難関である環境構築について、できるだけ噛み砕いて説明します。

pipのインストール

pipとはpythonを使う上で最大のメリットであるパッケージ1をターミナルからコマンド一つでインストールすることが可能になるツールです。
自作パッケージをローカルな環境で使うこともできるし、公開することもできます。
とりあえず便利なのでインストールしましょう。

Pythonが既にインストールされていることが前提ですが、Macには標準でインストールされているはずです。されていない場合はこちらなどを参考にインストールしましょう。
Python3がインストールされていない場合も、せっかくなのでインストールしておきましょう。

方法1 サイトから入手

pipのインストールにはget-pip.pyというファイルが必要です。
これをインターネットのサイトから直接入手する方法を紹介します。
まずは公式サイトに移動して下の画像のget-pip.pyを右クリック(トラックパッドでは二本指でタップ)して「リンク先のファイルをダウンロードする」をクリック(直リンク)。
get-pip.pyのダウンロード.png
次に、ダウンロードしたファイルのある階層に移動します。
ターミナルに次のコマンドを打ち込みましょう($は「ターミナルに入力する」ということを明示するためのものですので入力する必要はありません)。

$ cd ~/Downloads

最後に、ターミナルに次のコマンドを入力すればOK。

$ python get-pip.py

方法2 ターミナルで全部済ませる

これも簡単です。
次のコマンドをターミナルに順番に打ち込んで実行すればOK。

$ cd
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py

インストールを確認

次のコマンドを入力してインストールできているか確認しましょう。

$ pip -V

入れておきたいパッケージはこちらなどを参考にして、自分が必要だと思うものを入れましょう。
get-pip.pyはもう不要なので削除しても構いません。

jupyter notebookのインストール

初学者にオススメなのがjupyter notebookです。
理由は

  • jupyter notebookをインストールした時点で色々パッケージが入っている
  • インタラクティブ(対話)型に近い
  • エディターに迷ったり悩んだりする必要がない

などです。
中級者以上や機械学習(特に深層学習:ディープラーニング)を勉強したい!となったらgoogle colaboratoryなんかもオススメです。
とりあえずここではjupyter notebookをインストールしていきます。
次のコマンドをターミナルに打ち込みましょう。

次のコマンドではPCに登録されている全てのユーザが使える場所にpipがインストールされます。基本的に問題はありませんが、もし今ログインしているユーザだけが使えるようにしたければ

$ pip install jupyter —user

としてください。

$ pip install jupyter
WARNING: The scripts jupyter-bundlerextension, jupyter-nbextension,
 jupyter-notebook and jupyter-serverextension are installed in
 '/Users/[ユーザ名]/Library/Python/[Pythonのバージョン番号]/bin' which is not on PATH.
$ export PATH="/Users/[ユーザ名]/Library/Python/[Pythonのバージョン番号]/bin/:$PATH"

[]の日本語部分はお使いのMac毎に異なります。
[ユーザ名]がわからない場合は次のコマンドをターミナルで実行すれば

$ pwd
/Users/[ユーザ名]

などと出るでしょう。

定番Hello world!

さて、ここまでで(たぶん)環境構築が完了2しましたね!
ではでは、プログラミング初学者がまず真っ先にするであろうHello world!を表示させてみましょう。
まずはターミナルで次のコマンドを実行しましょう。

$ mkdir my_notebook
$ cd my_notebook
$ jupyter notebook

するとSafari(デフォルトの検索エンジン)で下の画像のようにjupyter notebookが立ち上がると思います。
jupyter notebook.png
では新規ファイルを作成しましょう。
下のGIFの通り、「New ▼ → Python3」と選択しましょう。
すると新規ファイルが出来上がります。
あとは最初のセル(入力欄のこと)に

Hello.py
print(Hello world!”)

と入力してキーボードの「Shift」キーを押しながら「Enter」キーを押しましょう3
Hello_world.gif
最後に名前を変更して終了です。
Hello.gif
ということで、Hello Python World!

初めてのPythonシリーズ記事

参考


  1. 便利な関数やクラスなどが用意されているライブラリ。基本的にあらゆるやりたいことができるライブラリは既に存在しているが、勉強のためや細かなカスタマイズをするなら自作(車輪の再発明)しよう。 

  2. できてなかったり、なにかエラーが発生して困った場合はコメントなどで教えてください? 

  3. 通常「Shift+Enter」などと書かれます。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む