Mac

Linuxで一番シンプルにメールを送受信する(postfix on Ubuntu)

認証とかDNSサーバとかは考えずに、ただただLinux(CLI)でメールを送受信してみたい、という簡単手順 全体概要は以下の通り Virtualbox上にVagrantを使ってUbuntu14(14.04.5 LTS)サーバを二つたて、相互にメールを送受信する (VMは必ずしもVagrantで作らなくても良い) VMの設定 送信側も受信側も同じ設定だが、わかりやすいように送信側を「smtpSv」、受信側を「smtpCt」というVM名とする 以下手順をそれぞれのVMに対して設定する (下準備)VagrantでVM作成 Vagrantfileの中身は以下の通り ※”smtpSv”はサーバによって名前を変える VM起動 VMへログイン hostnameファイルとhostsファイル編集 ホスト名を設定 ※「smtpSv.example.com」はサーバによって名前を変える 今回はDNSサーバを使わずにローカルのhostsファイルを見てメールを送る前提なのでhostsファイルに直接記載設定する 設定反映のためにリブートする 再びログイン postfixのインストールと設定 postfixをインストール 途中で「Please select the mail server configuration type that best meets your needs.」と出てきたら、今回は一番シンプルに行くので「No configuration」を選択 設定ファイルを適切な場所に持ってくる 中身を編集 ※「myhostname = smtpSv.example.com」はサーバによって名前を変える 「smtp_host_lookup = native」は、DNSではなくhostsファイルを見に行ってね(そこになければDNS)という意味 設定を反映させて完了 もう一つのサーバについても同様に設定をする 動作確認 設定が完了したので動作確認 送信側のVMでメールを送信する 最後に「.」とEnterを押せばメールが送信される (/var/log/mail.logや/var/log/syslogにログは出力される) ※今回は「smtpCt」サーバ、「example.com」ドメインの、「vagrant」というユーザーあてに送信。環境によって適宜変更ください) ※送信側のVM(smtpSv)で操作 受信側のサーバでメールが受信できていることを確認 先ほど宛先に指定したユーザーのホームディレクトリ(/home/vagrant)に移動すると Maildir/new/配下に新しくファイルができているので中身を確認する ※ファイル名は状況によって異なります ※受信側のVM(smtpCt)で操作 …

Linuxで一番シンプルにメールを送受信する(postfix on Ubuntu) Read More »

hubotをslackと連携させて動かす

hubotをslackと連携させて動かす 準備 nodejsの環境構築は以下を参照ください nodenv環境の構築(Mac) Slack tokenの取得は以下から https://api.slack.com/apps インストール 「yo」「generator-hubot」という必要なモジュールをインストール 色々出力されるが、「Everything looks all right!」と最終的に表示されればOK インストールしたモジュールを使えるようにシェルの再起動をしておく ※何も表示されない Bot作成 yoを使ってBotを作成する 「May we anonymously report usage statistics to improve the tool over time?」はとりあえず「No」と回答 「Owner」「Bot name」「Description」は適当に、とりあえずデフォルトで回答 「Bot adapter」は「Slack」を指定 これでhubotを使えるようになったので動かしてみる 「bin/hubot」で実行し、「Enter」キーを押すと「【Bot name】>」とプロンプトに入るので 「【Bot name】 ping」と打ってみて「PONG」と返って来れば成功 プロンプトを抜けるには「exit」 Slack連携 作られたhubotをslackと連携する 「HUBOT_SLACK_TOKEN=【slackのtoken】 ./bin/hubot –adapter slack」で実行すれば連携できる slack側で、botに「ping」と話しかけて「PONG」と返って来れば成功 (任意)いちいちトークンを指定して実行するのが面倒なのでスクリプト化しておく 次からはこのスクリプトを実行するだけでOK Botの開発 ping PONGだけしててもしょうがないので(他にもtimeなどデフォルトの機能はあるが) 何か簡単なスクリプトを書いてみる ※開発の仕方は公式のGithubを読むのが一番良さそう https://github.com/hubotio/hubot/blob/master/docs/scripting.md …

hubotをslackと連携させて動かす Read More »

nodenv環境の構築(Mac)

nodejsでpyenvのような環境が構築できないかとググったところ、nodenvというものを発見 nodenvの環境をMacに構築する nodenvをインストール ※nodeenvとは別物なので注意 nodenvをインストールしたら、インストール可能なnodejsのバージョンを確認 どれが良いか分からないが、「12.12.0」をインストール global環境(デフォルト)として12.12.0を設定 (個別に設定する場合はlocalに設定する) 特に何も表示されなければ設定されている パスを通す 自分はzshellを使っているので、「.zshrc」に記載をしている 「.zshrc」に記載した設定の反映のためにシェルを再起動 ※特に何も表示されなければOK nodejsが使えることを確認 以上。 今度、anyenvに対応させたいな。

【備忘】sympyのtips(グラフを合成する)

sympyのtips備忘録 グラフを合成するやり方はあまりググっても出てこなかったのでメモ 参考:微分と積分ってなに? (概念理解とsympy) 参考:sympyを使って微分積分した結果をグラフにplotする グラフを合成するには、「extend」を使う 以下は例 元の線だけのグラフに 各三角を合成すると(上段)、下段のようになる

微分と積分ってなに? (概念理解とsympy)

微分と積分ってなに? 文系の自分は、高校の途中でアメリカをフラフラしていたこともあり、 微積分は知識ゼロだったため、社会人になってから改めて始めから勉強 細かい公式などは、ググるか、python先生に計算をお任せできるけど、 文系人間には概念の理解が難しかったのでメモ 概念 「微分」は「傾き」、「積分」は「面積」を出すこと 例えば、 「距離」を「時間(一定の変化率)」で微分すると「速さ」が出る 「速さ」を「時間(一定の変化率)」で積分すると「距離」が出る 微分 例えば、距離を表しているグラフ「x **2」を「微分」する ※ 以下グラフ「function」青線 ※「 **2」は二乗の意味 接線を引いてみると、時間が大きくなるほど、傾きが大きくなることがわかる ※ 以下グラフ「function」水色線 つまり、微分すると右(「Differential calculus」)のようなグラフとなり、 どんどん傾き(スピード)を大きくなっていることがわかる ※ 以下グラフ「Differential calculus」 参考まで、グラフ表示のpythonコードは以下 ※実行方法など詳細は、sympyを使って微分積分した結果をグラフにplotする を参照ください 積分 次は積分 例えば、速さを表しているグラフ「2*x」を「積分」する ※ 以下グラフ「function」青線 xが大きくなるにつれて、「y=0」との面積は大きくなることがわかる ※ x=10までの面積(濃い青エリア) ※ x=20までの面積(濃い青エリア+水色エリア) ※ x=30までの面積(濃い青エリア+水色エリア+薄い水色エリア) つまり、積分すると右(「integral」)のようなグラフとなり、 どんどん面積(距離)を大きくなっていることがわかる ※ 以下グラフ「integral」 参考まで、グラフ表示のpythonコードは以下 ※実行方法など詳細は、sympyを使って微分積分した結果をグラフにplotする を参照ください まとめ 上の例のように、単純なグラフなら微分積分を使わずに傾きや面積が出せるかもしれないが 以下のようなぐにゃぐにゃ曲がったグラフだと、計算が大変なので微分積分を使うことになる 基本的な概念はここまで

sympyを使って微分積分した結果をグラフにplotする

sympyを使って微分積分した結果をグラフにplotする 自分が引っかかったところは、numpyとmatplotlibを直接?使わないというところ sympyで計算して、sympyで描写する 準備 python3.5.0 on Mac環境で進める まず、必要モジュールをインストール sympyだけだと、実行時に「ValueError: The TextBackend supports only one graph per Plot.」というエラーが出る インストールされたモジュールは以下 このまま実行すると、以下のようなエラーが出てしまう 「matplotlibrc」ファイルの中身を修正することで対応する 参考:Pythonでmatplotlibをimportするとエラーが出る場合の対処策(Mac) 「python -c “import matplotlib;print(matplotlib.matplotlib_fname())”」で表示されたファイルの中身を修正する 「backend: macosx」部分を「backend: Tkagg」に書き換える   実行 「x **3 + 200」を微分するコードは以下 「diff」関数で微分ができる 「f_org」が微分前で、「f_diff」が微分後 微分後の線は赤に指定する ※「**3」は3乗という意味 いざ実行 「x**2 / 3」を積分するコードは以下 「integrate」関数で積分ができる 「f_org」が積分前で、「f_inte」が積分後 積分後の線は赤に指定する いざ実行 以上。 参考: 【Python入門】Sympy・matplotlibで微分積分を計算してみよう [SymPy] Plotting Module

pythonのlistは代入しただけでは変更の巻き添えを食らうからcopyで複製する

タイトルだけでは意味がわからないと思うので実際のコードを見てみる このコードの実行結果は以下 の時点でlist1とは独立したlist2と言うリストができていると思ったが、 list2を変更(remove)したらlist1も巻き添えを食らって変更されていた という問題 巻き添えを食らいたくないときはcopyを使えば良い list2を変更しても、list1は影響を受けない 実行結果

モンティホール問題実験してみた(python)

この前忘年会で話題となった話 テレビ番組で最近やってたとか いつかの就職試験で出た(もちろん外した)ので 私にとっても思い入れのある問題 ルールは以下 0:三つの扉がある。一つは正解(車の扉)。二つは不正解(山羊の扉)。 1:挑戦者は三つの中から一つ扉を選ぶ。 2:司会者(モンティ)は答えを知っており,残り二つの扉の中で不正解の扉を一つ選んで開ける。 3:挑戦者は残り二つの扉の中から好きな方を選べる。このとき扉を変えるべきか?変えないべきか? 参考リンク: モンティ・ホール問題とその解説 直感だと、扉を変えても変えなくても確率は同じだけど 実際は変えた方が確率は上がるよね と言う話 解説はこちらがわかりやすかった 【条件付き確率】全米が震えたモンティ・ホール問題を解説 一応、念の為、本当に確率が違うのかpythonで実験してみた コードは以下 いざ、実行 すごい、扉5枚の場合は4倍にちゃんとなる youtubeで紹介されていた3枚扉にすると ちゃんと2倍に落ち着く

PythonのClassとConstractorとMethodをざっくり理解する

PythonのClassとConstractorとMethodをざっくり理解する ※Python3.5.0前提で記載 用語整理 Class(クラス):設計書 Constractor(コンストラクター):Classが作られるときに最初に実行されるやつ Method(メソッド):Classの機能 白紙のClass(設計書)を用意する ここからは実際にClassとやらを用意する Classの枠はこれだけ 今回は「Human」というClassにした Class(設計書)の中身を書いていく 白紙設計書では意味がないので、この中に色々内容を書いていく Classの中には、いくつか機能(Method)が書かれている Methodは「def」という接頭語?で記載する 今回は「Human」クラスに、「laugh」と「walk」という機能を用意した 「init」という名前のMethodは、Classが作られた絶対実行されること。 これは、特別に「Constractor」と呼ばれる 変数の定義などがよく書かれる 何でinitなの?とかはよくわからん、そう決まってる(雑) その他の任意の名前で書かれているMethod(例えば上の例では「laugh」と「walk」) は、 呼び出されたら使われる機能 「def」から始まる塊について「class」の外で使われたいたら 「function(関数)」と呼ばれる。紛らわしい、、、 参考:pythonの中でよくみる「def」から始まる塊について、用語が紛らわしいので整理する 設計書の全容は以下 Class(設計書)からもの(Instance)を作って動かす 設計書が書けたので、設計書から「もの」を作って、機能を使ってみる できたものを「Instance(インスタンス)」と呼ぶ 何もなければ、Humanクラスはこれだけで作成できる ただ今回は、色々パラメータを使う前提で「Class」を書いているので、こんな感じで作成する パラメータを使う前提で、、というのはこの部分のこと 更に、「Human」Classから作成したオプジェクト(以下の例では「taro」 と定義)から各機能を使うには、 「taro.【機能名】」と記載する こんな感じ 実行結果 今回Classを作成して実行したコード全容は以下 実行結果はこうなる

Jenkins超入門(Vagrant・CentOS7)〜(4)Job作成・後編〜

Jenkins超入門(Vagrant・CentOS7)〜(3)Job作成前編〜 の続き Job作成3〜まとめたrpmを任意のサーバにSCP転送(upload)〜 前回までで (1) Gitからコードを取得して(Checkout) (2) rpmにまとめて(Build-prep、Build) というところまで設定が完了したので、今回は (3) 任意のサーバにSCP転送(upload) というJob設定(Stage)を追加する SCPが少し厄介で、 JenkinsでSCPを使うには、「SSH Agent」というPluginのインストールが必要 なので、流れとしては、 0. 環境準備(SCP先サーバ作成) 1. 「SSH Agent」Pluginをインストール 2. SCPするための鍵設定 3. Job設定 4. いざ実行 という流れ 0. 環境準備(SCP先サーバ作成) SCP先のサーバを作成してこの環境を作る Vagrantで作成する (最初にJenkinsサーバと一緒に作っておいたほうが効率よかった) ※Macのターミナルから操作 起動 ログイン あと、これは必須ではないのだけど 今回、二つのサーバ(Jenkinsサーバ、SCP先のサーバ)を使うので わかりやすいようにターミナル設定を変えておく SCPサーバの方は「[vagrant@jkDst ~]$」と表示されるようにする Jenkinsサーバの方は「[root@jkSv vagrant]#」と表示されるようにする これで準備は完了 1. 「SSH Agent」Pluginをインストール 「SSH Agent」プラグインをインストールする (すでにインストールされていればここの手順は飛ばしてOK) 「Manage Jenkins」をクリック 「Manage Plugins」をクリック 「Available」タブから「SSH …

Jenkins超入門(Vagrant・CentOS7)〜(4)Job作成・後編〜 Read More »