Macの画面を頑張って広げる

MacBookをはじめとするLaptop型のMacは、単体で開発に使用するとどうしても画面が狭くて辛いです。
特にAirの場合Retinaがないので、コーディング中に:vsplit等すると幅が足りず作業効率が落ちてしまいます。。。
そこで表示領域を広げる方法をいくつか考えてみました。

1. Duet Display

http://www.duetdisplay.com/
iOSデバイスを外部モニタとして使用できるアプリです。手軽に物理的に表示領域が増やせるので、モニタを用意できないとき等とても重宝します。
導入はアプリをiOSとMacにそれぞれインストールして、ケーブルで接続するだけなのでとても簡単です。
似たような他のアプリと比べると、有線の為レイテンシが比較的低いですが、Unityのゲームビュー等ではさすがに表示が追いつきませんでした・・・。自分の環境では、UnityのConsole表示にちょうど良いです。

2. AirServer

http://www.airserver.com/
別のPCをAirPlayのサーバにできるソフトです。サーバとしてはWindows/Mac両方対応していますが、そもそもクライアントとなるMacと別にそれらが一台必要なので、活用できるケースは限られそうです。
Wi-Fiですがなかなかレイテンシが低く、コーディング程度ならさくさくこなせます。そもそも本来の用途と若干違う気もしますが・・・。

3. QuickRes

http://www.quickresapp.com/
1, 2と違って、外部デバイス無しで広げられます。
Macの解像度を設定するツールです。パネルの解像度以上に無理やり上げることができます。
単純な表示領域は広げることができますが、当然パネル自体の画素数は変わらないので、精細さは損なわれます。
文字が読みづらくなるので、場合によっては逆に作業効率がおちてしまいますが、Mac単体で画面が広くなるので気に入っています。

私は最終的に安定性と使いやすさでDuet Displayのみ使用に落ち着きました。
捗ります。

mPDFで作成したPDFのファイル名がおかしい

PHPで簡単にPDFが作成できる「mPDF」では、作成したPDFをAcrobat readerまたはFirefox等のビューアでブラウザ上に表示させることもできるが、ダウンロードダイアログを表示してPDFファイルをダウンロードさせることもできる。
もちろんPDFファイルのファイル名は指定できるが、場合によってはおかしくなる。

基本的な使い方と問題

mPDFを使用するには、mPDFを任意のディレクトリに設置し、呼び出し元でincludeして下記の様に処理する。

include('./MPDF57/mpdf.php'); // パスは環境に応じて変える

$mpdf = new mPDF('ja', 'A4'); // 出力ファイル設定
$mpdf->writeHTML($data);      // pdf内容をhtmlで突っ込む

// 'sample.pdf'というファイル名でダウンロードさせる
$mpdf->Output('sample.pdf', 'D');

このとき、$mpdf->Output();で指定するファイル名が一時ファイルのパスとなる為、同一ディレクトリのpermissionによって上手くいかないことがある(特に何らかのフレームワークを使用している場合)。
その為フルパス指定で任意のディレクトリに書き出すと安全だが・・・

$mpdf->Output('/var/www/html/pdf/sample.pdf', 'D');

などとした場合、ダウンロードされるpdfのファイル名は、
_var_www_html_pdf_sample.pdf
の様にパスを含んだものになってしまう。

原因

mpdf.phpの7480行付近(※バージョンによる)に、ファイル名の設定(レスポンスヘッダ)がある。

			if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) {
				// don't use length if server using compression
				header('Content-Length: '.strlen($this->buffer));
			}
			header('Content-disposition: attachment; filename="'.$name.'"');
 			echo $this->buffer;
			break;

この$nameは$mpdf->Output();の第一引数をそのまま使用している為、ファイル名にパスが含まれてしまう。
ファイル名に関するオプションなどは無さそうなので、この部分の処理を変更するしかない。

パスを含まないように修正する

ヘッダのfilenameに期待するファイル名を記述すればいいので、次のようにした。

			if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) {
				// don't use length if server using compression
				header('Content-Length: '.strlen($this->buffer));
			}
			/* --- ここから --- */
			$wk_name = explode('/', $name);
			if (count($wk_name) > 1) {
				$name = $wk_name[count($wk_name) - 1];
			}
			/* --- ここまで --- */
			header('Content-disposition: attachment; filename="'.$name.'"');
 			echo $this->buffer;
			break;

入力されたパスを’/’でexplodeし、末尾の文字列をファイル名としている。
これでどの階層にあってもフルパス指定でダウンロードできる。

sixcoreのcronでphpを実行する

root権限がもらえずsshも使えないレンタルサーバで一体何にcronを使用するのか以前から不思議だったが、使う機会があった。詰まったのでそのときのメモ。

phpが叩けない

一定時間毎にphpスクリプトをcronで実行しようとしたところ、動作しなかった。
動作しないというのは、phpコマンドの後に>でリダイレクトしてもブランクファイルが出力され、sixcoreのcron通知機能(結果をメール送信)もメールが送信されないという状況。
そしてsixcoreのcronに関するマニュアルは物凄く簡素で情報が少ない。

今回書いたcron設定はこれ。

* * * * * php /home/<アカウント名>/advpro.co.jp/public_html/hoge/test.php

※どのユーザで実行されているかは不明な為省略

ちなみに実際のphpスクリプトでは、一定時間毎にIMAPでメールを取得し、内容をDBに蓄積するというようなことをしようとしていた。

wgetかcurlを使うと動く

phpが何らかの原因により実行できないことが確認できたので、次に試したのはwgetとcron。apacheを介してphpは実行できるので、任意のパスにphpを設置し、次のようなcronを書けば良い。

* * * * * wget http://advpro.co.jp/hoge/test.php

または、

* * * * * curl http://advpro.co.jp/hoge/test.php

出力が必要なときはリダイレクトする(要らなくても多分>/dev/nullしたほうがいい)。
あとは外部から実行されないように、.htaccessで制御しておけばとりあえず要件は満たせる。

実はコマンドが違った

調べたところ、「php53」としておけば普通に動く事がわかった。
cronで ls -la /usr/bin した結果、

-rwxr-xr-x  1 root root    2866944 Mar 24  2014 php
-rwxr-xr-x  1 root root    2878552 Mar 24  2014 php-cgi
-rwxr-xr-x  1 root root       1123 Mar 24  2014 php-config
lrwxrwxrwx  1 root root         27 Aug 28  2013 php5.2 -> /usr/bin/org/php5.2/php-cgi
lrwxrwxrwx  1 root root         26 Aug 28  2013 php5.3 -> /usr/bin/org/php53/php-cgi
lrwxrwxrwx  1 root root         27 Mar 28  2014 php5.4 -> /opt/php-5.4.26/bin/php-cgi
lrwxrwxrwx  1 root root         27 Mar 28  2014 php5.5 -> /opt/php-5.5.10/bin/php-cgi
lrwxrwxrwx  1 root root         26 Aug 28  2013 php53 -> /usr/bin/org/php53/php-cgi

となっていたので、必要なバージョンのリンクを叩けば良い。
今回の例では、

* * * * * php53 /home/<アカウント名>/advpro.co.jp/public_html/hoge/test.php

上記のように変更したところ動作した。
sshログインできないんだからこれくらいはマニュアルに書いて欲しい。

その他

cron設定について色々いじっていたところ、時刻指定は通常のcronと同様に設定できることがわかった。「*」は当然使えるし、「*/n」も使える。恐らく入力値をそのままファイルに追記しているんだろうと思う。
ちなみに、sixcoreのcron設定では分に「*」を指定すると、負荷掛けたら利用制限するという旨のメッセージが表示されるが、「*/1」としておけば表示されない。どっちにしても負荷掛けたら怒られるだろうけど。

ギークなステッカーを貼ろう

最近Macの天板にステッカーをべたべた貼りまくるのがマイブームです。
技術系のイベント等で(行かないのでレポート見るだけですが)貼ってる人がよくいるので、真似をしていろいろ貼っています。

幾つか日本から購入できるサイトを紹介します。

・Unixstickers(http://www.unixstickers.com/)
Unix系(Linuxディストリビューションのロゴ等)や、ソフトウェア、プログラミング言語のロゴ等、種類が多いです。ここではVimステッカーを買いました。全体的に少し高いです。

・GitHub Shop(https://github.myshopify.com/)
GitHubの公式ショップのようです。ステッカー以外にもグラス等グッズを扱っています。

・Raspberry Pi Swag(http://swag.raspberrypi.org/)
RaspberryPiの公式ショップのようです。ここもステッカー以外に色々なグッズやPi本体が買えます。

次は何を貼ろうかと考えていますが、探すと色々出てくるので迷います。
海外発送で結構お金がかかるのと、時間もかかるのですこし躊躇してしまいますが、満足感は得られるのでまた何か買おうと思います。

電気工作のすすめ

こんにちは。

car and dreamerです。

今回のテーマは、電気工作のすすめです。

実は私は小学生の頃、カマボコ板の上にAMラジオを作ったのが最初でそれ以来○○年電気工作を続けてきました。
電気工作と聞いて、何だか難しくて良くわからないし無理と思っているのではないでしょうか。
いきなり、市販の電気製品レベルの物を作ることは難しいですが最近は良いものがあるのです。

例えば、はやりの雑誌の付録モノ。「大人の科学」「電子工作マガジン」などがあります。また秋葉原のパーツショップで販売している「キット」。これは組み立てに必要な部品一式(専用基板付き)と説明書がセットになっています。
これは専用基板付きという点がミソで、ケーブルなどで配線をする必要がなく図解入りの説明書を元に部品を取り付けて半田付けするというものです。

それでも半田ゴテを持っていなかったり、半田付けが難しいという方には半田付け不要の「電子ブロック」があります。これはブロックの中に部品が入っていて、そのブロックをカチャカチャと組み立てるだけで電子回路ができてしまうというモノです。
ブロックですから、ある電子回路が完成したら、バラバラにしてまた別の回路をつくることができます。そういった意味で、電気部品や回路動作を理解するのも良いでしょう。
また電子ブロックはちょっと子供ぽくてという方には、ブレッドボードをお勧めします。ブレッドボートとはボートの上に縦横等間隔に穴が開いています。そこに部品と挿し、それに両端が接続ピンになっているハーネスを使い部品と部品の接続するのです。

市販の完成品を買って使えば良いし、何もそんな手間を掛けて失敗するかもしれないものを作る必要があるのかという考えもあるでしょう。お金を出しさえすれば、何でも手に入れることができる世の中ですが、手間と時間を掛けて多少見てくれが悪いものでも自分で作り、完成させたものは愛着が生まれ、全く同じ機能であったとしてもそれは自分に取って唯一無二のモノになると思います。

最初から高機能・高性能なものではなく、簡単なモノからスタートして、徐々にレベルを上げていけば良いのです。

自分で作ったアンプで聴く音楽はこれまでとは違う良い音を奏でるとは思いませんか。

CUIでCPUベンチ

自宅で趣味に使用していたサーバが壊れたので、Celeron G1820で一台組みました。せっかくなのでπ焼きをしようとしたら、次のようなメッセージが表示され起動できませんでした・・・。

$ ./super_pi
./super_pi: line 1: 11961 Segmentation fault (core dumped) ./pi $1

解決しそうになかったので、代替案を調べました。
timeでpiの処理時間を取るのが良さそうです。piはaptで入ります。

$ sudo apt-get install pi
$ time pi 1048576 >/dev/null

real    0m3.576s
user    0m3.528s
sys     0m0.044s

5,000円でこれなら良いんじゃないでしょうか。
(比較対象がないので正直よくわかりませんが・・・)

ちなみに社内で開発に使用しているサーバ(E2160)はこんな感じでした。

real    0m4.029s
user    0m3.960s
sys     0m0.046s

もうちょっと速いのが欲しいですね・・・。

はじめまして

はじめまして、car_and_Dreamer と申します。
ご縁が合って、2013年9月から新メンバーとして参加させて頂くことになりました。
ブログの投稿も初めてということで、自己紹介をさせて下さい。
前職は、メーカーの情報システム部門に所属し社内情報システムの企画立案、構築、運用、保守を担当。情報システム部門以前は、機器の電気設計及び組込ソフトを開発していました。今回諸事情により、これまでの経験を活かし次のステージを目指すために転職をしました。
初回ということもあり仕事の話はこの辺で終わりにして、趣味の話をします。
私、実は多趣味な人間で今日はその中のひとつである「歩くこと」について紹介します。
抑もなぜ「歩くこと」が趣味になったのか。その最大の理由はハードルが低い事にあります。ジョギングはそれなりのウェアが必要だったり、息が辛かったり。自転車では、この時期寒さが辛かったり。しかし、「歩くこと」は日常的なことで、敷居は低いはずなのです。
自分は平日は難しいので主に休日にしています。多少増減しますが大体行き帰りの全行程3時間ほどに調整しています。大まかな方角は決めますが、明確な目的地は決めずに歩きます。街行く風景や人々を眺め、季節の移り変わりを感じたり、地域の日常を知ることができます。
また、その時々の流れに身を任せて、気になった場所に立寄るなど意外性も楽しみな点です。
足腰のトレーニングになることは当然として、それ以外に仕事で疲れた脳を休めたり、アイディアに煮詰まった時の気分転換にも最適なのです。
靴底の減りが早くなる以外には特別なコストも掛かりません。始めるのでしたら夏の暑い時期ではなく、歩き出すとポカポカと体が温かくなる今の時期がお勧めです。
最後に、告知を。
下記の日程で「DODA転職フェア」に出展します。
2/14(金) 14:00~21:00 DODA転職フェア
転職を検討されている方、就職活動中の方は是非お越し下さい。
当日ご都合が悪く会場に来られない方は、応募フォームからコンタクトをお願いします。
応募フォーム
ではお会いできることを楽しみにしております。

【WordPress】プラグインを追加する(SyntaxHighlighter)

当ブログにSyntaxHighlighterというプラグインを導入したので、ついでに導入方法の解説をします。
SyntaxHighlighterは、その名の通りプログラムの特定の語句をハイライトして見やすくしてくれます。(有名なので説明するまでもないと思いますが・・・。)

1.ダウンロード
プラグイン(zipファイル)を下記URLからダウンロードします。
http://wordpress.org/plugins/syntaxhighlighter/

2.解凍
ダウンロードしたzipファイルを解凍します。
01

3.アップロード
解凍したファイルをディレクトリごとアップロードします。
アップロード先:./wp-content/plugins
02

4.有効化
Wordpress管理画面のプラグインのページで、SyntaxHighlighterの「有効化」リンクを押下します。
03

5.使用方法
プログラムとして表示したい部分を、[[php]~[/php]]の様に言語名で囲みます。
次の様に表示されます。

<?php
if(!empty($hoge)){
	echo 'hoge';
}else{
	echo 'hogehoge';
}
?>

大抵のプラグインは同様の方法で導入できるので試してみてください。