MacOSでGitHub – アカウントの作成から初期設定まで

今日、GitHubというサービスを始めて使った。

Githubとは、分散リポジトリのクラウドサービスで、まあ、簡単に言うとオープンなSubversionって感じ?

ちょうど「株式会社はてなの開発戦略」というプレゼンテーションで紹介されていたので、以下のとおりご紹介。

[slideshare id=1023281&doc=deb2009-1234499749924070-2]

アカウントを作成する

GitHubには0.3GBまで保存できる無料アカウントが用意されており、他にもディスク容量等によって、いくつかのプランがある。(フリーミアムなのだ!)

無料アカウントを作成するには、以下のページで登録する。

アカウントの詳細を登録する

ここまでの作業でとりあえずログインはできるようになるが、以下のページでURLや名前などの公開情報や、ファイルをコミットするための公開鍵を設定できる。

公開鍵は後述するので、とりあえず、それ以外の情報を登録しておく。

ちなみに、このページで「Email」を登録すると公開されてしまうので要注意!

Your Account – GitHub

公開鍵の作成

以降はMacOSXのターミナルでの作業が中心。

まず、ターミナルで以下のコマンドを入力して公開鍵を作成する。
パスフレーズの入力を求められるので、任意のパスフレーズを入力するか、パスフレーズが不要な場合は、そのままEnter。

ssh-keygen

上記のコマンドを入力すると、.sshというディレクトリが作成され、その中にid_rsaというファイル名の秘密鍵と、id_rsa.pubというファイル名の公開鍵が作成される。

この公開鍵をGitHubに登録するには、以下のコマンドを実行して出力された文字列をコピペして、「SSH Public Keys」のページで登録する。

cat .ssh/id_rsa.pub

gitコマンドのインストールと設定

GitHubは分散リポジトリのウェブサービスなので、ファイルをコミットしたりチェックアウトするためのコマンドが用意されている。

MacOSXでは、MacPortsで提供されているのでそれを利用してインストールする。

MacPortsがまだインストールされていない場合はこの記事をご参照。

sudo port install git-core +gitweb +svn

とっても優しい github の使い方 – ¬¬日常日記 によると、以下のコマンドも実行しておいたほうがいいらしい。

git config --global user.name "Your Name"
git config --global user.email you@example.com

以上、とりあえず、今回はここまで。

iPhoneシュミレーターを使ってウェブサイトをテストする

自分のウェブサイトがiPhoneでどのように表示されるかどうかを確認するには、いちいちiPhone実機で確認するよりも、Xcodeに付属しているシュミレーターを使用した方が手っ取り早い。

Xcodeのダウンロード

ご存じない方のために、Xcodeは、以下のサイトから無償でダウンロードできる。

iPhoneシュミレーターの起動

意外とどこにも書いていないので、わたしも最近まではXcode経由で起動していたのだが、Xcodeをインストールすると、iPhoneシュミレーターは以下のパスに.appがある。

/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications

iPhone Simulator.appをDockに登録しておけば、さら幸せに。

シュミレーターを起動すると、iPhone内のSafariを起動してURLを入力すれば、以下のように普通にウェブサイトが表示されてめでたしめでたし。

あとは、グラブでキャプチャすれば、顧客へのプレゼンもバッチリ。

MacでSMCリセットを行う

先日、愛用しているMacBook ProでBluetoothマウスの接続がいきなり解除された。

電池切れかと思いきや、電池を交換してもダメ。
あれ?とおもっているうちに、Bluetoothキーボードもつながっていないことに気がついた。

さっそくシステム環境設定を開いてみると、あるはずの「Bluetooth」が消えてるじゃん!

というわけで、いろいろ調べた結果、SMC (System Management Controller)というのをリセットすれば良いことを発見した。

SMC (System Management Controller)のリセット

アップルのサポートによると以下のような感じ。

Intel-based Macs:SMC (System Management Controller) のリセット

私のMacBook Proは、バッテリーが取り外しできないタイプのものなので、以下のような手順で行った。

  1. コンピュータを終了します。
  2. MagSafe 電源アダプタを電源に接続し、まだ接続されていない場合は Mac に接続します。
  3. 内蔵キーボードの左側にある「shift-control-option」キーを押しながら電源ボタンを押します。
  4. すべてのキーと電源ボタンを同時に放します。
  5. 電源ボタンを押してコンピュータを起動します。注意:SMC をリセットしたときに、MagSafe 電源アダプタの LED は、状態をそのまま維持するか、一時的に消灯します。

あまり、意味もなくやると良くないと思うので、ハードウエア廻りで不具合が発生した時以外は、試さないようにしましょう。

MacOSXでPDFからJPEG(Automator編)

MacOSXでは、LeopardからAutomatorという機能があります。

このAutomatorとはWindowsでいうマクロのようなものなのですが、本日初めて使用して思いのほか強力で驚きました!

以前からこのブログでもPDFをJPEGに変換するネタは何回か取り上げていたが、何のことはないAutomatorを使用すれば簡単だったではないか!

ということで、Automatorで作成したソフトを公開します。

ダウンロード

ダウンロードして解凍したpdf2jpg.appアイコンにpdfファイルをドラッグアンドドロップをすると、フォルダを選択するプロンプトが表示されるので、フォルダを選択するとPDFがページごとにJPEG画像で出力されます。

なお、このアプリはAutomator.appにドラッグすると編集できますので、練習台としてもご利用ください。

Automatorについて

以下は今回ハマッたこと。

  • 各アクションに「入力を渡さない」のやり方が分からなかった。わかれば簡単で各アクションのタイトルバーを右クリックして「入力を無視する」を選択するだけだった。
  • 「シェルスクリプトを実行する」でシェルスクリプトに引数が渡せなくてハマったが、これは単純にAutomator内の入力エリアにPerlスクリプト等をそのまま書けばよいだけだったのを、外部のスクリプトを呼び出すのだと勘違いしていた。
  • 一部のアクションでは/private/var/folders以下にテンポラリフォルダを作成するのだが、バグ等でそのフォルダが残ったままになると次回以降実行が中断される。そのためコマンドラインでフォルダを削除する必要があった。(たぶん再起動等でも自動的に削除される?)
  • フォルダ名等に「変数」を指定する方法が分からなかった。これも下にある枠内からドラッグ&ドロップすればOKだった。

Automator内のアクションには、Perlスクリプトを直接書き込んだりもできるので、かなり利用範囲が広いかもしれませんね。

MacOSX(Snow Leopard)でPDFからテキストを抽出する

まずはじめに

PDFからテキストを抽出するには、pdftotextというコマンドをインストールする必要がある。

pdftotextをインストールするには、MacPortsが簡単なのであらかじめMacPortsをインストールすること。

MacPortsのインストールは以下のような手順で。

  • Snow LeopardのインストールDVDからXcodeをインストール
  • Snow LeopardのインストールDVDからX11をインストール
  • MacPortsの最新版を入手してインストール

pdftotextのインストール

pdftotextはxpdfというパッケージに含まれているのでそれをインストールする。

sudo port install xpdf

これだけだと日本語がうまく使えないので日本語のライブラリもインストールする。

sudo port install xpdf-japanese

設定

さらに、/opt/local/etc/xpdfrcに以下の3行を追加する。

textEncoding		UTF-8
cidToUnicode Adobe-Japan1 /opt/local/share/xpdf/xpdf-japanese/Adobe-Japan1.cidToUnicode
cMapDir Adobe-Japan1    /opt/local/share/xpdf/xpdf-japanese/CMap

参考

今日読んだ本

ちょっと古い本だけどBookOffで購入した。

なぜおいしいアイスクリームが売れないの? ダメな会社をよみがえらせる3つのレッスン (講談社BIZ)

一見、当たり前のことのようだけどこうやって分かりやすく説明してもらうと大切さを再認識できるいい本だった。

最近涙もろくて、最後のくだりはちょっと涙が出た。

Parallels4に64bit版のWindowsをインストール

いままで使っていたParallels上のWindows XPがどうにも重くなってしょうがないので、ひと思いに64bit版のWindowsをインストールした。

インストールしたのは以下の2種類のOS

  • Windows XP x64 Edition
  • Windows Vista Business x64 Edition

意外で驚いたのは、Windows Vistaがインストール直後は思いのほか軽快に動作したことだった。

ただし、これはぬか喜びで、Windows Updateを何回か繰り返してサービスパックのインストールが完了した頃には、起動に数分かかるレベルまで重くなってしまい、イラっときて削除した。(笑)

おもにWebアプリケーションのテストが目的なので、Vistaとは永久にバイバイだ。

64bit版と32bit版のWindowsの違い

やってみないと分からないもので、意外と互換性にいろいろあった。

互換性も含めた特筆すべき内容は以下の通り。

一部のソフトが2種類インストールされる

IEやMessangerなど一部のソフトウエアが32bit版と64bit版の2種類がインストールされることにちょっと驚いた。

よく見ると、Cドライブ以下のProgram Filesディレクトリも2種類あり、片方はProgram Files (x86)というフォルダ名になっている。

どうやら、32bit版のアプリケーションはこのディレクトリの中に保存されるらしい。

IEは、32bit版がデフォルトのブラウザになっており、64bit版をデフォルトにしたくていろいろと調べたのだが方法が分からなかった。

結局、Flashなどのプラグインが64bit版のIEに対応していないことに気がついたので、32bit版でしばらくは我慢することに。

ドライバの問題

これも考えてみれば当たり前なのかもしれないが、プリンタなどのドライバの互換性に気をつける必要があるようだった。

たとえば、9月に発売されたばかりのHP製のOfficeJet 7000は、Vistaの64bitには対応しているがXPの64bitには対応していないとのことで、インストールできなかった。

今回はParallelsだったからよかったが、そうでない場合は要注意。

その他

弊社の商売上、Webアプリケーションのテストができる必要があるので、以下のソフトもインストールしたが、これらは問題なく動作している模様。(現時点では!)

IE8以外のブラウザでは、[ヘルプ]でバージョンを見ようとするとエラーが出るが、それ以外は問題がなさそうだった。

まとめ

以上、XPの64bit版に関しては、Parallels上ではかなり軽快に動作しているがハードウエアには問題があるので、そこは我慢する必要がある。

Vistaに関しては、実用性ゼロ、ひどく重くてほんとにストレスがたまった。

ところで、なんでこのタイミングでXPとかVista?

WEB開発者がMacをつかうべき理由(2)

前回の記事に引き続きになるのですが、今回はちょっとまじめに。

ちなみに、ここでいうWEB開発者というのは、プログラマやサーバーエンジニアを指していて、デザイナーは含まれていないので悪しからず。

MacOSXは最も安く手に入る商用UNIXである?

正直言ってMacOSX = UNIXと呼ぶのは、つい最近までは正確ではなかったように思う。

少なくとも、現在のSnow Leopard(10.6)の一つ前のバージョンLeopard(10.5)からが正式なUNIXであって、それ以前のMacOSXはあくまでも自称UNIXであった。

と、余談はさておき。

Macでは統合開発環境が使えないからダメ?

PHPやPerlの開発を行う場合、多くの場合テキストエディタかEclipseなどの統合開発環境(IDE)を使用するのだが、私はIDEを使用することは個人的に良しとしていない。

その最も大きな理由が、IDEの使用方法そのものを覚えることが無駄に思えるからだ。
これからプログラマを学ぶ人にとって、このことは大きな負担になると考えている。

実際、テキストエディターから勉強させた方が遥かに早く覚えるという事例を何人も見た。

さらに、各個人々のIDEの設定やプラグイン等を統一させる必要があったりとか煩雑なルール作りが必要で、このことは生産性の低下につながると思う。

したがって、MacOSXを使用しないことの理由に、IDEの選択肢が貧弱であることがあげられるが、このこと自体はデメリットと感じていない。

MacOSX上での開発環境

IDEを使用しないという前提では、MacOSXはWindowsにくらべていくつかのすばらしい利点がある。

  • viやSubversionなどのコマンドが最初からインストールされており即座に利用できる。
  • pearコマンドやPerlモジュールのインストール、ソースのコンパイルなどが、実際のサーバーとほぼ同じように使用できる。(練習ができる!)
  • Apache+PHPがプリインストールされていることに加えて、MySQLも専用のバイナリが用意されている等、Windowsに比べてデフォルトで本番環境に近い。
  • 実際に本番環境で多用するであろうターミナルによるコマンドが充実している。

経験的にいうと、プログラミングの学習を最も困難にしているのは、その学習環境の構築にサーバー構築というさらに高いスキルが求められることだ。

これは、明らかに矛盾している。

そんなときにMacOSXでは、いきなりプログラミングの学習ができるので、これから学習する人にとっては非常にメリットが大きい。

テキストエディタはダメ

実は、MacOSXで開発を行うには、テキストエディタに期待できないことを覚悟する必要がある。

率直に言ってMacOSX用に出ているテキストエディターは、Windowsの秀丸やEmEditorと比べると明らかに劣っている。

有名なJeditも同じくで、EmEditorを使用していた私からみて、とても快適とは言いがたいものがある。
(検索とか文字のエンコーディングの検出精度とかUIとか、はっきり言ってひどい。)

ただし、おもいきってviを使用するようにしたら劇的に改善した。

特にSubversionを使用していると、ひとつのウインドウで作業が完結するのはとても大きなメリットで、CakePHPなどのフレームワークを使用する場合の作業性の快適さはすばらしいと思う。

最後に

この記事ではIDEを使用しないことなどを前提として書いているが、別にIDEを全否定する訳ではない。

たとえば、フレームワークによってはIDEと組み合わせることで高い生産性を確保できるものもあり、そういう場合はWindows+IDEになるのが当然だと思う。

あくまでも、周りのスタッフのスキルや開発環境などに左右されるものなので、どっちがベストかは神のみぞ知るだと思うが、もしteratermを年がら年中使用しているWindowsユーザーはMacOSXを試してみる価値があると思う。

WEB開発者がMacをつかうべき理由

はじめに申し上げておきますが、今回の記事はあくまでもシャレです。

ちょと気分転換と弊社のデジタルカタログ制作サービスの宣伝もかねて作ってみただけです。

すこしでもニヤリとしてくれる方がいれば幸いです。

Macをつかうべき理由 - デジタルカタログ

追伸

Windowsバージョンを作ろうと思ったのだが、本気でネタがない。
本当にMacのほうがWEB開発に向いてるのかな?

Snow LeopardでのMacPorts

MacPortsで以下のようなエラーがでることに気がついた。

dyld: Library not loaded: /opt/local/lib/libjpeg.62.dylib
 Referenced from: /usr/local/bin/pdf2swf
 Reason: no suitable image found.  Did find:
 /opt/local/lib/libjpeg.62.dylib: mach-o, but wrong architecture
Trace/BPT trap

とか

dyld: Library not loaded: /opt/local/lib/libfreetype.6.dylib
Referenced from: /usr/local/bin/pdf2swf
Reason: no suitable image found.  Did find:
/opt/local/lib/libfreetype.6.dylib: mach-o, but wrong architecture
Trace/BPT trap

など。

いろいろと調べた結果、MacPortsでインストールされるバイナリのいくつかはユニバーサルバイナリで、それらのコマンドが別のライブラリを使用する際に、そのライブラリもユニバーサルライブラリである必要があるらしい。

but wrong architectureのあたりがポイント。

ユニバーサルライブラリのインストール方法

ユニバーサルライブラリをインストールするには、以下のように+uiversalと入力すればいいらしい。

sudo port install jpeg +universal

とか

sudo port install freetype +universal

など

twitterのつぶやきを取得して音声出力(MacOS限定)

以下で公開していたソースに「つぶやき」の中に「¥”」という文字を含めることで任意のコマンドが実行できるというセキュリティホールがありました。現在既に修正していますが、万が一すでに試した方は、以下のソースをもとに修正願います。
  • 15行目のダブルクォーテションをシングルクォーテションに変更しました。
  • 49行目の正規表現を修正しました。

ご迷惑をおかけしてすいません。

はじめに!!

以下はMacOSX限定です。
さらに、初めのうちはかなり笑えますが、それ以上のものは得られません。役にも立ちません。

一回目はかなり笑えます。そこだけは保証します。

このスクリプトは?

タイムラインから「つぶやき」を取得して音声で読み上げます。
音声は女性の声ですが、かなり棒読みです。

ところどころ改善の余地はありそうなのですが、それは皆さんにお任せします。

動作環境

  • MacOSX 10.5以上(開発は10.6で行いましたが10.5でも動作するはずです。)
  • Perlおよび以下のPerlモジュール
    • Net::Twitter::Lite
    • XML::DOM
    • LWP::Simple
  • Yahoo日本語形態素解析APIを使用していますので、アプリケーションIDの取得も必要です。
  • SayKana

インストール方法

1)まずはじめに、SayKanaをダウンロードしてインストールしてください。
インストール後は、ドキュメントに従って音声が出力されることをご確認願います。

2)以下のPerlモジュールをインストールしてください。

  • Net::Twiter::Lite
  • XML::DOM
  • LWP::Simple(これはプリインストールかもしれません。)

私の環境では、CPANシェルで問題なくインストールできました。

3)以下のソースをデスクトップ等に設置して、パーミッションを755にしてください。

3)twitterアカウントのアカウント名およびパスワードを12行目および13行目に入力してください。

4)YahooアプリケーションIDを取得して15行目に記述してください。

ソース

#!/usr/bin/perl -wT

undef %ENV;

use strict;
use Encode;
use LWP::Simple;
use Net::Twitter::Lite;
use XML::DOM;

my $twt_user = '';
my $twt_pass = '';
my $yahoo_id = '';
my $api_url = 'http://jlp.yahooapis.jp/MAService/V1/parse?appid=%s&sentence=%s&results=ma';
my $saykana = "/usr/local/bin/saykana '%s'";

my $twt = Net::Twitter::Lite->new(
 username => $twt_user,
 password => $twt_pass
);

my $r = $twt->friends_timeline();

my $n = 0;
foreach (@$r) {
 my $txt = encode_utf8($_->{'text'});
 my $url = sprintf($api_url, $yahoo_id, &enc($txt));
 my $xml = get($url);
 my $kana = &xml2kana($xml);
 print $kana."\n";
 system(sprintf($saykana, $kana));
}

sub enc($) {
 my $str = shift;
 $str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
 $str =~ tr/ /+/;
 return $str;
}

sub xml2kana($) {
 my $xml = shift @_;
 my $parser = new XML::DOM::Parser;
 my $doc = $parser->parse ($xml);
 my $list = $doc->getElementsByTagName('reading');
 my @kana;
 for (my $i=0; $i<$list->getLength; $i++) {
 my $text = $list->item($i)->getFirstChild->getNodeValue;
 $text =~ s/'//g;
 if ($text =~ /^[0-9]+$/) {
 $text = "<NUMK VAL=".$text.">";
 } elsif ($text =~ /^\s+$/){
 $text = ',';
 }
 $text =~ s/\//\\\//g;
 push @kana, $text;
 }
 return encode_utf8(join("/", @kana)).",,,";
}

その他

  1. 空白はコンマに変換して一瞬だけスリープが入るようにしています。
  2. つぶやきとつぶやきの間にはコンマを3つ挿入して長めのスリープが入るようにしています。
  3. シングルクォーテションはsaykanaコマンドにおいてアクセントを意味する記号であることとセキュリティ上の配慮により削除しています。

本来は「。」であるが妥当なのですが、テキストエディタで本スクリプトを編集した際にsaykanaコマンドでエラーが出るため、半角の記号で代用しました。(UTF-8-MACによる問題と思われますが、くわしく検証していません。)

(追記)
よく考えたらUTF-8-MACは関係ないかも、いずれにしろJeditで「。」を入力した場合とvimで「。」を入力した場合で何かが違うみたい。(両方ともUTF-8なんですけど。)

ソースをご覧になるとわかりますが、別にtwitterじゃなくても別のものをしゃべらすのも、それほど難しくないので、適当にお楽しみください。

ライセンス

SayKanaおよびYahoo APIのライセンスは厳守していただけますようお願いいたします。

気に入ってくれた方は、ブログ等で紹介してくだされば、十分うれしい限りです。