javascript 処理の実行時間を計測する

Javascript

console.timeを使って、処理の実行時間を計測することができます。
下記のように計測したい処理の前に、console.time()を呼び、処理終了後に同じタイマー名でconsole.timeEnd()を呼び出すと経過時間をコンソールに出力します。
引数はタイマーの名前を自由に指定できます。

 console.time('timer_name');
 // 処理
 console.timeEnd('timer_name');

ブラウザでもnode.jsでも利用可能で、非同期処理の計測にも使えます。

mapbox Mapbox Studio で作ったデータをJavascriptで受け取る

Javascript

Mapbox]]ではいろんなことができますが、[[Mapbox Studioで地図がカスタムできたり、地図上にマーカーやポリゴン、線が勝手に引けるのもMapboxの魅力の一つです。

ここでは、MapboxStudio マーカーを置くで作ったような、マーカーやポリゴンの情報を、ではMapbox GLを実装したWeb地図で、どのように取得するかを書いておきます。
(落とし穴もあったので…)

まず、ポリゴンやマーカーの位置情報は、基本的にDatasetsというものの中に入っています。

このわかりにくい、Mapbox API DocumentationのDatasetsを見てみましょう…。
https://www.mapbox.com/api-documentation/#datasets

まずですねー、

 "https://api.mapbox.com/datasets/v1/{username}?access_token=your-access-token"

でDatasetsのリストが取得できると書いてありますが、やってみると、Not foundになります…。

めげずに!!
datasetを指定して、取得する、というのをやってみます。

https://api.mapbox.com/datasets/v1/{username}/{dataset_id}?access_token=your-access-token”

ここで、2つ目の罠が!
このdataset_idというのは、Mapbox Studioの中の、Datasetの画面の次の部分に書かれています。
最初、名前とかかと思ってたw

&ref(dataset_id.png);

すると、レスポンスがJSONで帰ってきます。
全体的なサンプルコードを掲載しておきます。

 function getDatasets(){
 	
 	var dataset_id = "hogehoge";
 	
        var url ="https://api.mapbox.com/datasets/v1/hogehogecompany/" + dataset_id + "?access_token=" + mapboxgl.accessToken;
 
        var xmlhttp = new XMLHttpRequest();	
 	
        xmlhttp.onreadystatechange = function() {
 		    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
 		    	
 		        var result = JSON.parse(xmlhttp.responseText);
 		    
 		    }else{
 		    	
 		    	$("#result").text("指定のデータは存在しません");
 		    }
 	
 		}
 	
 	xmlhttp.open("GET", url, true);
 	xmlhttp.send();
      	
 }

linux iptablesを設定する

Linuxサーバー

基本的なiptablesの設定方法です

すべてのチェインの中身を削除する

 /sbin/iptables -K

ユーザー定義チェインを削除する

 /sbin/iptables -X
 /sbin/iptables -A INPUT -i lo -j ACCEPT
 /sbin/iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
 /sbin/iptables -A INPUT -p 50 -j ACCEPT
 /sbin/iptables -A INPUT -p 51 -j ACCEPT
 /sbin/iptables -A INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
 /sbin/iptables -A INPUT -p udp -m udp --dport 631 -j ACCEPT
 /sbin/iptables -A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
 /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
 /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
 /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
 /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
 /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
 /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
 /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
 /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4949 -j ACCEPT
 /sbin/iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix "[IPTABLES INPUT] : "
 /sbin/iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

設定の確認

 # iptables -L
 Chain INPUT (policy ACCEPT)
 target     prot opt source               destination
 ACCEPT     all  --  anywhere             anywhere
 ACCEPT     icmp --  anywhere             anywhere            icmp any
 ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns
 ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp
 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp
 ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
 ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ftp-data
 ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ftp
 ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
 ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:10022
 ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:smtp
 ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
 ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https
 ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:munin
 LOG        all  --  anywhere             anywhere            limit: avg 1/sec burst 5 LOG level warning prefix `[IPTABLES INPUT] : '
 REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
 
 Chain FORWARD (policy ACCEPT)
 target     prot opt source               destination
 
 Chain OUTPUT (policy ACCEPT)
 target     prot opt source               destination
 

設定内容を保存します

 service iptables save

iptablesを再起動します

 service iptables restart

mod_pagespeedをインストールする

Linuxサーバー

2013/8/27時点の情報です。
mod_pagespeedを導入すると、クライアント側のレンダリング速度は改善されますが、サーバー側のCPU負荷・メモリ消費・Disk I/Oは増加し、純粋なスループットは低下します。
Disk I/O負荷を軽減するため、キャッシュ領域にtmpfsを割り当てたり、memcachedを利用することが可能です。

インストール

下記ページからサーバーにあったパッケージを取得します。
https://developers.google.com/speed/pagespeed/module/download

CentOS 65bitの場合は下記の手順になります。

 wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.rpm
 yum install at
 rpm -U mod-pagespeed-*.rpm

デフォルトでmod_pagespeedが有効で、css/javascript/画像の最適化が
有効な状態になっています。

Webサーバーを再起動すると、mod_pagespeedが有効になります。

設定ファイルの場所

apacheの場合は下記になります。

 /etc/httpd/conf.d/pagespeed.conf

mod_pagespeedの有効・無効切り替え

pagespeed.confで有効・無効を切り替えることができます。
インストール時デフォルトで有効になっています。

有効にする

 ModPagespeed on

無効にする

 ModPagespeed off

統計データ表示

下記URLで統計データを閲覧できます。
http://server-name/mod_pagespeed_statistics

デフォルトではローカルホストしか閲覧許可していないので、必要に応じてpagespeed.confを修正します。

 <Location /mod_pagespeed_statistics>
     Order allow,deny
     Allow from localhost
     Allow from 127.0.0.1
     SetHandler mod_pagespeed_statistics
 </Location>

処理メッセージ表示

下記URLで処理メッセージを閲覧できます。
http://server-name/mod_pagespeed_statistics

デフォルトではローカルホストしか閲覧許可していないので、必要に応じてpagespeed.confを修正します。

 <Location /mod_pagespeed_message>
     Allow from localhost
     Allow from 127.0.0.1
     SetHandler mod_pagespeed_message
 </Location>

キャッシュをクリアする

cssファイル等を変更すると、キャッシュをクリアしないと表示が崩れる場合があります。
下記コマンドでキャッシュをクリアします。

 touch /var/cache/mod_pagespeed/cache.flush

古いキャッシュは、新しいキャッシュで上書きされるようになります。

  • 2013/9/17 キャッシュクリアのファイルパスを訂正しました。

mb_send_mail()でSMTP server response 451のエラーが出る

PHP

PHPでメール送信のプログラムを作っていて、テスト用にあるレンタルサーバーでメール送信をしようとしたところ、

Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 451 See http://pobox.com/~djb/docs/smtplf.html.

というエラーメッセージが出てきて、送信ができなかった。

参照元になっている、下記のサイトを見ると
http://cr.yp.to/docs/smtplf.html

メールサーバーがQmailを使用していて、プラス改行とかに原因があるらしい。
裸のLFがダメ(直訳すぎ?)で、CR LFならOKってことだそうで。

いろいろやってみて、メール本文中の \n を削除したらエラーがでなくなりました。
\nはLFだからなんですね。