画面仕様書作成の画面キャプチャで便利なツール

画面仕様書作成時にWEBページのキャプチャ画像がたくさんほしくなります。そんな時、Firefoxのプラグインが便利です。ちなみに、Google Chrome にも便利なのがあるのですが、Chromeは「右クリック+R」(ページの再読み込み)が印刷に割り当てられているため、開発時には使いません。

パワーポイントに貼り付けるのが目的なので、クリップボードへ保存できるものに限定されます。

はてなスクリーン拡張

日本語はうれしいです。クリップボードへのキャプチャもOKです。キャプチャするボタンも表示できました。
残念ながらキャプチャ画像の右端に真っ黒ラインが入ってしまいます。スクロールバーの部分が作ったCSSと相性が悪いのか、、、深入りせず次のを探します。

 

LightShot

おしい。毎回エリア指定しなくちゃいけないです。

 

Webpage Screenshot in Firefox (♥♥♥♥♥)

 ほぼ日本語です。す、すごいですこれ、至れり尽くせりです。編集やら送信やらあんなこともこんなこともできちゃいます。(使わないけど)
コピーで閉じてくれたりと、要件を満たしました。完璧です。

cronでDB定期バックアップ メール添付編

データベースのダンプファイルを、定期的にメールに添付して送信する、という方法です。DBに直接アクセスできる怖さはみんな駆け出しのころ経験してますよね?(僕だけ?)ちなみに、ここ最近では、Zend_Db の$db->delete(); で久々に冷や汗かきました。

/usr/bin/mysqldump --opt -c -h localhost -u root --password=xxxx dbname | zip |  /usr/bin/php5 /home/www/cron/mailto.php -f dbname_dump.zip

cronからの呼び出しはこんな感じです。
で、上で指定した引数はZend_Console_Getoptで受けられます。便利ですね。

mailto.php

<?php
set_include_path(
    get_include_path() .
    PATH_SEPARATOR . '/home/www/libs/Zend'
);

require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);

$opts = new Zend_Console_Getopt('f:');
$filename = $opts->getOption('f');

$address = 'yamashita@nusoft.jp';
$body = $filename;

$mail = new Zend_Mail();
$mail->setBodyText($body);
$mail->setFrom('yamashita@nusoft.jp', 'XServer Cron');
$mail->addTo($address, '');
$mail->setSubject('MYSQL DUMP ' . $filename);
$at = $mail->createAttachment(file_get_contents("php://stdin"));
$at->filename = $filename;
$mail->send();

お試しあれ。なお、Gmailの場合はゴミ箱へ直行するフィルタを作っておけば、30日経過後自動的に削除してくれます。

書いてて思い出しましたが、WEBプログラマーにはもっとわかりやすくてメンテしやすい方法があります。覚えておくと便利です。cronへの登録はこんな感じ。

0 0 * * * wget --spider http://nusoft.jp/dbbackup.php >/dev/null 2>&1

ポイントはリクエストするファイル内で、リクエスト元IP(同一サーバー内なら127.0.0.1 かな)からのアクセスのみ処理対象にすることです。これならいつもの感じなのでわかりやすいですね。

iPhone / iPad アプリの配布方法

アプリの配布は、主に、次のいずれかの方法で行います。詳しくはApple社のWEBサイトをご参照ください。

App Store

不特定多数の人へアプリを配布したい場合は、App Storeで無料配布または有料での販売になります。App Storeへの登録はApple社の審査があります。

iOS Developer Program

社内に配布する場合、または一部のユーザーのみに配布する場合、100台まで開発デバイスとして登録が可能で、これらのデバイスに対しAdHoc配信が可能です。USB接続で直接転送するか、メール等で受け取ったファイルをiTunes経由でインストールすることになります。

また、テスターへの配布は、TestFlightを利用するのが便利です。

iOS Developer Enterprise Program

iOS Developer Programのプログラム内容に加え、組織内の社員やスタッフへワイヤレスで配布することが可能です。そのため、アプリを最新の状態に保つことができます。

UIViewのFrame外に配置した子要素が表示されてしまう

UIViewに子要素を配置。サイズ変更ボタンでサイズ変更!

self.leftView.frame = CGRectMake(0,0,1024.0,120);

と思いきや…。Frame外に配置した子要素が表示されてしまっている…。
どうやら、デフォルトではFrame外の要素も画面サイズ内であれば表示されてしまうようです。

Interface builder で設定する場合は、3番目のタブ「Identity Inspector」の「User Defined Runtime Attributes」に「ClipsToBounds」をType=Booleanで追加しチェックを入れます。

コードから指定する場合は以下のとおりです。

[self.leftView setClipsToBounds: YES];

CSSセレクタの重み 設定スタイルが反映されない時

各セレクタに点数があってその合計点が多いほうの指定が優先されます。

インライン 1000点
id 100点
class 10点
HTMLタグ 1点

#content #main h2 (201点)これを上書きしたくて例えば、
h2.title(11点) と指定しても点数が足りません。
#content #main h2.title(212点)と指定するのがよさそうです。

W3C ここにしっかり書いてありました。

Dreamweaverが気を効かせて表示してくれるセレクタは要注意です。「.index #contents-outer #contents #main #main-inner .menu .box p」とかね。

これを知らないと努力根性の結果、インライン多用しちゃいそうですね。

Google ウェブマスターツール用のsitemap.xmlをリアルタイム表示する

Google ウェブマスターツール用のsitemap.xmlをリアルタイム表示します。
PHPで書きます。ファイル名「sitemap.xml.php」としますので、まず.htaccessの設定です。

.htaccess

RewriteEngine On
RewriteRule sitemap.xml$ sitemap.xml.php [NC,L]

 

sitemap.xml.php

<?php

const URLROOT = 'http://nusoft.jp';
$files = getFiles("");

$urls = array();

foreach($files as $file){
	if(!preg_match('/_hidden_dir/i', $file)){ //対象外を設定します
		$urls[$file]['lastmod'] = date('Y-m-d',filemtime($file));
		$urls[$file]['loc'] = URLROOT . '/' . $file;
	}
}

echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
echo '<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">' . "\n";
foreach($urls as $url){
	echo '<url>' . "\n";
	echo '<loc>' . $url['loc'] . '</loc>' . "\n";
	echo '<lastmod>' . $url['lastmod'] . '</lastmod>' . "\n";
	echo '</url>' . "\n";
}
echo '</urlset>' . "\n";

function getFiles($dir) {
	$list = $tmp = array();
	foreach(glob($dir . '*/', GLOB_ONLYDIR) as $child_dir) {
		if ($tmp = getFiles($child_dir)) {
			$list = array_merge($list, $tmp);
		}
	}
	foreach(glob($dir . '{*.html}', GLOB_BRACE) as $files) {
		$list[] = $files;
	}
	return $list;
}

あとは、このアドレスをGoogleウェブマスターツールに登録して待つこと1日。完了です。

Hello world!

私たちの技術力は過去ご依頼いただいた多くのお客様に育てていただきました。目的地へ向かおうとすればもちろん山あり谷あり、そのたびごとに多くの情報に助けられ、そのほとんどはインターネットで見ず知らずの方が発信されている情報であったことも事実です。ささやかではありますが、ここに記載する情報が、同じ山、同じ谷を進んで行かれる方の助けになれば幸いです。