- 投稿日:2020-03-14T23:26:13+09:00
Macのターミナルでstdc++.hを用いてC++プログラムを実行したい!
0.はじめに
本稿執筆者はPCについて特に学んでおらず、ヘッダーファイルなどはボヤあとしか理解していないので、読者の責任で本稿内容を読んでください。他サイトを参考にし、上手く行ったので問題ないと思いますが。。
また、間違いなどありましたらご指摘お願いします。
ちなみに本稿が執筆者のQiita初投稿となります。(2020/3/14)1. なぜMacのターミナルでstdc++.hを用いてC++プログラムを実行したい!と思ったのか
C++で簡単な数値計算プログラムを書けるようになりたいなあという思いで、AtCoder公式コンテンツであるAtCoder Programming Guide for beginners (APG4b)の学習を始めました。
この教材では、#include < bits/stdc++.h>
をプログラムの1行目に記述するよう推奨しています。これにより、全てのヘッダーファイルをインクルード出来るようです。
APG4bではページ上でプログラムを実行出来たのですが、自分で作ったプログラムをローカルでも実行出来るようにしたいと思いました。
しかし、特に何も設定していないMacではエラーが出たのでいろいろ調べました。調べた結果得た方法を本稿ではまとめています。2. gccの準備
gccで実行します。理由はAPG4bがC++14(GCC 5.4.1)という言語を指定していたのと、大学でC言語をちょろっと学んだときgccだったからです。gccが何かそもそもわかっていませんが、他にclangというのもあるらしいです。
まず、デフォルトのMacにはgccが無いか、バージョンが古いか、何か問題があったような気がします。Xcode、Homebrew、gccなどをキーワードになんとかgccをインストールしてほしいです。「mac gcc」などと検索すれば出てきます。(Xcodeのインストールはとても時間がかかった記憶がします。5〜10GBくらい?時間に余裕があるときにしましょう)
ターミナルを開いてgcc --version
と入力して、以下のようになれば僕と一緒です。~ $ gcc --version Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1 Apple LLVM version 10.0.1 (clang-1001.0.46.4) Target: x86_64-apple-darwin18.7.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin3. まずは実行してみよう
この時点で僕はまず実行しようと試みました。ちなみに使用したファイル
gcd_lcm.cpp
は入力2数に対する最大公約数(gcd)と最小公倍数(lcm)を出力する簡単なプログラムです。gcd_lcm.cpp#include <bits/stdc++.h> using namespace std; // a > bが前提 int gcd(int a, int b){ if (a % b == 0){ return b; } else { return gcd(b, a % b); } } int lcm(int a, int b){ return a * b / gcd(a, b); } int main(){ int a, b; cin >> a >> b; cout << "最大公約数:" << gcd(a, b) << endl; cout << "最小公倍数:" << lcm(a, b) << endl; }僕が大学でC言語を学んだときは、.cファイルを実行するのにまず.oファイルを作り、その上で.exeファイルを作っていました(おぶじぇくとふぁいる?よくわかってないです)。その時のコマンドは以下の通りです。(gcd_lcm.cがプログラムファイル名)
$ gcc -c gcd_lcm.c $ gcc -o gcd_lcm gcd_lcm.o -lmこれにより、gcd_lcm.oという中間ファイルとgcd_lcmという実行ファイルが作られます。この知識を元に、cppの実行を試みました。(-lmはより強くエラーを粗探しする機能で無くてもいいらしい?)
なお、cではgccでしたが、cppでは.oから.exeを作成するときgccではエラーが出ます。.c→.oの段階からg++に記述を変更して行います。$ g++ -c gcd_lcm.cpp gcd_lcm.cpp:1:10: fatal error: 'bits/stdc++.h' file not found #include <bits/stdc++.h> ^~~~~~~~~~~~~~~ 1 error generated.無事エラーが出ました。stdc++.hというヘッダーファイルなんて存在しないよ!って意味でしょう。
4.stdc++.hを作成
ついに本題!簡単です!
1. Finderを開きます。
2. command + shift + gを押します。
3./usr/local/include
と入力してincludeフォルダに移動します。
4. includeフォルダ内にbitsという名前の新規フォルダを作成します。
5. stdc++.hを作成し、bitsの中に入れます。以上で完成です!stdc++.hの中身はhttps://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/api/a01040_source.htmlを参考というか写しました。
リンク先を直接コピーすると行数も一緒にコピペされ、そのままではエラーとなるので注意が必要です。stdc++.h// C #ifndef _GLIBCXX_NO_ASSERT #include <cassert> #endif #include <cctype> #include <cerrno> #include <cfloat> #include <ciso646> #include <climits> #include <clocale> #include <cmath> #include <csetjmp> #include <csignal> #include <cstdarg> #include <cstddef> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #ifdef __GXX_EXPERIMENTAL_CXX0X__ #include <ccomplex> #include <cfenv> #include <cinttypes> #include <cstdbool> #include <cstdint> #include <ctgmath> #include <cwchar> #include <cwctype> #endif // C++ #include <algorithm> #include <bitset> #include <complex> #include <deque> #include <exception> #include <fstream> #include <functional> #include <iomanip> #include <ios> #include <iosfwd> #include <iostream> #include <istream> #include <iterator> #include <limits> #include <list> #include <locale> #include <map> #include <memory> #include <new> #include <numeric> #include <ostream> #include <queue> #include <set> #include <sstream> #include <stack> #include <stdexcept> #include <streambuf> #include <string> #include <typeinfo> #include <utility> #include <valarray> #include <vector> #ifdef __GXX_EXPERIMENTAL_CXX0X__ #include <array> #include <atomic> #include <chrono> #include <condition_variable> #include <forward_list> #include <future> #include <initializer_list> #include <mutex> #include <random> #include <ratio> #include <regex> #include <system_error> #include <thread> #include <tuple> #include <typeindex> #include <type_traits> #include <unordered_map> #include <unordered_set> #endif5.改めて実行
再びターミナル上でgcd_lcm.cppファイルがあるフォルダに移動します。1行目で.cppから.oを作成し、2行目で.oから実行ファイルgcd_lcmを作成、3行目で実行ファイルを実行しています。
$ g++ -c gcd_lcm.cpp $ g++ -o gcd_lcm gcd_lcm.o $ ./gcd_lcm 6 9 最大公約数:3 最小公倍数:18エラーが出ることもなく、無事入力6と9に対する最大公約数3と最小公倍数18が出力されました!
おしまい!
- 投稿日:2020-03-14T21:29:11+09:00
PostgreSQLをMacへインストールしてRails newする
概要
ポートフォリオ作成時、今までずっとMySQLに慣れ親しんでいたので、
PostgreSQLとやらに挑戦しようと思い、とりあえずインストール方法〜新規Railsアプリ作成までをまとめてみました!条件
- macOS Mojave(ver 10.14.5)
手順
- Homebrewを使用してPostgreSQLをインストール
- PostgreSQLの起動 / 起動確認 / 停止方法
- データベース一覧を表示
- Ruby on Railsのバージョンを変更
- アプリケーションを新しく作成
- GitHubに登録し、ローカルリポジトリを作成
- リモートリポジトリを作成
Homebrewを使用してPostgreSQLをインストール
postgresqlをインストール
brew install postgresqlバージョン確認
psql -Vインストール場所を確認
which psqlPostgreSQLの起動 / 起動確認 / 停止方法
起動
brew services start postgresql起動状況の確認
brew services list停止
brew services stop postgresqlデータベース一覧を表示
データベース一覧を表示
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------------------+----------------+----------+---------+-------+----------------------------------- postgres | ************** | UTF8 | C | C | test-app_development | ************** | UTF8 | C | C | test-app_test | ************** | UTF8 | C | C | template0 | ************** | UTF8 | C | C | =c/************** + | | | | | **************=CTc/************** template1 | ************** | UTF8 | C | C | =c/************** + | | | | | **************=CTc/**************Ruby on Railsのバージョンを変更
cd ~ #ホームディレクトリに移動 gem install rails --version="5.2.4.1" #今回はversion="5.2.4.1"を使用 rbenv rehash #gemの変更を反映アプリケーションを新しく作成
cd rails new test-app -d postgresql #rails newコマンドを実行 cd test-app #test-appディレクトリに移動 rails db:create #データベースを作成GitHubに登録し、ローカルリポジトリを作成
GItHub Desktop から test-app のローカルリポジトリを作成。
左上の「Current Repository」→「Add」→「Add Existing Repository」を選択。※「Add Repository」がクリックできない場合、事前に該当するアプリケーションのディレクトリで以下の作業を行う。
cd ~/git-app git init #rails のバージョンによっては rails new 時に git init がされないケースがあるためその後コミット。
リモートリポジトリを作成
[Publish repository]ボタンをクリックすると GitHub のリモートリポジトリが作成できる。
GitHub の Your repositories の欄に作成したアプリがあれば上手くいっている。サーバー起動
rails sできた!制作スタート!
- 投稿日:2020-03-14T18:06:49+09:00
MacでTeXを使用する際の便利なコマンド(備忘録)
動機
MS WordやPowerpointの数式エディタの改悪によってシグマの表示がインラインモードしか作成されなくなってしまい、TeXで作成する必要性に迫られて今回macで使用環境を整えました。
今後も使えそうなので備忘録として投稿します。MacTexのインストール
以下のサイトがとても役に立ちました。
Packageでインストールする場合、ファイルサイズが4.2GBくらいありますので、ディスク容量にご注意ください。
MacTeXのパッケージではいろいろなツールがインストールされますが、私はもっぱらLaTeXiTで作成して、画像を使い慣れたMS Wordなどに貼り付けています。
LaTeXiTの使い方
LaTeXiTの起動と基本操作
アプリケーションのフォルダにあるLaTeXiTのアイコンをダブルクリックして立ち上げます。
画面の操作方法
画面はシンプルになっていて、大きく分けて上下2つの画面から構成されています。
下の画面にコマンドを入れて、右下のLaTeX It!ボタンをクリックすると、上の画面に結果が表示されます。作成した数式を保存するには数式で右クリックメニューで行えます。
作成した数式はファイルー別名で保存...でTex形式のファイルで保存できます。
(個人的にはコマンドをテキストエディタなどで保存した方がシンプルかも、と思ったりしていますが)TeXの便利コマンド
ここからが本番です。
以下のサイトを参照させていただきました。
WEB版CNS GUIDE 4.1 LaTeX/LaTeXによる文書整形の応用/数式を記述するコマンドキーの注意事項
コマンドは基本的にコマンドと{}の組み合わせで使用します。
コマンドは\(バックスラッシュ)を使用しますが、¥ではエラーで動かないのに注意が必要です。
MacだとOption(⌥)キーと一緒に押すことで\が出てきます。(大したことではないけどかなり重要)分数の作成
分数は \fracコマンドを使用します。そのあとに{分子}{分母}を入力します。
y = \frac{a}{b}総和(シグマ)の作成
総和は\sumコマンドを使用します。そのあとに^{上の文字列}_{下の文字列}を入力します。
なお、シグマに限らず下付き文字は _{}で、上付き文字は^{)で指定することができます。y = \sum^{n}_{i=1}x_{i}シンプルな数式では綺麗に収まるのですが、例えば以下のような分数を組み合わせたような複雑な式になるとシグマがインラインモードになって畳まれてしまいます。
y = \frac{x}{\sum^{n}_{i=1}x_{i}}これを回避する方法として、\sumの前に\displaystyleを追加することで、折りたたまれる現象を回避することができます。(これがやりたかった!!!)
y = \frac{x}{\displaystyle\sum^{n}_{i=1}x_{i}}総乗の作成 (追加)
同様に総乗は \prodコマンドを使用します。
こちらもsum同様に、\displaystyle\prodとすることで、縮んでしまうのを防ぐことができます。y = \frac{x}{\displaystyle\prod^{n}_{i=1}x_{i}}積分記号
あまり私の用途では使用しませんが、積分記号も\int{}記号で簡単に描画できます。
y = \int^{b}_{a}f(x)dx平均などの記号
文字の上の記号は\bar{}コマンドなどが使用できます。
\bar{x} \vec{x} \hat{x} \tilde{x} \dot{x} \ddot{x} \acute{x} \grave{x} \check{x} \breve{x}まとめ
他にもいろいろな機能がありますので、以下のサイトを参照しながら使い込んでいこうと思います。
- 投稿日:2020-03-14T15:54:07+09:00
EPUBファイルからMOBIファイルに変換する (macOS)
EPUBファイルを Kindle で読むためには EPUBファイルから MOBIファイルに変換する必要があります。今までは Amazon から提供されている KindleGen というコマンドラインツールを使用することで変換できたのですが、最近 macOS Catalina (10.5) で実行したところ以下のようなエラーが出て MOBIファイルの出力に失敗しました。
$ brew cask install kindlegen $ kindlegen example.epub -bash: /usr/local/bin/kindlegen: Bad CPU type in executableこのエラーですが、どうやら macOS Catalina (10.15) が 32bit をサポートをしていないために起こるエラーのようです。何か解決する手段はないかなと調べてみたところ、同じく Amazon が提供する Kindle Previewer 内にも KindleGen が含まれており、こちらを代わりに使用することにしました。
Homebrew から Kindle Previewer をインストールして、中の
kindlegen
に対してシンボリックリンクを貼ります。もし既に KindleGen がインストールされている場合、事前に KindeGen をアンインストールする必要がありますのでご注意ください。$ brew cask install kindle-previewer $ ln -s /Applications/Kindle\ Previewer\ 3.app/Contents/lib/fc/bin/kindlegen /usr/local/bin/kindlegenすると以下のように、
kindlegen
を使って EPUBファイルから MOBIファイルへの変換ができるようになります。$ kindlegen example.epub ************************************************************* Amazon kindlegen(MAC OSX) V2.9 build 0000-kdevbld A command line e-book compiler Copyright Amazon.com and its Affiliates 2015 ************************************************************* ...
- 投稿日:2020-03-14T12:53:09+09:00
DockerでMacのDiskがいっぱいになった
現象
気づかぬうちに、MacのDiskが蝕まれていた
Check
homeの下をチェック
sudo du -x -h -d 2 /Users/masato-naka/ | sort -h -r | head -30 ... 109G /Users/masato-naka/ 80G /Users/masato-naka//Library 54G /Users/masato-naka//Library/Containers 17G /Users/masato-naka//Library/Caches ...なぜかLibrary/Containersの下が54Gもある
sudo du -x -h -d 2 /Users/masato-naka//Library/Containers/com.docker.docker/Data | sort -h -r | head -30 50G /Users/masato-naka//Library/Containers/com.docker.docker/Data/vms/0 50G /Users/masato-naka//Library/Containers/com.docker.docker/Data/vms 50G /Users/masato-naka//Library/Containers/com.docker.docker/Data 60M /Users/masato-naka//Library/Containers/com.docker.docker/Data/log 41M /Users/masato-naka//Library/Containers/com.docker.docker/Data/log/vm 19M /Users/masato-naka//Library/Containers/com.docker.docker/Data/log/host 20K /Users/masato-naka//Library/Containers/com.docker.docker/Data/tasksDockerの仕業だった
以下のコマンドでチェックしてみるとVolumeが大量にありそうだった
docker system df -v解決方法
以下のコマンドでvolumeをprune
docker volume prune -f ... Total reclaimed space: 44.06GBこれでもまだ 50Gは消えていない
[Reset disk image] を押してすべて消す
sudo du -x -h -d 2 /Users/masato-naka//Library/Containers/com.docker.docker/ | sort -h -r | head -30 70M /Users/masato-naka//Library/Containers/com.docker.docker//Data 70M /Users/masato-naka//Library/Containers/com.docker.docker/ 63M /Users/masato-naka//Library/Containers/com.docker.docker//Data/log 164K /Users/masato-naka//Library/Containers/com.docker.docker//Data/vms 20K /Users/masato-naka//Library/Containers/com.docker.docker//Data/tasks開放できた!
df で確認するとほぼ全部なくなってる!
docker system df -v Images space usage: REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS k8s.gcr.io/kube-controller-manager v1.15.5 1399a72fa1a9 5 months ago 158.8MB 42.32MB 116.5MB 0 k8s.gcr.io/kube-proxy v1.15.5 cbd7f21fec99 5 months ago 82.41MB 42.32MB 40.09MB 0 k8s.gcr.io/kube-apiserver v1.15.5 e534b1952a0d 5 months ago 206.9MB 42.32MB 164.6MB 0 k8s.gcr.io/kube-scheduler v1.15.5 fab2dded59dd 5 months ago 81.11MB 42.32MB 38.79MB 0 k8s.gcr.io/coredns 1.3.1 eb516548c180 14 months ago 40.3MB 0B 40.3MB 0 k8s.gcr.io/etcd 3.3.10 2c4adeb21b4f 15 months ago 258.1MB 0B 258.1MB 0 k8s.gcr.io/pause 3.1 da86e6ba6ca1 2 years ago 742.5kB 0B 742.5kB 0 Containers space usage: CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES Local Volumes space usage: VOLUME NAME LINKS SIZE Build cache usage: 0B CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED参考
- 投稿日:2020-03-14T12:36:42+09:00
Mac Catalina Audacity(オーダシティ) 音声入力を受け取ってくれない不具合を解決した話
目的
- 最新OSでAudacityが音声入力に対応してくれない不具合が発生して解決した話をまとめる
環境
項目 情報 OS macOS Catalina(10.15.3) ハードウェア MacBook Pro (16-inch ,2019) プロセッサ 2.6 GHz 6コアIntel Core i7 メモリ 16 GB 2667 MHz DDR4 グラフィックス AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB 問題
- インストール直後にインプットデバイスを内蔵マイク設定しているけど音声を受け付けてくれない。
- 録音を始めても全く音の波形が入らない。
解決方法
- 下記を参考に解決策を模索した。
ターミナルを起動して下記コマンドを実行し管理者になった。
$ sudo su下記コマンドを実行してターミナル経由でAudacityを起動した。
# open /Applications/Audacity.app/Contents/MacOS/AudacityAudacityのアプリが起動した。
左上の録音ボタンをクリックしたところ下記のウインドウが開いたので「許可」をクリックした。
再度録音を行ったら正常に録音している音波の波形が確認された。
- 投稿日:2020-03-14T11:49:36+09:00
既存の開発環境にDockerを導入する
はじめに
今まではAWSのcloud9でrailsアプリを開発していましたが、実際の開発現場で使われているというDockerを開発環境に導入しようと思います。
※導入する際には、以下の記事を参考にさせていただきました。
丁寧すぎるDocker-composeによるrails5 + MySQL on Dockerの環境構築(Docker for Mac)環境
Ruby 2.5.3
Rails 5.2.4
MySQL 5.7
MacBook Pro1 自分のアプリのディレクトリ直下にDockerfileを作成する
DockerfileFROM ruby:2.5.3 RUN apt-get update -qq && apt-get install -y vim nodejs default-mysql-client COPY . /fishingshares ENV APP_HOME /fishingshares WORKDIR $APP_HOME RUN bundle install ADD . $APP_HOME2 docker-compose.ymlを作成する
docker-compose.ymlversion: '3' services: db: image: mysql:5.7 volumes: - ./db/mysql_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: root ports: - "3306:3306" web: build: . command: rails s -p 3000 -b '0.0.0.0' volumes: - .:/fishingshares ports: - "3000:3000" depends_on: - db links: - db3 database.ymlを修正する
database.ymldefault: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password socket: /var/lib/mysql/mysql.sock host: db4 dockerコンテナを起動
terminal$ docker-compose build #コンテナを立ち上げる(立ち上げるのに少し時間かかります) $ docker-compose up #コンテナを起動するコンテナを起動して、ターミナルにこんなログが出てきたらうまくいってます。
5 データベースを構築する
terminal$ docker-compose run web rails db:create #コンテナ上にDBを作成する $ docker-compose run web rails db:migrate # コンテナ上のDBにマイグレーションファイルを反映させる6 ブラウザでlocalhost:3000にアクセスする
メモ1
コンテナを立ち上げた後に、以下のコマンドできちんとコンテナを止める必要があるみたいです。
terminal$ docker-compose downこのコマンドでコンテナを止めないと、次にコンテナを起動したときに、ブラウザでうまく表示されません。
コンテナを起動してから、ブラウザに表示されない時は、以下のコマンドを実施してください。
terminal$ rm tmp/pids/server.pidこのコマンドを実施してから、もう一度コンテナを起動すると、ブラウザにうまく表示されると思います。
メモ2
ローカルからMySQLコンテナに接続するコマンド
terminal$ mysql -u root -p -h localhost -P 3306 --protocol=tcp終わりに
dockerについては学習を始めてから、まだ数週間で慣れない点も多いですが、使いこなせるように勉強をしていきます。
- 投稿日:2020-03-14T03:10:34+09:00
MacのMAMPでバーチャルホストをカスタマイズ
MAMPでバーチャルホストをカスタマイズする方法について書きます。
前提条件
- MacにMAMPがインストールされていること
設定
httpd.conf
ファイルで以下の箇所の#
コメントアウトを外します。/Applications/MAMP/conf/apache/httpd.conf#Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf ↓ Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
httpd-vhosts.conf
ファイルの末尾に以下のような記述を追記します。
Listen
とVirtualHost
に使われていない適当なポート番号を、
DocumentRoot
とDirectory
には使いたいディレクトリパスを入れます。/Applications/MAMP/conf/apache/extra/httpd-vhosts.confListen 8001 <VirtualHost *:8001> DocumentRoot "/Users/userId/test" <Directory "/Users/userId/test"> AllowOverride All </Directory> </VirtualHost>同じようにポート番号を8002、8003と使われていない番号で追記していくと、
複数のバーチャルホストを設定することが出来ます。アクセス
safariで設定したポート番号のページを開く
open -a '/Applications/safari.app' http://localhost:8001参考文献
この記事は以下の情報を参考にして執筆しました。