しゃちの備忘録

プログラミングを中心とした技術関連の備忘録です(今のところ)

Macのスクリーンショットの保存場所を変える方法

個人的に気になったのでメモ.

Macスクリーンショットはデフォルトでは, “デスクトップ"に"png"形式で保存されます. これを, どこか別のフォルダに任意の形式で保存したいと思います.

そのためにはターミナルから設定を変更してあげなければいけないらしくそれの備忘録を書いておきます.

保存形式の変更

画像の保存形式変更には以降のコマンドのいずれかを,ターミナルから入力する必要があります.

$ defaults write com.apple.screencapture type bmp
$ defaults write com.apple.screencapture type gif
$ defaults write com.apple.screencapture type jpg
$ defaults write com.apple.screencapture type pdf
$ defaults write com.apple.screencapture type png
$ defaults write com.apple.screencapture type tiff

デフォルトではpngになっているので変えたい場合は,それぞれの形式に合わせて末尾を変えれば良いらしいです.

また上のコマンドの後に,システムの再起動が必要らしく以下のコマンドを入力してあげます.

$ killall SystemUIServer

保存場所の変更

こちらもコマンドで指定します. ~/screenshotに保存するケースのコマンドなので読み替えてください

$ defaults write com.apple.screencapture location ~/screenshot

この場合システムの再起動が必要なようです.

$ killall SystemUIServer

元の状態に戻すなら以下のようです.

$ defaults delete com.apple.screencapture location
$ killall SystemUIServer

MacでSourceTreeを使いGithubに接続するまで

タイトルの通り, MacでSourceTreeを使いGithubに接続するまでを備忘録的にまとめておきます. Githubの準備とかは省略します.

それ以外の手順は以下の通り.

  1. SourceTreeを準備する(アカウントを作る&クライアントをインストール)
  2. SSHの準備をする
  3. SourceTreeとGithubSSH接続で接続する

SourceTreeを準備する

SourceTreeとはAtlassianが提供しているGitクライアントソフトです. 一番のメリットはGitでのコマンドをGUIでの操作できる点だと思います.(もちろんコマンドを知っていることでより高度な操作ができたりするので知らなくていいというわけではない)

肝心のSourceTreeですが, 下のサイトからダウンロードできます. ja.atlassian.com

ダウンロードされるzipを展開し, appファイルを起動してあげます. f:id:teru0rc4:20170322180928p:plain ここからAtlassianアカウントを作成したり, 既に持っている場合は登録したりしてあげます. それほど面倒じゃないのでサクサク設定してあげましょう.

アカウントの認証が終わると, BitBucketやGitHubなどのリモートリポジトリとの連携について聞かれます. ここで設定することも、セットアップ完了後に後から設定することも可能になってます. 今回はとりあえず「後から設定」を選んでおきます.(あまり意味はないです…)

SSHの準備をする

上でSourceTreeの準備ができたので, GithubとSourceTreeを繋ぐためのSSHキーを生成します.

Windowsの場合, 標準でSSHを使用することができない関係で, SourceTreeにSSHに関するものがまとめて付属しているのですが, Macではついていません.(SSH接続の際OS側のOpenSShを使用するため) ので, ターミナルを操作してSSHキー生成を行なっていきます.

MacSSH公開鍵認証のキーは, 隠しディレクトリの.sshに格納されます. もし .sshディレクトリが存在しない場, 以降の操作の中で作成されるので特に気にする必要はないようです.

ではsshのキーを生成します. ここで使用するコマンドはssh-keygenになります. これを使用することで, キーの生成や, 管理等々を行うことができます. いろいろ聞かれるので, 元々のメッセージにコメントの形で解説を添えておきました.

$ ssh-keygen -t rsa
Generating public/private rsa key pair.          # -t rsaを指定したので, rsaを作りますよ的なメッセ
Enter file in which to save the key (/Users/teru0rc4/.ssh/id_rsa):          # この名前で鍵をつくるよ的メッセ, enterするとid_rsaという名前が自動的につきます. 何かつける名前がある場合はここで入力してあげてください.
Created directory '/Users/teru0rc4/.ssh'.          # .sshディレクトリがないので作りましたよ, すでにあるなら言われないようです
Enter passphrase (empty for no passphrase):          # パスフレーズ入力
Enter same passphrase again:          # もう一回パスフレーズ

ssh-keygen -t rsaとすることでrsa暗号の鍵を作成することができます. 生成の時のコマンドをssh-keygen -t rsa -C hogeとすることで鍵にコメントをつけることができます.(こんかいはhogeというコメントがつきます, メールアドレスとか用途とかをシンプルにコメントでつけることがあるみたいですね)

ほかにも, 鍵につけたパスフレーズの変更をするオプション(-p)や, 鍵ファイルを変換するオプション(-f)などがあるようですが, ここでの説明は控えておきます.

ともかくこれで, .ssh以下に公開鍵id_rsa.pub秘密鍵id_rsaが生成されていると思います.

最後に, この鍵をsshエージェントに保存します. ssh-addを使うことで, 先ほど作った鍵を登録してあげます.

$ ssh-add ~/.ssh/id_rsa

パスフレーズを入力してIdentity added:~~~のようなことが出ればOKです.(ssh-add -lで確認もできます.)

SourceTreeとGithubSSH接続で接続する

それでは最後に, SourceTreeとGithubとを接続します.

まずは先ほど, 生成した鍵の内容をコピーします.(鍵の名前を変更している場合読み替えてください)

pbcopy < ~/.ssh/id_rsa.pub

これでクリップボードに, 鍵の内容がコピーされたはずです.

次はGithubの設定をします. Githubの自分のページに行きSettingをひらきその中の, SSH and GPG keysを選択, New SSH Keyをクリックし鍵を追加します. Titleはなんでも良いのですが, どのパソコンで使っている鍵かどうかなど自分で区別できる名前を使ってあげましょう. Keyの部分でクリップボードの内容を全てコピーしてやり, Add SSH keyで登録完了です. f:id:teru0rc4:20170324211150p:plain

最後に, SourceTreeで自分のGithubリポジトリを操作できるように登録してあげます. Github上でCloneしたいリポジトリを開き, Clone or downloadをクリックします. 展開されたウィンドウのクリップボード?のようなアイコンをクリックすると, クリップボードに内容がコピーされます. Github側の準備はこれで終わりです. f:id:teru0rc4:20170324213608p:plain

SourceTree側の設定を行います. +新規リポジトリ->URLからクローンを選択します. f:id:teru0rc4:20170324213637p:plain

ソースURL部分に先ほどコピーしたGithubのURLをコピーし, パスの部分に自分のPCの保存したいディレクトリパスを入力してクローンを押します.

そうするとクローンが完了し, SourceTree上からGithubを操作できるようになります. お疲れ様でした. f:id:teru0rc4:20170325001644p:plain

macでのlatexmkを使ったTeX環境構築

MacTeX環境を構築したので, それの備忘録をまとめておきます. 最終的な目標は, latexmkで常にtexファイルを監視して常に最新の状態のpdfを見られる状態にすることです.

今回の設定のメリット

tex環境は好みとかいろいろあると思いますが, 個人的に以下のメリットがあると思います.

  • 好きなエディタを使える
  • 環境設定が楽
  • TeXのタイプセットがきわめて楽

TeXのめんどくささの一つに, タイプセットがあると思います. 数式番号をつけたり, bibtexを入れて文献をつけたり…. また, そのたびにコンパイルの手順が変わるので, 必要なコンパイルをし忘れたり, 逆に余計な部分のコンパイルをしてしまったりと, 非常に使い勝手が悪かったです.

そこでlatexmkを導入すると, そういう手順をすべてlatexmkに任せて, しかもtexファイルだけでなく, 参照しているファイルが書き換わったタイミングで必要なタイプセットを必要な分だけ全部自動でやってくれるようになります. また, makefileなども書く必要がないのでノンストレスです.

手順

  1. ターミナルの準備をする(homebrew, homebrew cask)
  2. MacTeXを入れる
  3. pdf出力できるようにする(imagemagick, ghostscript)
  4. pdfビューワーを入れる
  5. latexmkを設定する

ターミナルの準備をする

今回はmacに標準で入っているターミナルからいろいろ導入するため, パッケージ管理システムhomebrewとその拡張版のhomebrew caskの準備をします.

homebrew

詳しい話は過去に書いたので, そちらで… teru0rc4.hatenablog.com

やるべきコマンドは以下のみです.

xcode-select --install
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

homebrew cask

homebrewの拡張版で, dmgファイルなどを使ってインストールするものをコマンドでインストールできるぞ!ってものらしいです. 今回は, これも使ってなるべく簡単に環境を構築することを目指したいと思います.

homebrewがインストール済みの環境で,

brew install caskroom/cask/brew-cask

と入力してやるだけです.

MacTeXを入れる

続いてMacTeXを入れます. mactexは, macOS用のTeXディストリビューションです. これを使うことで, TeX/LaTeXの環境を簡単に導入できます.

最小限の環境ならBasicTeXと呼ばれるものがありますが, 個人的には様々なパッケージを最初の段階で網羅してくれているMacTeXのほうがよいかな…と感じました.

先ほど準備したhomebrew caskを使ってインストールしてやります.

brew cask install mactex

pdf出力できるようにする

次にTeXで書いた内容をpdf出力できるようにするため, imagemagickghostscriptをインストールします. imagemagickは画像を取り扱うため, ghostscriptはpdfを作成するためにそれぞれ使うようです.

コマンドは以下の通りです.

brew install ghostscript
brew install imagemagick

pdfビューワーを入れる

今回はskimというソフトを選びました. これである必要はないのですが, 今回の目標が, latexmkで常にtexファイルを監視して常に最新の状態のpdfを見れる状態にすることなので, pdfファイルが変更されたときにそれを自動で更新してくれるようなソフトを選んであげる必要があります. ちなみに, AdobeAcrobatだと, ファイルが変更されても更新されないのでだめです.

brew cask install skim

latexmkを設定する

latexmkの設定です. といっても, MacTeXにくっついているのでインストール自体は不要です.

ただし, 以下の設定ファイルを書いてやる必要があります. ~/.latexmkrcに以下の内容を記述して, 保存してあげてください.(最後の行pdf_previewerの部分は, skimを用いる場合です. その他のビューワーの場合は, そのpathを記述してください.)

#!/usr/bin/env perl
$latex            = 'platex -synctex=1 -halt-on-error';
$latex_silent     = 'platex -synctex=1 -halt-on-error -interaction=batchmode';
$bibtex           = 'pbibtex';
$biber            = 'biber --bblencoding=utf8 -u -U --output_safechars';
$dvipdf           = 'dvipdfmx %O -o %D %S';
$makeindex        = 'mendex %O -o %D %S';
$max_repeat       = 5;
$pdf_mode         = 3;
$pvc_view_file_via_temporary = 0;
$pdf_previewer    = "open -ga /Applications/Skim.app";

書いてる内容は, 近日中に追記します. だたこれを書くと, synctexが使えたり, コンパイル失敗時に必要以上にエラーメッセージが出ないようになったり, うれしいです(雑).

最低限の設定はこれで以上です. では使ってみましょう.

使ってみる

編集したいtexファイルがあるディレクトリに行って

latexmk -pvc *****.tex

と入力します.(*****は各自対象とするファイル名に置き換えてください)

-pvcオプションをつけることで, ソースや関連ファイルが更新されるたびにコンパイルを実行し, ~/.latexmkrcで記述したpdfビューワーにpdfを出力してくれます. その他のオプションは以下の通りです. -cはよく使うので覚えておくといいと思います.

  • -pv … pvcの自動更新なし版
  • -c … 変換の途中でできたファイルを消してくれます(logファイルとか)
  • -C … 出来たファイル全部消します(dviファイル, pdfファイルとか)

ためしに, 文章を変更するとターミナルががりがり動いて, 逐一pdfを更新してくれるはずです.便利.

伝わりにくいですがこんな感じに使えるはずです.(ターミナルと, エディタと, pdfビューワーの3つで動いてます.) f:id:teru0rc4:20170128003020p:plain

おわりに

アウトプット癖をつけるために, とりあえず書いてみました. 間違い等ありましたら指摘していただけると幸いです.

ここまでお付き合いくださり,どうもありがとうございました.

XcodeとHomebrewについて

macでプログラミング環境を構築しようとした時に必ずと言っていいほど出てくる(出てきた), XcodeとHomebrewについて, 調べたのでまとめました.

Xcode

Xcodeとは

Xcodeは, アップルが提供している統合開発環境です. 今回はどっちかっていうと, IDEとしての使い道ではなく, コマンドラインツールとしての使い方がメインとなります. コマンドラインツールとはテキストや, コマンドを用いて様々な操作を行うCUIアプリケーションのことをさします. これを入れることで, コンパイラやGitなどのコマンド群を使用することができます. Homebrewを動かしたりするのに使うのでインストールしていきます.

インストール

Webや, AppStore, ターミナルからインストールできます. 普通にインストールしてしまうとXcodeの全てをインストールしてしまい, ものすごい時間がかかってしまいます. 上でも触れたように今回はコマンドラインツールとしての使い方がメインなので, それだけをインストールする方法を書いていきます.

コマンドラインツールをインストールするに, ターミナルを開いて以下のように入力します.

xcode-select --install

すると下のようなウィンドウが立ち上がるので, 指示に従ってインストール. f:id:teru0rc4:20170108202049p:plain

Homebrew

Homebrewとは

Homebrewは, パッケージ管理システムです. これを使うことで, ソースコードの状態で配布されているプログラムを取得しビルドすることで, 自分自信のmac環境で最適化された状態で使用することができます.

ちなみに読み方は「ホームブルー」らしいです(ホームブリューだと思ってました).

インストール

親切なことに公式サイトに丁寧に書いてあります. brew.sh

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

これを実行してやることで, インストールが開始されます. 途中でパスワードが要求されたりしますので, 入力してあげてください.

確認用のコマンドとして, バージョンチェックもあるので合わせてどうぞ.

$ brew -v
Homebrew 1.1.6
Homebrew/homebrew-core (git revision 9bc1; last commit 2017-01-08)

おわりに

これで色々プログラミングをする準備が整いました. コマンドだけならたった2行ですが, 色々調べて回ってるうちに3週間くらい経ってました…. これから頑張ります.

MacBook Proことはじめ

MacBook Proをかいました. f:id:teru0rc4:20161224185641j:plain 初のMacOSだったので, MBPのセットアップやあれこれについて備忘録的にまとめます(逐一更新予定)

各種ショートカットキー

windowsでもよく使っていたもの.

おおよそwindoesで使っていたショートカットキーと同じでしたが, いくつか使えなかったのでそこは注意(Alt+F4とか)(気が付いたら更新予定). (windowsのCtrlとAltが, commmandとoptionに結構ごっちゃに置き換えられてるように感じて混乱してます)

キー 機能
⌘ command+w ウィンドウを閉じる
⌘ command+q アプリを閉じる
⌘ command+h ウィンドウを隠す
⌘ command+q アプリの終了
⌘ command+c コピー
⌘ command+x 切り取り
⌘ command+v 貼り付け
⌘ command+s 保存
⌘ command+z undo
⌘ command+tab アプリ切り替え
⌘ command+Shift+g ディレクトリを開く

mac特有(?)のもの

macを使う上で知っておきたい・便利だと思ったショートカットキーたち. あまり自信がないので「特有(?)」としました.

キー 機能
⌘ command+shift+3 全範囲でのスクショ撮影
⌘ command+shift+4 範囲を指定してのスクショ撮影

押さえておきたい機能

ショートカットキーは「知っておくと便利程度」でまとめましたが, こっちは「macを使いこなすらなら是非押さえておきたい!」くらいの気持ちの機能についてまとめます.

トラックパッド操作

まだ

インストールしたもの

普段使い関連

  • Firefox
    • 普段使ってるアドオンも一緒に入れました
    • なんか表示がおかしいのでSafariに乗り換えた
  • Safari

  • VLC media Player

    • iTune使え
  • Tweetdeck

    • windowsではブラウザ版しかなかったが, macではクライアントがあるらしいのでそっちを利用してみる
    • App Storeからダウンロードするらしい
  • 各種コミュニケーションツール

    • Slack
    • LINE
  • Office

    • (予定)

プログラミング関連

趣味関連

  • ドット絵環境
    • edgeに代わるものを探さなければいけない…
    • Wineでedgeが動かせるので問題なくなった

その他(?)

  • ShiftIt
    • ウィンドウの画面寄せをするためのソフト
    • macにはデフォルトでないらしいのでこっちで追加
    • ここからzipをダウンロードして展開
    • システム環境設定>セキュリティとプライバシー>プライバシー>アクセシビリティから, ShiftIt.appに権限を与えてください
  • Xcode

  • Homebrew

    • パッケージマネージャ
    • Xcodeとあわせて使う
  • Wine

    • 主にドット絵を使うために
    • Winのソフトを動かすことができる
    • Xcodeを合わせて使う

SECCON 2016 Online CTFに参加しました

12月10日, 11日に開催されたSECCON 2016 Online CTFに参加しました. CTFをやり始めて3年目ですが, CTFに参加するのはほぼ1年ぶりの参加なので実質初参加です….

最近ここの更新が滞っていたので, 折角なので書いてみようと思い立ったので書きます.

SECCON CTFって?

はじめにCTFとは, Capture The Flagの略で, 問題で与えられた物に隠されたキーワード(Flag)を入手するという形式のコンテストになります. 出題の形式は様々で, Flagが隠されている物は実行形式のファイルだったり, ソースコードだったり, パケットの一部だったり, webのリンクや画像だったりもします. それらに対し, さまざまな知識を使ってアプローチを試みて隠されたキーワードを入手することを目指します. 例えば対象が, 実行形式のファイルなどだった場合はリバースエンジニアリングを試みたり, パケットの一部ならパケット解析をしたり, webのリンクだったらそのサイトに行ってSQLインジェクションしたりする といった感じです. 要求される知識の幅がとにかく広く, コンテスト中のググりでフラグ取得に必要な知識を勉強するのはいつものことです.

CTF自体は本来セキュリティに関する技術の勉強の側面がメインであり, Flag=機密情報に見立てそれを入手する技術を勉強し実践する機会として設けられています. 普通のサイトでSQLインジェクションをやると犯罪になるので, それを競技として実践しどんなものか実感できる貴重な場だと思います.

で今回参加したSECCON CTFとは国籍、性別、年齢、問わず参加可能な日本最大のオンラインCTFコンテストです. 私は過去2回参加していて, 破損QRコードを復号することに定評がありました……. 今年は自分もQRコード以外が解きたくなったので, 個人参加です. どんな結果になっても泣きません.

挑んだ問題

Vigenere(Crypto 100)

タイトルからしてヴィジュネル暗号を解く問題っぽいです. 暗号化された文字列と, 元の文と, 鉤の文字数がと対応表が以下のように与えられました. k: ???????????? p: SECCON{???????????????????????????????????} c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ 対応表は略

さらに, md5で元の文をハッシュ化した文字列が与えられました. md5(p)=f528a6ab914c1ecf856a1d93103948fe

ので, フラグGettoに向け, 以下のような二つの方法を考えました.

その1 1.key(以降k)である「????????????」を取得(銭湯七文字がわかってるとはいえ, 275 = 14348907パターンある…) 2.そのkで変換後の文(c)を原文(p)に復号 3.pをmd5ハッシュ値計算をして, 「f528a...」といっちしているかを調べる 4.一致したら終了, しなかったら1にもどり別のkを生成する

その2 1.md5(p)を適当に逆変換 2.先頭が「SECCON{」になっていれば採用, なってなければ他のパターンを試す

その2を試したらあっけなく通ってしまいました…. 先頭のSECCONが分かってるのがでかかった感じです. 正統派で行くなら, その1ですよね.

VoIP(Forensics 100)

「Extract a voice」という説明とともにpcapファイルが配られました. pcapファイルとはPacket Capture Dataの略です, パケットの一部が格納されたファイルです. で, パケット解析にはWiresharkというソフトが便利です. のでそれでこのpcapファイルを開きます.

ところで問題が「VoIP」って名前です. VoIPとは, 音声をパケットに変換したものをIPネットワークでリアルタイム伝送する技術のことを指します. そういうわけで, 「このパケットは音声が変換されたものなのかなー」とか思ってました. ので, WiresharkについてるVoIP機能で再生してやると, それっぽい言葉が. 何回か間違えつつ, 入力するとFlagがでましたとさ. 聞き取りむずかしかった

まとめ

実は今年は2問しか解けませんでした…200点ですね(低い). CTFへの参加は1年ぶりでしたが, 各種ツールを使うのにも手間取ってしまいもったいなかったです.

やっぱりCTFも競プロもちょっと気合い入れてやらないと中途半端だし, できないと悔しいですね…… もっと精進します.

C++における範囲ベース for ループ

C++でカウンタを使わずに, 要素を1つづつ参照する方法として, 範囲ベース for ループなるものを見つけたのでまとめておきます*1

範囲ベース for ループとは

C++11から新しく追加された言語機能. range-based for loopとも書くらしい.

似た機能として'for_each'があるらしいが, あちらはSTLの関数テンプレートであり, こちらはネイティブの機能として追加されたものであるらしい.

記法は以下の通り.

int v[] = {1, 2, 3, 4, 5};
for(auto &x : v) {
  std::cout << x << "\n";
}

基本的な記法は, for ( xxx : array ) { }らしいのだが, 型名を記述しないために同じくC++11で導入されたautoを使用. 加えて, 無駄なコストを書けないために参照渡し&xの形をとっている.

参照渡しをしているのでxの値を書き換えると, その時参照しているvの値も変わるので注意. 値を書き換えたくないときは, const auto &x : vをすればよい.

indexを取得できない(しようとすると結構助長なコードになるっぽい?)ので, そこは一長一短だなーと覚えておきます.

*1:旧タイトル 『C++ちょっとわからないメモ』です. 更新しました