ソフトウェア」カテゴリーアーカイブ

技術書典 7 (2019/09/22) に出典致します。

池袋サンシャインシティで2019年9月22日に行われる、技術書典 7に出展致します。

サークル名「Nanoseconds Hunter」で、「し22D」に配置されます。

頒布情報:Programmer’s Pocket Reference

 プログラマー・エンジニア向けの情報を見開きサイズに情報を凝縮して、内容をまとめています。

第1部: コーディング



 第1部では、プログラミング言語同士を比較できる形で、文法・仕様やイディオムをまとめました。
 いままでの書籍にはあまりない、それぞれの言語の特徴や違いをつかむことができる書き方になっています。また、多くのプログラマー・エンジニアは精通している言語をお持ちだと思いますが、慣れていない言語でどう書けばいいのかを調べたい時や、いつも使用しない言語のアプリケーションのコードを読む必要ができた時にも役に立つことと思います。



第2部: 開発のメモ

 第2部では、コンピューターを使用する際に知っておくと便利な知識・必要な情報を見開き形式でまとめました。
 インターネットを調べると旧仕様の内容が検索で上位に出たり、Googleで検索しにくい単語(例: 正規表現で「+」の意味するところは?)を確認する時にも便利だと思います。また、ネットワークが繋がらない状態で作業をしないといけない時や、トイレでの読み物にも役になってくれると思います。

体裁と価格

紙の本(表紙のみカラー、A5 白黒を予定) と 電子版 (PDF) を 併せて配布できたらと思っています。価格は、印刷部数をまだ検討中ですので決まり次第記載致します。(紙 + 電子セットで1000円よりは高くならないはずです。)

是非チェックのほどよろしくお願い申し上げます。

RをJavaScript(Node.js)から使ってみる +α:R Advent Calendar 2017 day 7

この記事は、Japan.R 2017での講演内容を再編成した物です。

Node.jsで作られたアプリケーションや、Electronアプリケーションを、Rと連携させたいと思ったことはありませんか?

JavaScriptとRの連携

Rで統計処理をしているときに、JavaScriptでインタラクティブなビジュアライゼーションを行いたい、ということはあると思います。この目的であれば、shiny (Winston Chang et al.)という便利なパッケージがあります。htmlwidgets(JJ Allaire et al.)も便利なパッケージで、threejsbokehなどの連携を行うことができます。

では、逆は、というとあまり決定的なアプリケーションはありません。npmをみてみると、controlr, r-script, computerというパッケージがありますが、どのパッケージもRをspawnしてstdin/stdout経由でアクセスしているだけであり、すこし物足りません。

そこで、勉強がてら自前ですこし作ってみることにしました。

libr-bridge

libr-bridgeはlibr(WindowsではR.dll)と連携して、Node.js環境からRを使用するパッケージです。

libr-bridgeを利用することで、Rの関数にアクセスすることが出来ます。eval関数も備えていますので、とりあえずデータだけ渡してしまって、凝った作業をRスクリプトで行い、結果を受け取ることも出来ます。

まだまだfactorやdata.frame, S3/S4クラスなど対応しないと行けないことは山積みですが、Node.jsで出来る作業の幅を広げてくれます。

どうやって実現しているの?

ぜひ、ソースコードを見ていただきたいですがlibRのAPIをゴリゴリに呼び出して動作を行っています。Rの内部挙動を理解するのにも役に立ちました。

小ネタ

Rでは倍精度浮動小数点(double9は他言語と同じようにIEEE 754に従って、実装されています。これは、1bitの符号と、11bitの指数部、52bitの仮数部で数値を表す方式です。

NaNはこの決まりに含まれており、指数部のbitがすべて1であり、仮数部が0以外のもの、と定められています。これは他の言語も共通です。

しかし、 NAはR独自の表現であり、この決まりの中には含まれていません。

Rでは、少し特殊な仕組みでNAを実現していて、仮数部が1954(R言語設計者の一人のRoss Ihakaの誕生年)のNaNをNAとして区別して扱っています。

今回、libr-bridgeを作るのに、Rの内部を調べていくうちにこういった小ネタをいくつか見つけたので、また次の機会にでも記事にしたいと思います。

ffmpegをGoogle Compute Engine経由で使ってみた

ffmpeg、便利ですよね。ただ、どうしてもエンコード作業という物はCPUパワーと時間を消費します。

背景

つい最近、Panasonic の4Kビデオカメラ VX980Mを購入しました。画質もよく、大変満足しているのですが、4K画質はとにかくファイルサイズが大きくて大変です。10分程度の動画でも約5GBになってしまい、普段の取り回しにはやや不便です。

そこで、もともとの4K動画は将来使用できるようにクラウド上へとバックアップし、ローカルには960×540 30fpsにエンコードしたものを置いておくことにしました。

しかし、僕のメインマシンはMacBook Pro 12″ (1.3 GHz Intel Core m7)なので、どう考えても本格的なエンコード作業には向いていません。

そこで、ffmpegをGoogle Compute Engineで動かし、クラウドでのエンコードを行ってみたので、引っかかった点も踏まえて、ここに報告させていただきます。

方法

まず、Google Compute Engineが使用できるようになっているのが大前提です。まだの人は導入を済ませてください

まずは、インスタンスを作ります。今回はエンコード作業が目的ですので、CPUを強化した設定として、n1-highcpu-8を使用します。また、ちょっとお高いですが、近い方が通信コストも少ないでしょうから、asia-northeast1-cを選ぶことにしてみました。

もちろん、UbuntuやCentOSを選んでも良いですが、Dockerを使った方が後々の取り回しも楽だと思いますので、Container-Optimized OSを選ぶことにします。

まずは、dockerでffmpegを動かすのを試してみましょう。イメージは人気のあるjrottenberg/ffmpegを選ぶことにします。

これでffmpegを動かすことができました。ここまではスムーズ。

と言うわけで、stdinとstdoutを用いてエンコード作業ができないかを試してみます。

どうやらだめなようです…。調べてみると、パイプを使った場合は、MPEG-PSでの出力はできないことが分かりました。ので、残念ながら、そのままmp4にはできないようです。

MPEG-TSならパイプへの出力にも対応しているので、こうすれば大丈夫です。

これでクラウドでの変換はうまいこといきました!

ただ、tsファイルのままだと、取り回しがまた面倒なので、こちらもローカルで再変換しましょう。

これで取り回しのしやすい小さいサイズのmp4ファイルのできあがり、です。

ただ、tsファイルをローカルにいったん保存するのは美しくない……。そう思うようであれば下記を試しましょう。zshが必要です。

環境とバージョンによっては、inの方もMPEG TSである必要があるようです。その場合は残念ながら、さらに入れ子にして、

これで、input.mp4 -> TS -> cloudのffmpeg -> TS -> output.mp4と変換することができます。

結果

肝心の性能です。

まずはlocalで実行している場合。

うーん、0.547x, 16 fpsと出ています。10分の動画の変換に約20分かかることになります。

それではクラウドではどうでしょう。

リアルタイム変換より速い速度で変換できています。4K動画の変換なので、Uploadが速度のボトルネックになる場合もあるかもしれませんが、ローカルの2.3倍の速度でエンコードできたようです。

注意点

Google Cloud Computingなので、料金がかかります。また、リソースの割当量にも注意が必要です。

MacBookやその他のNetBookなどでも、この方法なら動画のエンコードを行うことができます。ただ、巨大なファイルをアップロードする必要もあり、思ったより速度がかせげない、というのが正直な感想です。今後H.245/HEVCなどさらに負荷のかかる動画形式が一般的になってくれば、有用になるかもしれません。

Pocket C.H.I.P. が届いた

Pocket C.H.I.P.が届きました。2016年5月に申し込みをしているので、実に半年かかったことになります。(当時はまだ49$でした)

プチプチに包まれたPocket C.H.I.P.

こんな感じのプチプチに包まれて香港からやってきました。

C.H.I.P.とPocket C.H.I.P.

Pocket C.H.I.P.にあわせて、C.H.I.P.とHDMI DIPを購入。こちらもおいおい触って行きたいです。

Pocket C.H.I.P.

なかには、こんな感じで本体が入っています。

チュートリアル

起動するとチュートリアル画面に。

img_2014

メニューにはないですが、ターミナルからsurf "http://www.yahoo.co.jp"とするとブラウザも起動できます。Ctrl+Gで任意のアドレスに移動、Ctrl+-で縮小などのショートカットキーも使用可能。

追記: Ctrl+H/L – 戻る/進む, Ctrl+O – ソースコードに切り替え, CTRL+Q – 終了

img_2023

apt-get installすれば、みんなの大好きなslだってnethackだって使用可能。

これはなかなか面白いものを手に入れました。

困った点

  • “-“キーがzshでだけ効かない → .XmodmapでKP_Substractとなっているところをminusにすればよい
  • Pocket C.H.I.P.のfirmware?というか、flashメモリのアップデートしたい → 本体からC.H.I.P.をわざわざ外さずとも、上部にある”FEL”と”GROUND”をクリップかなんかで短絡させて、そのままChromeでC.H.I.P. Flasherを起動したPCに接続すれば良い(らくちん)
  • 日本語表示されない
    • sudo apt-get install locales⏎
    • sudo dpkg-reconfigure locales(日本語選ぶ)⏎
    • sudo apt-get install fonts-ipafont⏎
  • bluetoothどこで設定するかわかんない
    • C.H.I.P.と違ってPocket C.H.I.P.はGUIで設定できないのでbluetoothctlあたりを駆使する。
  • うまいことタップできない
    • 上のほうはなんだかタップしにくいので
    • sudo apt-get install xinput-calubrator⏎
    • xinput_calibrator⏎
    • これでうまいこと調整する
    • もしくはせっかくUSB付いているのでマウス繋げると楽チン
  • sudoしたいけどパスワードわかんない
    • ID: chip / PASS: chip か、ID: root / PASS: chipだよ
  • 追記
    • Ctrl + Tab で起動中のアプリ切り替え

Affinity Designer で pdf を編集してみる

serifのAffinity Designerはシェアウェアで¥5000もしますが、トップレベルのベクターグラフィック編集ソフトです。

demoを見てもらうとどんなソフトウェアか分かってもらえると思います。

イラストを描く方にはもちろん便利なソフトウェアだと思いますが、pdfの編集にも大変威力を発揮します。

IGF1SDbyGroup_raw

たとえば、Rやその他のソフトウェアでこんな出力が得られたとします。何の変哲のない箱ひげ図で、このままでも充分使用はできますが、よく見ると色々と不満が出てきます。

affinity

実際にこういった画像を綺麗に編集するのは難しく、グラフィックソフトウェアでちまちま編集するか、PowerPointやKeyNoteに貼り付けた後、上から覆いかぶせるように図形やテキストを駆使しして見栄えを調整するか、もしくは最終的には諦める、という風になっていたと思います。

もちろん、Adobe Illustratorは選択肢の一つですが、高価であり個人用途で簡単に手を出せるものではありません。

Affinity Designerはpdfのファイルを開くことができ、色々と編集した上で、pdfやpngなどで保存することができます。

先程の例でも、

screenshot

必要に応じて、テキストの大きさ・色・内容を変更して…

IGF1SDbyGroup

グラフの色や線の太さなども簡単に調整して保存することができます。このくらいの作業なら慣れたら3分もかかることなく簡単に行うことができます。

現時点では、日本語化されておらず、一部フォントで日本語の表記が乱れるようですが、画像の編集は問題なく行えています。

近いうちに日本語化すれば、Adobe Illustratorの代替として一番におすすめできるソフトウェアになると思います。

ディスクの故障とデータのサルベージ

ディスクの故障、ある日突然やってきます。残念ですが、ハードディスクは消耗品であり、ある日突然データが読めなくなっても不思議ではありません。現在普及しているUSBメモリ・SDカード・SSDも物理的には安定とはいえ、何らかのトラブルが起これば読み込みができなくなることも多々あります。

自分がトラブルに陥った時に、たいへん助かったツールをご紹介いたします。

まずはじめに・・・

あなたがこのサイトを、Googleで探し当てたということは、おそらくデータのバックアップを取っていなかったということを意味するのだと思います。

今回を契機に、適切なバックアップ環境の構築をおすすめします。データの復旧は、バックアップの何倍もコストが掛かり、時間を浪費し、また確実にデータが戻ってくるとは限りません。

データ復旧専門の会社

復旧には手間も時間もかかります。もし自信がなければ、お金がかかりますがデータ復旧専門の会社、たとえば日本データテクノロジーさんなどの専門会社さんへ依頼するのがお勧めです。

注意: 以後のソフトウェアはプロフェッショナル向けです。使い方を間違えると、復旧できるはずだったデータが戻らなくなるだけではなく、現在確保できているデータさえ失う可能性があります。

GNU ddrescue

辛うじてデータが読み込みできているディスクに頻繁にアクセスを行うと、それだけでディスクに負担をかけてしまうことになります。まずはディスクをイメージとして確保しましょう。

古典的にはddコマンドが使用されてきましたが、より便利なコマンドであるGNU ddrescueをおすすめします。

ddコマンドは、データを前から読み込みをします。データの不良領域がなければそれでも構わないですが、不良領域があればその読み取りに時間をかけてしまい、その領域以降のデータの読み込みが遅々として進みません。それにより、ディスクに負担をかけてしまい、不良領域以外の読み取れるはずだったデータに影響が出る可能性もあります。

GNU ddrescueは、その点少し賢いコマンドです。読み込めるところだけ読み込んでしまい、その後不良領域の読み込みをtryする、試行回数は3回まで…なんて使い方ができます。

もちろん、基本はddコマンドなので、救出しようとしている領域より大きいデータ保存領域が必要です。イメージから抜き出したデータを保存するためにも、救出するデータの2倍の領域を確保しておくのをおすすめします。たとえば、20GBのパーティションのデータを保存するなら40GBが、200GBなら400GBの領域を用意しておきましょう。

また、このコマンドを使用するには最低限システムからディスクが認識できる状態にする必要があります。起動できなくなったノートパソコンのハードディスクからデータを取り出す場合などは、SystemRescueCdなどから起動してディスクが見える状態にするか、SATAのHDDをUSBで接続できるケーブル(amazonで「SATA USB HDD」といったキーワードで検索すればたくさん出てきます。たとえばこれとか。)を使用することになります。

インストール

Windowsの方は、Cygwinベースのものを使用することができます。もしくは、SystemRescueCdを作っておくのが、簡単で便利です。

デバイス名の確認

ddrescueを使うために、デバイス名の確認をしましょう。

Mac

Macにもfdiskはありますが、残念ながらデバイス名の確認には使えません。マウントできている場合はdf -hで確認できますが、トラブルが起こっているディスクがマウントできるとは限りません。

付属のディスクユーティリティを使うことでデバイス名を調べることができます。

FATなどの管理領域が壊れてしまっているディスクの場合、接続すると読み取りができないというメッセージが出ます。「無視」をクリックして下さい。

diskunavailable

ディスクユーティリティを起動すると左のリストにディスクが表示されますので、対象のディスク(またはパーティション)を選択して、「情報」を押して下さい。

diskdevname1

「情報」を押すと、ディスク識別子が表示されます。下図では「disk3」となっており、デバイス名としては「/dev/disk3」を使用していくことになります。

diskdevname2

Ubuntu

Ubuntuの場合、sudo fdisk -lでデバイス名の確認ができます。

ディスクのサイズなどを参考に、どのデバイス名が割り当てられているかを確認して作業を進めていきます。

データの取り出し

デバイス名も確認できたことですし、データをイメージとして確保しましょう。それではまずは初回の読み込みを行います。

デバイス名には、先ほど調べたものを指定します。これが間違っていると、時間をかけてデータを取り出しても全く意味が無いことになります。注意して指定しましょう。

書き出し先の名前は何でも良いですが、必ず充分な空き容量があるデバイスを指定するようにして下さい。Macの場合、拡張子を.imgにすれば修復後にディスクユーティリティからマウントでき、大変便利です。

ログファイルの指定は大切です。この中にはディスクのどのブロックを読み込めたか、どのブロックは読み込みに失敗したかなどの情報が入っています。

初回の読み込みには、--no-split (または-n)を指定することをおすすめします。このオプションを指定することで、読み込みに時間がかかる場所をスキップすることができます。

うまく読み込めた場合は、とりあえずここで終了です。エラーがあり全てのブロックが読み込めていない場合は読み込み直しを行いましょう。

ログファイルにどのブロックが読み込めているかの情報が入っているので、もう一度実行すると先ほど読み込めなかった部分をトライできます。

--direct(または-d)オプションを指定すると、カーネルのキャッシュを使用せずにアクセスできます。

-rオプション(–retry-passesまたは–max-retries)で、何度試行を行うかを指定できます。

ディスクイメージ(またはパーティション)が取得できたら次の段階に進みましょう。

TestDisk

イメージが取得できたら修復を行います。可能ならこの時点での取得したイメージをバックアップしておくことをおすすめします。

もっとも簡単なのは、取得したイメージを別のハードディスクに書き込むもしくはループデバイスとしてマウントしてから、fsckを走らせるという方法です。これで改善されればいいですが、fsckで修復できる範囲はそれほど広くありませんし、そもそもパーティションが認識されていなければ太刀打ちできません。

今回はオープンソースソフトウェアのTestDiskを紹介します。

インストール

Windowsの方は、公式サイトからバイナリを取得することができます。

修復の実行

先ほど取得したイメージを引数にして起動します。すると次のような画面が開かれます。

ファイルに間違いがないことを確認してProceedを選択しましょう。この画面で(RO)と表示されているまたは、「書き込みができない」という内容のエラーが出た場合は、取得したイメージファイルのユーザーまたは書き込み権限をチェックして下さい。(おそらく、sudoで作業してrootの所有のままになっているのです。)

次の画面では、パーティションテーブルの種類を選ぶように指示されます。

Intel/PC partition(MBR)を使用しているか、EFI GPT(GUIDパーティションテーブル)を使用しているかは場合によりますが、比較的新しいHDD / SSDならEFI GPTであると思います。古いHDDやFAT32でフォーマットされていたUSBメモリの場合Intel/PC(MBR)かも知れません。

うまく検出された場合は、画面の下部に「Hint: EFI GPT partition table type has been detected.」などと表示されますのでその場合は指示にしたがいましょう。

次の画面では、Analyse(分析)を選びましょう。

Analyseを選ぶと、以下のように出てきました。

Bad GPT partition, invalid signature. Trying alternate GPTとのことで、どうやらGPT部分が壊れていたが、予備の情報が使用できるようです。今回はラッキーなケースでした。Quick Searchを押して、パーティションを表示します。予備情報もダメになっている場合や、Quick Searchでは全てのパーティションが表示されなければDeep Searchを行って下さい。

無事パーティションが見つかれば、この画面でPを押しましょう。

これで、ディスクに含まれていたファイルが表示されました。ファイルを選択してCを押せば、データを取り出すことができます。

元の画面に戻って、[Write]を押して正しいパーティション情報を書き込めばループデバイスとしてマウントしたり、Macではディスクユーティリティでマウントできます。これで一件落着です。

パーティション情報が見つからないなど、この方法で修復ができない場合は次のPhotoRecを試すことになります。

PhotoRec

不幸にしてtestdiskでは修復ができなかった場合は、同時にインストールされるPhotoRecを試してみましましょう。TestDiskはFATなどの管理領域を修復することでディスクのデータをアクセス可能な状態にするものでした。

PhotoRecは少し違います。ディスク全体を捜査してデータが含まれている領域を探し出します。例えば、JPEGファイルは「0xff, 0xd8, 0xff, 0xe0」・「0xff, 0xd8, 0xff, 0xe1」・「0xff, 0xd8, 0xff, 0xfe」といったデータから始まります。ブロックがそのようなデータから始まっている場合はJPEGファイルとして読み込みをtryして復元を試みます。PhotoRecでは、JPEGだけでなくZip, MS Officeファイル, PDFなど270種類のファイルタイプを認識し、出来る限りデータを復元しようとします。

ファイルシステムに依存しないので、うまく行けば削除してしまったファイルすら修復することができます。たとえば、デジカメのSDカードの画像を間違って消してしまった場合なども、上から新しい画像を保存してしまう前であれば、高確率でデータを取り戻すことができます。

ただし、データがディスク上に直線上に並んでいない時(断片化している時)はうまく修復できません。

で起動すると、TestDiskと同じような画面が出てきます。

Proceedを押して進むとパーティションの一覧が出てきます。・・・が、今回のディスクは壊れてしまっているので残念ながらパーティション情報は出てきません。Unknownを選択してディスク全体を捜査することにします。(パーティションが認識されていれば、対象のパーティションを選ぶか、Wholeを選択します。)

File Optを押せば、どの種類のファイルを検索するか指定できますが、今回は気にせず標準の設定でSearchを選択します。次の画面ではext2/ext3/ext4か、それ以外のファイルシステム(FAT/NTFS/HFS+など)を選択しましょう。

保存先のディレクトリを指定して「C」を押すと、ディスクデータの検索が始まります。

ディスクを網羅的に検索するのでかなり時間がかかります。気長に待つことにしましょう。

全部で384個のデータが救出されたようです。

recovereddata

残念ながら、ファイル名とディレクトリ構造は修復されませんし、すべてのファイルが正常に戻るわけではありません。ですが、全く読み込めなかったものがここまで戻ってくるなら上出来だと思います。


さて、あなたは運良くデータを取り戻すことができたでしょうか。ディスク障害の原因は多岐にわたり、ここであげた方法で全てのデータが戻ってくるわけではありません。くれぐれもこまめなバックアップをおすすめします。

Pixelmatorの新機能 新しくなった修復ツールがすごすぎる

repair_nosheep

この画像、実は、あるものを消しているのです。どこに何があったか分かりますか?

実は、元々の画像はこんな感じに真ん中に大きく羊がいました。

repair_withsheep

Pixelmator 3.2から、新しい修復ツールが実装され、簡単にこのような加工を行うことが出来るようになりました。

repair_select

こう、消したい部分を選択ツールで選択しといて・・・(かなりroughな選択でもOK!)

repair_menu

修復ツールの、「選択部分を修復」を選べば終了です!モードは「クイック」・「標準」・「高度」がありますが、特に問題がなければ常に「高度」を使ったほうが良さそうです。

repair_nosheep

びっくりするほど簡単に、羊のいない画像が作れてしまいます。

repair_up

消した部分をアップで確認しても全然違和感ありませんね。

応用範囲も広そうで、窓ガラスごしの撮影で写り込んでしまったランプとかも・・・

CA310522CA310522

一瞬でこの通り。

せっかくの記念写真の後ろに知らない人が写ってしまった場合も・・・

animal_1

animal_2

違和感なく修復出来ました。

Pixelmatorは時々セールと称して半額で売ってるのでそのタイミングで購入すると大変お得です。

タブ文字はもう使うべきではない (Python + vim編)

Ubuntu 12.04 LTSからUbuntu 14.04 LTSにアップグレードしたところ、vimの設定ファイルが変わったのか、自分の.vimrcの設定に関わらず、tabstopが8で表示されるようになってしまいました。

tab8

まず、pythonでのタブ文字の使用ですが、公式ドキュメントにはこうあります

First, tabs are replaced (from left to right) by one to eight spaces such that the total number of characters up to and including the replacement is a multiple of eight (this is intended to be the same rule as used by Unix). The total number of spaces preceding the first non-blank character then determines the line’s indentation. (snip)

Cross-platform compatibility note: because of the nature of text editors on non-UNIX platforms, it is unwise to use a mixture of spaces and tabs for the indentation in a single source file. It should also be noted that different platforms may explicitly limit the maximum indentation level.

– 2. Lexical analysis / 2.1.8. Indentation

(意訳)

タブ文字はまずストップ位置が8の倍数になるように空白文字で置換されます。これはUnixで行われているのと同じルールです。行頭の空白文字の数に基づいてインデントを決定します。(略)

クロスプラットフォーム互換性情報: 非Unix環境でのエディタのことを考えると、空白とスペースを一つのソースコードで混在させるのはあまり賢いこととは思えません。プラットフォームが違えば最大のインデントレベルも制限されることがあることも併せてお知らせしておきます。

なるほど、とりあえずpythonではタブ文字が”8スペース”を基本として扱われることがわかりました。いままでは.vimrcに

があれば、そちらが使われていましたが、Ubuntu 14.04 LTSのvimではどうやらあらかじめ用意されているファイルタイプの設定が優先され、こちらは考慮されないようです。

もちろん、タブ文字が”8 スペース”として表示されるのは苦痛でしかありません。autocmdを使って無理矢理タブ文字が”4 スペース”と表示して、従来のタブ文字を使用し続けることもできますが、今後はタブ文字を使わずスペース 4文字でのインデントを使っていくことにしましょう。現在のpythonライブラリは標準的に スペース4文字をインデントに使用しています。(試しに、/usr/lib/pythonXXX/dist-packagesにあるファイルをどれか見てみてください。)

まずは旧来のソースコードの変換。変換にはexpandコマンドが便利です。-t4オプションを指定してタブ文字が”4 スペース”であることを知らせます。

これで、新しくできたファイルを再度開くと、従来通りの見た目のタブ文字が”4 スペース”として表示されたと思います。

tab4

開いてみるとスペースに置換されインデントは4文字で元通りの見た目です。

新しいvimの設定ファイルでは、expandtabの設定もきちんとされていて、このままで[Tab]キーと[Backspace]キーが問題なく使えるようになっています。

expandtabの設定がなければ

この状態で[Backspace]を押せば

と、単純にスペースが一つ消えるだけです。expandtabの設定があれば

と、ちゃんと従来通りのタブと同じように使用することができます。

新しいvimではpythonファイルに関してはこの辺の設定が標準でされているようです。

gitのお気に入りコマンドなど

お気に入りのgitの設定およびコマンドです。

git status -sb

と登録しておくのがお勧めです。git status –short –branchの省略形です。

通常の場合、

を実行すると、

gitstatus

と、本来必要である情報以上にたくさんのメッセージが表示されます。もちろん、なれないうちは大変助かるメッセージではありますが、慣れてくると冗長すぎてむしろ見通しの悪さを感じてきます。

では、

gitstatussb

と、本来必要な情報を簡潔に表示してくれます。

git 1.8.4以上をお使いならばGitの更新ログにあるようにstatus.shortとstatus.branchというconfigがありますのでそちらを利用するのもお勧めです。

pager = less -r

(参考: どせいけいさんきより)

git diffなどの結果は、core.pagerで設定したコマンドに送られます。現在の設定が不明な場合は

で調べることができます。おそらく、設定していない場合はlessが標準のページャとして使用されていると思います。

標準のlessは長い行を折り返してくれないので、

gitless

こんなかんじで、長い文は右側にはみ出してしまって見通しが悪いです。

.gitconfigに

と設定することで、

gitlessr

長い行は自動的に折り返してくれるので見通しが良くなります。

git diff –word-diff

長い行も一度に表示できるようになって少し見通しが良くなったとはいえ、上記のdiffでは結局どこが変わったのか調べるのはかなり大変です。

を使うと

gitworddiff

変更になった部分だけをハイライトして表示してくれます。知っていると便利なコマンドです。

git commit -v

コミットログの記載画面にコミット内容を表示することができます。

gitcommitv

こんな感じでコミットログ記載部分の下部に今回のコミットではどの部分が変更されたかが表示されます。

git log –graph

僕のおすすめは

です。

gitloggraph

こんなかんじで履歴をコンソール上でグラフィカルに表示してくれます。いろいろ設定オプションがありますが僕は上記を使っています。

もちろん、vim上でgregsexton/gitvを使うという手もあります。

僕がMacBookで必ず使う43のソフトウェア達

macapps

最近良く見かけるのでやってみました。

よくあるやつです。

僕がMacを使っていて、なかったら困るソフトウェアをまとめてみました。

ネットワーク関連

Chrome

Google製のブラウザ。Safariはもちろん便利で速度も十分ですが、個人的にはChromeのほうが好きです。

HTML, JavaScriptの編集をしている時にもデベロッパーツールが役に立ちます。

Chrome拡張: Personal Blocklist

教えてgooやら、goo Wikipediaやらの検索でやたら引っかかるコピーサイトというか邪魔なサイトを表示させないように出来ます。

昔は、Google公式のサイトブロック機能が使えていたのですが、2013年3月からその機能がなくなったので上記拡張機能に移行しました。

Chrome拡張: AutoPagerize

自動で次のページを読み込む拡張機能。1ページ目読み終わる頃には気がついたら2ページ目を自動で読み込んでくれています。

FileZilla

オープンソースのFTP, SFTPクライアントです。Transmitが使いやすいアプリケーションとしてあることはもちろん知っていますが、値段と、FileZillaも十分な機能があるためこちらをつかっています。

もっとMacっぽいインターフェースが好みの方にはCyberduckをおすすめします。

グラフィック関連

Picasa

Google製の画像管理ソフト。いつになったらRetinaに対応するのか。

iPhoto使えばいいのかもですが、Macを使い始める前からPicasaを使っているのでなんとなく使い続けています。

Pixelmator $14.99(¥1,300)

AppStoreで。シェアウェアですが、1300円以上の価値は確実にあります。簡単な画像編集からかなり凝ったことまでなんでも行うことができます。チュートリアルも各種充実しております。

もともとはこんなふうな画像が

org

ほぼワンクリックで

cmyk comic crystal lightleak  page sepia vintage

こんなかんじでいろいろな加工をすることができます。フィルタのみではなくて通常の加工も高機能です。

castleorg

こういう普通のデジカメでとった写真も

quickmask

クイックマスクなんかも使えて詳細な編集も簡単に行うことができて

newcastle

背景だけ変えてみたりも簡単に。

しかもGPUを利用しているので動作が軽快です。シェアウェアではありますが特にお勧めです。

GIMP

Xを使用しなくてもCocoaのみで動作するようになってより動作が軽快になりました。Pixelmatorと同じ事ができますが、いかんせんインターフェイスで損していますよね。とはいえ、高機能で大変使えるソフトウェアであることには変わりありません。

ImageOptim

PNGファイルのサイズを画質そのままに小さくすることができます。インターネットで共有するファイルは必ずこれを通すことにしています。

imageoptim

起動するとこんなウィンドウが出るので、そこにファイルをドラッグ&ドロップするだけ。

imageoptim2

少々時間はかかりますが、いくつかのツールがバックグラウンドで動いて、画質そのままにファイルを小さくしてくれます。ファイルによっては半分以下のサイズになります。

JPEGmini

AppStoreで。JPEG画像の圧縮ではImageOptimよりこちらに軍配が上がります。

一日に20枚まで限定のJPEGmini Liteがありますのでまずはそちらをおすすめします。画像のファイルサイズはかなり小さくなりますが、ピクセル等倍では全く画質の変化はわかりません。(拡大するとさすがにわかりますが。)

Softmatic ScreenLayers

AppStoreで。いつまで無料なのかな?

Macは標準で「コマンド⌘ + シフト ⇧ + 3」で画面のキャプチャをとることができます。それで撮れるのは

screencaps

こういう普通の一枚絵ですが、Softmatic ScreenLayersではウィンドウををレイヤごとに分けて保存出来ます。

同じ画面を撮っても、

layers

こんなかんじで、ウィンドウごとにレイヤが分けられて保存されます。(レイヤ名が文字化けしますが…)

ウィンドウごとに加工することが出来るので、

pictures

こんな加工をしたり、必要なウィンドウのみ取り出したり簡単にすることができます。

マルチメディア

Audacity

オープンソースのオーディオエディタ兼レコーダー。録音の一部分だけ取り出したり、クロスフェードさせたり、ミキシングしたり色々できます。

audacity

こんなふうに波形をみながら音量を調整させたり複数トラックを重ねたり・・・

spec

スペクトログラム表記を行うこともできます。

MuseScore

楽譜エディタです。オープンソースの楽譜編集ソフトウェアでは1番の選択肢になります。

有償ソフトウェアであるFinaleには演奏能力の点では負けてしまいますが、楽譜の綺麗さはかなりいい線言っていると思います。Finaleはバージョン間の互換性が著しく悪く、例えば2012で一旦保存してしまうと2011には戻れなくなってしまいます。趣味程度の使用では毎年のバージョンアップはきついし、使用者間のバージョンが違うとファイルの共有ができない点が強く不満です。Finale NotePadという簡易版がありますが、少し複雑なことをしようとするとすぐギブアップになります。

musescore

MuseScoreの画面はわかりやすく、音符を並べていく感じなので楽譜を描くのは簡単です。その場でプレイバックもできるので音の間違いにもすぐに気がつくことができます。

earwax

出力される楽譜も実用十分な画質です。そのまま印刷したり、pdfにすることもできます。スコアからパート譜への変換も可能です。一部スラーが音符にかぶっていたりする部分がありますがこれも手動で微調整することができます。

また、音の再生には好みのSoundFontを使用することができます。デフォルトで入っているサウンドフォントは配布時のサイズなどを優先していることもあり、お世辞にも音がいいものではありません。

(Safari, Chrome, IEで再生可能)

サウンドフォントを変更すると・・・

ここまで音が変わります。

Firefoxでは上記は再生出来ません。ごめんなさい。

LineIn

指定したInputデバイスとOutputデバイスを接続するアプリケーションです。本来の使い方は、マイクを接続してその音を特定のスピーカーから流す、という用途などだと思います。

が、僕の使用方法は少し違っていて、ヘッドフォンをしていても周りの音を聞こえるようにするために使用しています。遮音性のよいヘッドフォンだと周りの音が聞こえません。そのため、電話がなっているのに気が付かずに取り損ねてしまうといったことがあります。

linein

Inputに内蔵マイク、Outputにデフォルト出力を選択すると、通常の出力はそのままに、それに重ねて外の音を聞くことができます。

ファイル管理・システム

XtraFinder

Finderをタブ対応にしてくれるのと、Cut (コマンド⌘ + X)を使用可能にします。ファイルを整理していてウィンドウを開きすぎてごちゃごちゃしてくるので。

MavericksではFinderはタブ対応になる予定とのことです。

NXWine

MacOS用の Wine バンドルです。

どうしてもWindowsアプリケーションを使わないといけないときのために。特殊な自己展開形式や昔のアプリケーションで代替が効かない時に使っています。VMWareも持ってはいるのですが、可能ならこちらで済ませています。

Secrets

secrets

Macの裏設定を環境設定から変更することができます。defaults write…なんかで地味に一つ一つ変更することもできますが、GUIで変更できたほうがやっぱり便利ですよね。

iStat Menus (16$)

少々お高いですが。

iStatMenus

メニューバーに常駐してネットワークやらCPUやらの状態を監視できるアプリケーションです。

「なんかファンが回り始めたけど後ろでなんか動いてる?」とか「ネットが急に調子悪くなったけどちゃんと通信できてる?」とか「Chromeがどのくらいメモリ占領しているかな?」なんてところを一発で確認できます。もちろん、アクティビティモニタやらなんやらで同じ事をすることもできますが、クリックひとつで知りたいことが分かるところにこのアプリケーションの魅力があります。

ditto

あまりメジャーではありませんが、Mac OS Xの標準コマンドです。本来の使い道はリソースフォークなんかを保持したままコピーすることの出来る、いわばMac OS専用のちょっと賢いcpコマンドです。

が、このコマンドのすごいところは、そんな所ではなく、HFS+の透過圧縮機能を効かせることが出来るところなのです。

とすることで透過圧縮機能を有効にすることができます。Finderやその他アプリケーションからはサイズ含めて通常通りに見えていますが、ディスク上のサイズだけ節約してくれます。どうしてもディスク上に置いとかなければいけないけれども、それほどアクセスする頻度が高くないファイルはどんどん圧縮してしまいます。

うまく圧縮できない場合は、brew install afsctoolでインストールできるafsctoolを使用して

とするとスムーズです。どれだけ圧縮できたかも

で確認できます。

CUI

TotalTerminal

CUIソフトウェアを使うのにはターミナルソフトウェアは避けられません。iTerm 2派の人が多いのでしょうか?

Snow Leopard以降、インストール済みのTerminalも十分な機能があると思っています。半透明にもできるし、ANSIカラーも変更できるよ。

もしTerminal派の人はTotalTerminalのインストールすることをおすすめします。特定のキーストローク(例えば、F12とか、コマンド⌘ 2度押しなど)でターミナルを表示されるソフトウェアです。要はGuakeのような動作をできます。おすすめです。

Homebrew

ずっとMacPortsを使用していましたがSSDのMacBookPro Retinaにマシンを買い換えた際に、専有容量の少なくてすむHomebrewに乗り換えました。

zsh

プリインストール済みです。まだbashお使いの方はぜひお試しを。

zshrcをこちらに。エスケープ文字列が化けてたりするのでそのままでは動作しませんがなにかの参考に。

screen

プリインストール済みです。もちろんHomebrewから新しいのを入れてもいいのですが、僕はもともと入っているものを使用しています。

screen

screenrcは少しカスタマイズしており、ペインをタブ風に見せたり、最下段にOSや現在バックグラウンドで稼働中のアプリケーションが表示されるようにしています。

atool

brew install atool。lzh, gzip, rar, 7zなど、いろいろなアーカイブを一つのコマンドで扱うことができます。”aunpack archive.zip”や”als archive.lzh”などといったコマンドで形式を気にせずに作業を行うことができるので便利です。

sl

brew install sl。「あれ、今何すればよかったんだっけ?」となったときにとりあえず”sl”と実行して仕切り直ししています。

htop

brew install htop-osx。topの代わりに使っています。見た目がtopよりわかりやすくてかつ使いやすいですね。

htopnew

nethack

brew install nethack。完全な息抜き用ですね。blessed +2 gray dragon scale mail。

Mosh: the mobile-shell

brew install mosh。不安定な回線を使わざるをいけないときに役に立ちます。

プログラミング

Xcode

こいつだけ入れてもコマンドラインツールは自動で入りません。不便です。後から別でインストールさせる必要がある模様です。brewを使用するためにも必須です。

コマンドラインツールのみをインストール出来る様子。GUI要らない人はこっちのほうが小さくて便利かもしれません。

git

Command Line Tools for Xcodeをインストールすれば自動でインストールされます。Xcode 4.6にはgit version 1.7.12.4 (Apple Git-37)が付属しています。

もちろんbrew install gitすれば新しいバージョンも入れることができますが、困っていないので入れていません。

clang

Command Line Tools for XcodeにApple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)が付属しています。

エラーメッセージが親切・C++11に対応などの点を気に入ってデフォルトコンパイラとしてこちらを使用しています。

SourceTree

MacまたはWindowsで使えるGit, Mercurialのクライアントです。

sourcetree

普段の作業はCUIのほうが楽ですが、込み入った作業をする時や複雑なMergeを確認する時はGUIのほうが見渡しが良いです。

SourceTreeは数あるGUIのGitクライアントの中では最も優れていると思います。

エディタ

vim, MacVim

vimは例によって最初から入っているやつです。最初から入れている奴はrubyやらperlやらは使用出来ませんのでその辺が不満な方はbrew install vimに–with-perlやら–with-rubyをつけて新しいものを入れれば幸せになれると思います。

MacVimはbrew install macvimでインストールできます。ただし、日本語の取り扱いに甘い部分があるので、もしbrewで完結させることにこだわりがなければmacvim-kaoriyaをインストールしたほうが幸せになれます。

EmacsやらSublime Textやらいろいろ試しては見ましたが結局は手に馴染んだvimに戻ってしまいます。

vimはカスタマイズすればするほど手に馴染むすばらしいエディタです。逆に言うと新規で使いはじめるにはハードルが高く、そしてカスタマイズしないとなかなか使いにくいエディタなのかもしれません。

いちおう.vimrc.gvimrcをおいておきます。なにかの参考になれば。

vim拡張: Vundle

vim拡張の管理プラグインです。導入に関してはHack #215: Vundle で plugin をモダンに管理するを参考に。プラグイン管理を手動でやっていたころと比べると労力が全然違います。

unite.vimを使っている人はNeoBundleを使ったほうが良いと思います。

vim拡張: gitv

vim-fugitiveも合わせてインストールが必要です。

gitv

コミットの一覧とその変更内容などを表示することができます。ファイル別に表示することも可能。

GUIで作業する時はSourceTreeを使ってもいいですが、ちょっとした作業やサーバー上での履歴のチェックではこれが一番便利です。

vim拡張: syntastic

ファイルを保存した瞬間に文法チェックをしてくれて、おかしな部分を指摘してくれます。

cppcode

たとえば、こういうソースコード。変数iのスコープはfor文の中のみに限定されるので、その後のprintfで使っているのは規約違反です。この状態で:wすると・・・

cpperror

エラー部分に>>マークがついて、赤く光ります。また、何がおかしいのかも情報として最下部に表示してくれます。

GUIのVimだと

gvim

エラー部分にマウスカーソルを持って行くと、情報がポップアップで表示されます。

対応している言語も多岐に渡っていて、

php

phpとか

perl

perlとか

html

なんとHTMLにまで対応しています。

コードをとりあえず書いてしまって、その後まとめて実行を試す人も多いと思いますが、syntasticを利用すれば保存のたびに最低限の文法チェックをすることができます。

vim拡張: Quickrun

:QuickRunで、現在開いているファイル(バッファ)をその場で実行することができます。

quickruncpp11

右画面の編集中のファイル、左画面に実行結果が表示されます。設定しておけば上のようにC++11だって実行することができます。

Google日本語入力

Input Method Editorなのでここに。ことえりもなかなか賢くなってきていますが、Google日本語入力のマニアック単語変換率には負けます。

  • スリ・ジャヤワルダナプラ・コッテ
  • 空条承太郎
  • 離散コサイン変換
  • X線結晶構造解析
  • 特発性血小板減少性紫斑病
  • 播種性血管内凝固症候群

全部変換出来ます。省入力候補に出てきます。

ぎゃくに「師長(しちょう)」とか「腫瘤(しゅりゅう)」とか変換できて当然だろ!?っていう単語が変換できなかったりします。長らく変換できなかった「聴診(ちょうしん)」が最近になってやっと変換できるようになっているので少しずつ改善してきているんでしょう。

仕事用

Mendeley Desktop

フリーの文献管理ソフトウェアです。pdfファイルをマシン間で共有したり、参考文献リストを各種学会の記載方法に基づいた形式で出力することができます。同種のソフトウェアだとEndNote使っている人も多いですよね。

mendeley

とりあえず気になる論文をMendeleyに入れといて、検索したり、注釈をつけながら読んだりするのが便利です。最近になってやっとRetinaディスプレイに対応したのでより見やすくなりました。

OsiriX

医用画像に特化した画像処理ソフトウェアです。

発音は「オザイリクス」ですが、僕はお尻といいたいので「おしりっくす」と呼んでいます。

このアプリケーションがあるからMacを使っているという医療従事者もいるという噂も。3D volume renderingもreslicingもなんでも出来ます。

R

統計解析用のソフトウェア/言語です。

公式サイトからダウンロードすることもできますが、僕はbrew install rでインストールしています。

t検定やANOVAといった統計処理には欠かせません。この分野のソフトウェアではSPSSが有名ですが、Rを使っている論文も時々見かけます。

統計だけではなく、グラフの描画も得意なソフトウェアで

Rgraph

Excelで描こうとするとかなり面倒なグラフも簡単に描くことができます。Mac上で日本語が入ったPDFを作るのはちょっと設定が必要だったりするのでそれがちょっと残念です。

ぼくは最初はRによるやさしい統計学を読んで勉強しました。

Maxima

数式処理ソフトウェアです。僕もまだ使いこなせていないですが・・・。

ある集団の中で個体がどのあたりに存在するかを表記する方法として「パーセンタイル」と「SDスコア」を用いることがあります。例えば、予定日ちょうどに生まれた男の子(初産)の体重が3535gだった時、その子の集団での位置は90%tile, +1.3SDと表記することができます。

体重が正規分布すると考えた場合、正規分布自体は

reg

で表現出来ますので、

percentile

と表現出来ます。上記の式を自分で展開するのはかなり至難の業ですが、Maximaを使えば

maxima

一瞬で、シンプルな式に展開してくれます。

TeX (MacTeX)

brew info texとすると・・・

というわけでMacTeXを使用しましょう。日本語を使用するためにはちょっとだけ設定が必要です。

すなおにMicrosoft Wordを使えよ、という意見もあると思いますが、TeX(LaTeX)は、

  • テキストベースのファイルなので、gitやdiffとの相性がすごくいい
  • vimで編集できる
  • Rやなんかで図表を再作成した際に、コマンド一つで新しいファイルを再生成できる
  • やっぱり出来上がりの印刷物が綺麗である

こともあり使用継続中です。とはいえ、他人との交換性は著しく悪いので、自分一人で完結できない場合はWordのお世話にならざるを得ない時もありますが・・・。

こんな感じの出力が生成されます。

tex

うーん、やっぱり組版はWordより断然綺麗ですよね。

ぼくは[改訂第5版] LaTeX2e 美文書作成入門を一応読みましたが、ネット上にもいろいろな情報があるので必ずしも本がなくても使えるようになると思います。

まとめ

と、いうわけで少し偏りがありますが、いろいろなソフトウェアを紹介してまいりました。

ここに載せたソフトウェアはすべて僕が特におすすめするソフトウェアたちです。ソフトウェア選択の一助となれば幸いです。