2013年12月25日水曜日

スマホのWebブラウザから位置情報を取得する

最近のiOS、Android端末は Geolocation API に対応しているので、Webブラウザ経由で位置情報が取得できる。
ただし、ブラウザ側で許可されてないとダメだけど・・・
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <script>
      function getPosition() {
        navigator.geolocation.getCurrentPosition(
          function(position) { // 取得成功
            document.getElementById("lat").value = position.coords.latitude;
            document.getElementById("lng").value = position.coords.longitude;
          },  
          function(error) { // 取得失敗
            switch(error.code) {
              case 1:
                alert("位置情報の利用が許可されていません。");
                break;
              case 2:
                alert("デバイスの位置が判定できません。");
                break;
              case 3:
                alert("タイムアウトしました。");
                break;
            }
          },
          {
            enableHighAccuracy: true
          }
        );
      }
    </script>
  </head>
  <body>
    <input type="text" name="lat" id="lat" value="" />
    <input type="text" name="lng" id="lng" value="" />
    <input type="button" value="取得" onClick="javascript:getPosition();" />
  </body>
</html>

2013年12月20日金曜日

Google Chrome でフォントサイズを10pxより小さくする

Google Chrome にはフォントを自動で調整する機能が付いているらしく、"font-size:8px;"とか指定しても10pxより小さくはならない。
で、以前は以下のような記述で回避していた。
<p style="
  font-size: 8px;
  -webkit-text-size-adjust: 100%;
">小さい文字</p>
が、意図しない使われ方ばっかりされていたせいで廃止になってしまったんだと。
なので今は以下のような対応をしてみている。
<p style="
  font-size: 8px;
  -webkit-transform: scale(0.8);
  display: inline-block;
  -webkit-margin-start: -10px;
">小さい文字</p>

2013年12月16日月曜日

シェルで文字列比較

シェルで文字列比較をしたかったので。
#!/bin/sh

ARRAY=(aaa bbb ccc abc)

for ITEM in ${ARRAY[@]}; do
  case $ITEM in
    *c)
      # ccc, abc
      echo "cで終わる。"
      ;;
    a*)
      # aaa
      echo "aで始まる。"
      ;;
    *)
      # bbb
      :
      ;;
  esac
done
あと、 if とか case の中で何もしたくない時は「:」を使う。

再帰的にファイル数、ディレクトリ数を取得する

CentOSは1つのディレクトリに最大32000個までしかディレクトリを作れない。
でも作るシステムによってはテンポラリのディレクトリとかが溜まって危ないかもしれないのでチェックスクリプトを作ってみた。

#!/bin.sh

DIR=/home/hoge/

Seek(){
  for ELEM in * ; do
    if [ -d "$ELEM" ] ; then
      # ファイルだけなら -type f
      # ディレクトリだけなら -type d
      CNT=`find "$ELEM" -maxdepth 1 -type d | wc -l`
      if [ $CNT -ge 5000 ] ; then
        # 5000個を超えているものだけ出力
        PWD=`pwd`
        echo "$PWD/$ELEM : $CNT"
      else
        # 5000個を超えていないディレクトリだけさらに再帰的に処理
        (cd "$ELEM";Seek;)
      fi
    fi
  done
}

2013年12月2日月曜日

Windows のコマンドプロンプトで grep を使う

Windows のコマンドプロンプトで grep を使いたかったけど無かった。
どうやら findstr を使うらしい。
netstat -an | findstr 5432

2013年11月15日金曜日

SQLiteでテーブルの存在確認

SQLite でテーブルの存在確認をしたかったのでメモ。
SELECT COUNT(*)
  FROM sqlite_master
 WHERE type = 'table'
   AND name = 'table_name';

ブリしゃぶ

週末に家でブリしゃぶをやってみた。
今回は伏見の酒造、英勲の純米酒で。


具材は白菜、ネギ、大根などの野菜とブリとかそれ系の魚。
まあ今回はブリじゃなくてブリの幼魚の「わかし」とカンパチだったんだけども。
ちなみに大根はピーラーで薄く剥いて使うと美味しい。マジ美味しい。



まずは鍋に日本酒と昆布を投入。
沸騰する辺りで昆布は取り出し、後はアルコールを飛ばす。


アルコールが飛んだら野菜を入れて、後は適当にしゃぶしゃぶしてポン酢で食う。
コレだけで超美味い。そして写真を撮り忘れた。

しめは雑炊がいいかと。
水足して、ご飯入れて、塩振って、卵いれるだけ。これも超美味い。


気分の問題かもしれないけど、雑炊までやるなら土鍋の方が美味しい気がする。

2013年11月14日木曜日

MaxClientsとServerLimit

Apache の MaxClients を増やす時は ServerLimit 以上の値には出来ない。
設定すると以下のようなエラーが吐かれる。
WARNING: MaxClients of 500 exceeds ServerLimit value of 256 servers,
 lowering MaxClients to 256.  To increase, please see the ServerLimit
 directive.
なので場合によっては ServerLimit も変更する必要が有るのだけれど、ServerLimit は graceful では反映されない。
まあ graceful すると以下のようなメッセージで教えてくれるけど。
[warn] WARNING: Attempt to change ServerLimit ignored during restart
なのでこういう時はちゃんと restart するべし。

アクセスされるURLによってログファイルを分ける

Apache でアクセスされるURLによってログファイルを分けたかったので調べた。
ログの設定はよく以下の感じで書いてある。
CustomLog logs/access_log combined
これを例えば /hoge/ 以下にアクセスされたものを別のファイルに出したい時は
SetEnvIf Request_URI "/hoge/" hogelog
CustomLog logs/hoge.log combined env=hogelog
みたいな感じでいける。
ただこれだと access_log の方にもログが出るので、そっちに出したくない場合は
CustomLog logs/access.log combined env=!hogelog
とかしてやるといい。
あとは SetEnvIf は複数指定出来るので
SetEnvIf Request_URI "/hoge/" hogelog
SetEnvIf Request_URI "/fuga/hoge/" hogelog
CustomLog logs/hoge.log combined env=hogelog
とか
SetEnvIf Request_URI "/hoge/" hogelog other
SetEnvIf Request_URI "/fuga/" fugalog other
CustomLog logs/access.log combined env=!other
CustomLog logs/hoge.log combined env=hogelog
CustomLog logs/fuga.log combined env=fugalog
とかも出来る。

2013年11月12日火曜日

ジャストミート

ロケットニュースで紹介されていた生ハムの原木セットが欲しくなって横浜まで行ってきた。
【価格破壊】夢の生ハム原木まるごと・ナイフ・台がセットで1万円! 横浜市中央卸売市場のあまりに安すぎる良心的肉店『ジャストミート』
場所は横浜駅から徒歩15分ちょいの横浜中央市場の関連棟の一番奥。
※ジャストミートのホームページに有る地図だと別の建物にピンが落ちているので要注意。

で、行ってみるとクリスマス向けにアピールしてた。


でも「年内販売本数に限りがあります。」って書いてある。
お店の人に話を聞いたら、予約が殺到して今だと2週間以上待ちなんだって。

とはいえ予約しないと始まらないのでとりあえず予約。
あとはお店から連絡があるのを待つのみと。


店の前には沢山それらしき商品がディスプレイされていたけど、コレ本物なのかしら?

2013年11月11日月曜日

コースター

ビールのコースターがだいぶ集まってきたので、ダイニングテーブルに並べてみた。
透明のテーブルシート的なのを被せているのでこのまましばらく使ってみる。


逆から見るとこんな感じ。


ちなみにほとんどがドイツビールのヤツ。

2013年11月5日火曜日

PHP から Google のハングアウトへメッセージを送信する

XMPPHP という非常に便利なライブラリが有るので、使わせてもらう。
ダウンロードして解凍したら、XMPPHPディレクトリを以下のスクリプトを同じ階層に置いて使う。

<?php

include 'XMPPHP/XMPP.php';
$conn = new XMPPHP_XMPP(
    'talk.google.com',  # ホスト
    5222,  # ポート
    'username',  # 送信者のアカウント
    'password',  # 送信者のパスワード
    'xmpphp',  # リソース
    'gmail.com',  # サーバ(省略するとホストが使用される)
    $printlog=false,  # ログをプリントするか
    $loglevel=XMPPHP_Log::LEVEL_INFO  # ログレベル
    # LEVEL_ERROR, LEVEL_WARNING, LEVEL_INFO, LEVEL_DEBUG, LEVEL_VERBOSE
);
try {
    $conn->connect();
    $conn->processUntil('session_start');
    $conn->presence();
    $conn->message('hogefuga@gmail.com', 'Hello, world!');
    $conn->disconnect();
} catch (XMPPHP_Exception $e) {
    die($e->getMessage());
}

ハングアウトに限らず XMPP に対応したアプリなら連携できるはず。

Linux でフロッピーのマウント

CentOS5 で開発ツールだけインストールしたらフロッピーがマウント出来なかったので・・・

1. マウントポイントの作成
mkdir /media/floppy

2. fstab の編集
vim /etc/fstab

/dev/fd0  /media/floppy  auto  pamconsole,exec,noauto,managed 0 0

3. マウント
mount /media/floppy

ま、今時使うことは無い気はするけど。

Vim で改行コードとか文字コードの確認とか設定

改行コードの確認
:set fileformat?
改行コードの設定
:set fileformat=unix
※unix = LF, dos = CRLF, mac = CR

文字コードの確認
:set fileencoding?
文字コードの設定
:set fileencoding=utf-8
※utf-8, shift_jis, euc-jp 等々

Linuxで一括改行コード変換

CentOS だと yum で unix2dos とか dos2unix がインストール出来るのそれを使うと楽。
yum install dos2unix
でもって find あたり使って一括処理してやるとか。
find . -regex '.*\.js' -exec dos2unix {} \;

2013年5月29日水曜日

.NET Framework で WebBrowser コントロールを使用する際に IE のバージョンを選択する

VBとかC#でWebBrowserコントロールを使用する時に、IEのバージョンを指定したい時が有る。
そんな時はレジストリをいじるといいらしい。

32 bit:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
64 bit:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

ここに使用したいEXE名(myapp.exe 等)で新規DWORD値を追加する。
で、以下の通りに値を指定する。

  • 9999 (0x270F)
    • IE9のスタンダードモード。!DOCTYPEは無視する。
  • 9000 (0x2328)
    • IE9のスタンダードモードがベースだが、!DOCTYPEに従う。
  • 8888 (0x22B8)
    • IE8のスタンダードモード。!DOCTYPEは無視する。
  • 8000 (0x1F40)
    • IE8のスタンダードモードがベースだが、!DOCTYPEに従う。
  • 7000 (0x1B58) 
    • IE7のスタンダードモードがベースで、!DOCTYPEに従う。
ちなみに、VisualStudio で開発・デバッグ中にこの機能を有効にしたい場合は myapp.vshost.exe も追加しないといけない。

2013年4月12日金曜日

Google Map で指定した緯度経度からずらしてアイコンを表示したい

カスタムOverlayViewを使うと出来る。
function custom_marker(map, lat, lng) {
  this.lat_ = lat;
  this.lng_ = lng;
  this.setMap(map);
}

// OverlayView を継承
custom_marker.prototype = new google.maps.OverlayView();
// draw 処理
custom_marker.prototype.draw = function() {
  if (!this.div_) {
    // 出力したい要素を生成
    this.div_ = document.createElement("div");
    this.div_.style.position = "absolute";
    this.div_.innerHTML = "<img src='images/custom_marker.png' alt='' />";
    var panes = this.getPanes();
    panes.overlayLayer.appendChild(this.div_);
  }
  // 緯度経度を Pixel に変換
  var point = this.getProjection().fromLatLngToDivPixel(
    new google.maps.LatLng(this.lat_, this.lng_)
  );
  // 100px ずらす
  this.div_.style.left = point.x - 100 + 'px';
  this.div_.style.top  = point.y - 100 + 'px';
}
// remove 処理
custom_marker.prototype.remove = function() {
  if (this.div_) {
    this.div_.parentNode.removeChild(this.div_);
    this.div_ = null;
  }
}

var cm = new custom_marker(map, 35.689487, 139.691706);

PHPとVB.NETでデータを加工してやり取りする

生データが嫌だけどお手軽にやりたいならビット反転して送るとか。

PHP側
$filename = "hoge.txt";
if ($handle = fopen($filename, "r")) {
  while (!feof($handle)) {
    $s = fread($handle, 1024);
    echo ~$s;
  }
}
fclose($handle);

VB.NET側
Dim filename As String = "hoge.txt";
Dim contents As String = "";
Dim bs(1024 - 1) As Byte
Dim readSize As Integer
Dim fs As New System.IO.FileStream(filename, IO.FileMode.Open, IO.FileAccess.Read)

While True
  readSize = fs.Read(bs, 0, bs.Length)
  If readSize = 0 Then
    Exit While
  End If
  For i As Integer = 0 To bs.Length
    bs(i) = Not bs(i)
  Next
  contents += System.Text.Encoding.UTF8.GetString(bs)
End While
fs.Close()

PHPでマルチバイトを含んだディレクトリのリストアップ

PHPでディレクトリをリストアップして、aタグでパラメータとして渡せるようにしてみる。
<?php

$dir = "/hoge/fuga";
if (isset($_REQUEST["dir"]) && $_REQUEST["dir"]) {
  $dir = mb_convert_encoding($_REQUEST["dir"], "SJIS", "UTF-8");
}
$html = "";

if ($dh = opendir($dir)) {
  while ($entry = readdir($dh)) {
    if (is_dir($dir . DIRECTORY_SEPARATOR . $entry) && $entry !== "." && $entry !== "..") {
      $html .= 
        "<a href=\"dir.php?dir=" . urlencode(mb_convert_encoding($entry, "UTF-8", "SJIS")) . "\">" . 
        mb_convert_encoding($entry, , "UTF-8", "SJIS") . 
        "</a><br />";
    }
  }
}

?><html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <?php echo $html; ?>
  </body>
</html>

HTMLの特定の場所までスクロール

jQuery使うと以下の感じ。
var target = $("#target_element");
if (target) {
  var targetOffset = target.offset().top;
  $('html,body').animate({scrollTop: targetOffset}, 400);
}

iOS端末の縦横判別

JavaScriptでiOSの縦横判別をする。
if (Math.abs(window.orientation) === 90) {
 // 横
} else {
 // 縦
}

PHPでユーザーエージェント判別

$ua = $_SERVER['HTTP_USER_AGENT'];
switch (true) {
 case (preg_match('/iPhone|iPad/', $ua)):
  // iOS
  break;
 case (preg_match('/Android/', $ua)):
  // Android
  break;
 case (preg_match('/MSIE 6/', $ua)):
  // IE6
  break;
 case (preg_match('/MSIE 7/', $ua)):
  // IE7
  break;
 case (preg_match('/MSIE 8/', $ua)):
  // IE8
  break;
 case (preg_match('/MSIE 9/', $ua)):
  // IE9
  break;
 case (preg_match('/Firefox/', $ua)):
  // Firefox
  break;
 case (preg_match('/Chrome/', $ua)):
  // Chrome
  break;
 case (preg_match('/Opera/', $ua)):
  // Chrome
  break;
 case (preg_match("/Safari/", $agent)) && (preg_match("/Win/", $agent)):
  // Windows Safari
  break;
 case (preg_match("/Safari/", $agent)) && (preg_match("/Mac/", $agent)):
  // Mac Safari
  break;
 case ((preg_match("/MSIE/", $agent)) && (preg_match("/Win/", $agent))):
  // Windows IE
  break;
 case ((preg_match("/MSIE/", $agent)) && (preg_match("/Mac/", $agen))):
  // Mac IE
  break;
 default:
  // Other
  break;
}

2013年2月21日木曜日

シェルでコマンドの実行結果の確認

rsync -avz /home/user/source/ /home/user/dest/ >& /tmp/rsync.log

if [ $? -eq 0 ]; then
  echo "成功"
else
  echo "失敗"
fi

シェルからpsql経由でSQL実行

#!/bin/sh

DB_NAME='db_name'

DB_RET=`psql -U postgres -c "SELECT COUNT'(*) FROM pg_database WHERE dat_name = '$DB_NAME'" postgres | cut -d"
" -f3`

echo $DB_RET

PostgreSQLでデータベース名変更

ALTER DATABASE name RENAME TO newname;

2013年2月20日水曜日

rsyncのTIPS

rsyncをSSH経由で使うには、パスワード無しでSSH出来るようにしておく必要が有る。
例えば鍵認証を使う場合は以下のような感じ。
  rsync -avz -e 'ssh -i /home/user/server.key' user@server:/home/user/source/ /home/user/dest/

隠しファイル(.で始まるファイル)を除外したい場合は以下の感じ。
  rsync -avz --exclude=".*/" /home/user/source/ /home/user/dest/

自分の配下以外へのシンボリックリンクのみ、先まで辿ってコピーしたい時は以下の感じ。
  rsync -avz  --copy-unsafe-links /home/user/source/ /home/user/dest/

2013年2月19日火曜日

Google Maps API V3 サンプル

<!doctype html>
<html>
 <head>
  <meta charset="utf-8">
  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
  <script type="text/javascript" src="http://www.google.com/jsapi"></script>
  <script type="text/javascript">google.load("jquery", "1.7");</script>
  <style>
   #map {
    width: 500px;
    height: 500px;
   }
  </style>
 </head>
 <body>
  <div id="map"></div>
 </body>
</html>
<script src="http://maps.google.com/maps/api/js?v=3&sensor=false®ion=JP" type="text/javascript" charset="UTF-8"></script>
<script type="text/javascript">
 //<![CDATA[

 var map;
 
 function init() {
  var latlng = new google.maps.LatLng(35.689487, 139.691706);
  var opts = {
   zoom: 11,
   mapTypeId: google.maps.MapTypeId.ROADMAP,
   center: latlng,
   navigationControlOptions: {
    position: google.maps.ControlPosition.LEFT_BOTTOM
   },
   overviewMapControl:true,
   overviewMapControlOptions: {
    opened: true
   }
  };
  map = new google.maps.Map($("#map").get(0), opts);
 }
 $(document).ready(function() {
  init();
 });

    //]]>
</script>

jQueryで要素の表示/非表示

if ($("#hoge").is(":hidden")) {
  $("#hoge").show();
} else {
  $("#hoge").hide();
}

CSSで透過する

<div style="
  background-color: #000;
  opacity: 0.5;
  filter: alpha(opacity=50);
">
</div>

jQueryのanimateでアニメーション中には処理されないようにする

$("#animation_div:not(:animated)").animate({
  // パラメータ
}, 500);

2013年2月8日金曜日

メールのキューの確認と再送

メールのキューの確認は
mailq
で、再送したい時は
sendmail -q -v
再送の設定なんかは /etc/sysconfig/sendmail 辺りに書いてある。

2013年2月4日月曜日

動画から画像を切り出す

ffmpeg でやると便利
ffmpeg -ss 1 -vframes 1 -i in.mpg -f image2 out.jpg
-ss が開始秒数、-vframes がフレーム位置

2013年1月29日火曜日

Windowsのイベントログから起動・終了時間を取得する

System.Diagnostics.EventLog[] logs = System.Diagnostics.EventLog.GetEventLogs(); 
StringBuilder sb = new StringBuilder(); 
foreach (System.Diagnostics.EventLog log in logs) 
{ 
  if (log.Log == "System") 
  { 
    int cnt = 0; 
    for (int i = log.Entries.Count -1 ; i > 0 ; i--) 
    { 
      if (log.Entries[i].Source == "Microsoft-Windows-Kernel-General") 
      { 
        if (log.Entries[i].InstanceId == 12) 
        { 
          sb.AppendLine(log.Entries[i].TimeGenerated.ToString("[yyyy/MM/dd HH:mm:ss]") + "起動"); 
          cnt++; 
        } 
        else if (log.Entries[i].InstanceId == 13) 
        { 
          sb.AppendLine(log.Entries[i].TimeGenerated.ToString("[yyyy/MM/dd HH:mm:ss]") + "終了"); 
          cnt++; 
        } 
      } 
      if (cnt > 10) 
      { 
        break; 
      } 
    } 
  } 
} 
return sb.ToString();

C#でEval

CSharpCodeProvider c = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.CompilerOptions = "/t:library";
cp.GenerateInMemory = true;
StringBuilder sb = new StringBuilder("");
sb.Append("using System;\n" );
sb.Append("namespace CSCodeEvaler{ \n");
sb.Append("public class CSCodeEvaler{ \n");
sb.Append("public object EvalCode(){\n");
sb.Append("return Environment.ProcessorCount.ToString(); \n");
sb.Append("} \n");
sb.Append("} \n");
sb.Append("}\n");
CompilerResults cr = icc.CompileAssemblyFromSource(cp, sb.ToString());
if (cr.Errors.Count > 0)
{
  MessageBox.Show("ERROR: " + cr.Errors[0].ErrorText, "Error evaluating cs code", MessageBoxButtons.OK, MessageBoxIcon.Error);
  return null;
}
System.Reflection.Assembly a = cr.CompiledAssembly;
object o = a.CreateInstance("CSCodeEvaler.CSCodeEvaler");
Type t = o.GetType();
MethodInfo mi = t.GetMethod("EvalCode");
object s = mi.Invoke(o, null);
return s;

VB.netで画面キャプチャして保存

Dim p As New Point(0, 0)
Dim s As New Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Dim bmp As New Bitmap(s.Width, s.Height)
Dim g As Graphics = Graphics.FromImage(bmp)
g.CopyFromScreen(p, New Point(0, 0), s)
g.Dispose()
PictureBox1.Image = bmp
bmp.Save("C:\***.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

C#でIsNothing

if (obj != null)
{
  //
}

2013年1月28日月曜日

K-9 Mail で outlook.com のメールを設定する

AndroidのK-9 Mailでoutlook.comのメールを使えるよう設定する。

  1. 「アカウント追加」からメールアドレスとパスワードを入力。
  2. 「POP3 サーバ」を選択
  3. アカウント名に「@outlook.com」を追加、POP3サーバに「pop3.live.com」を入力、保護された接続で「SSLを使用する」を選択。
  4. SMTPサーバに「smtp.live.com」を入力、保護された接続で「TLSを使用する」を選択。

Exchange ActiveSync 対応は日本語版バイナリを使用する必要が有るらしい。

https://sites.google.com/site/k9mailja/k9mailja_package

Linuxのファイル削除権限

Linux でそのファイルが削除できるかどうかは、対象のファイルではなくそのファイルが入っているディレクトリの権限に因る。
ディレクトリに書き込み権限(-w-)があれば、ファイルの削除や新規作成が可能。
なのでファイルが000(---------)でもディレクトリが222(-w--w--w-)とかで有れば削除できる。

2013年1月25日金曜日

VB.NET でメッセージボックスを最前面に表示する

MessageBox.Show( _
  "最前面に表示されます。", _
  "", _
  MessageBoxButtons.OK, _
  MessageBoxIcon.Information, _
  MessageBoxDefaultButton.Button1, _
  MessageBoxOptions.DefaultDesktopOnly)

VB.NET で二重起動防止

If Diagnostics.Process.GetProcessesByName( _
  Diagnostics.Process.GetCurrentProcess.ProcessName).Length > 1 Then
  MessageBox.Show("二重起動できません。")
  End
End If

2013年1月24日木曜日

Google Maps JavaScript API V3 で KML の読み込み

jQuery のロードとか含めて以下の感じ。

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1.7");</script>
<script src="http://maps.google.com/maps/api/js?v=3&sensor=false&region=JP" type="text/javascript" charset="UTF-8"></script>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
var opts = {
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(35.00000, 135.00000)
};
map = new google.maps.Map($("#map").get(0), opts);
var kmlLayer = new google.maps.KmlLayer("http://***/***.kml");
kmlLayer.setMap(map);
});
//]]>
</script>

町丁・字等境界のGISデータを取得する

  1. eStat 政府統計の総合窓口にアクセスする。
    http://www.e-stat.go.jp/SG1/estat/eStatTopPortal.do

  2. 地図や図表で見る > 地図で見る統計(統計GIS) > データダウンロード へ進む

  3. [Step1]平成**年国勢調査(小地域) を選択

  4. [Step2]世帯人員別一般世帯数 を選択して「統計表各種データダウンロードへ」を押す

  5. [Step3]地域選択 で取得したい地域を選ぶ

  6. [Step4]境界データを選択 で形式を選ぶ

ShapeかG-XML形式でダウンロード可能。

Apacheでディレクトリのファイル一覧表示をやめたい

Options Indexes FollowSymLinks
とかなってるのを
Options -Indexes FollowSymLinks
にする。

ApacheでBasic認証とIP制限を組み合わせる

.htaccess で以下の感じで。
AuthType Basic
AuthName "Input your ID and Password"
AuthUserFile /var/www/.htpasswd
require valid-user
Satisfy any
Order Deny,Allow
Allow From 192.168
Deny From All
Satisfy any を使って書けばいい。

Macで画面キャプチャ(スクリーンショット)

画面全体
command+shift+3

マウスで指定した部分
command+shift+4

選択したウィンドウ
command+shift+4+space

Facebookのコメント欄で改行するには

Shift+Enter