ナショナルジオグラフィック3月号はシナイ半島の話が興味深かった

2009年3月31日 00:46 ナショナルジオグラフィック3月号はシナイ半島の話が興味深かった

ナショナルジオグラフィック3月号を、ようやく購入して読了したので、簡単に感想をメモ。(多分もう4月号出てるよね)

今回の特集記事とか、面白かった記事とかの感想をちょっとずつ書いていきます。

まずは、ウナギの回遊を研究されている海洋生物学者の塚本勝巳さんの記事。

恥ずかしながら、そもそもウナギが海で生まれて河を登ってくる、という根本的なことを知らなかったので、そこから感心して読んでました。
なんでも、グアム近くの西マリアナ海域で生まれたレプトと呼ばれる仔魚が、2000キロも旅して日本にやってくるんだとか。

そのニホンウナギの産卵場所をつきとめたのが、塚本さんらしいです。
ぜひ、何故わざわざ2000キロも離れた場所で産卵するのか(あるいは逆に生まれた場所から2000キロも離れて旅をするのか)とか、その辺の進化の謎を解き明かして欲しいです。

続いて、中国の世界遺産・九寨溝の特集。
これは写真メインの記事でしたが、めっちゃくちゃ綺麗ですね。

なんか最近では、中国といえばどこもかしこも汚染されていてヤバそう、みたいなイメージしかないですが、さすがに広い国だけあって、こういう綺麗な場所もあるんだなぁ、という感じ。

次に、カナダのオイルサンドの記事。

またまた恥ずかしながら、オイルサンドという資源が存在すること自体知らなかったので、そこから興味深く読みました。
従来の石油と比較して、相当生産効率の悪い、環境に優しくない資源のようですが、今後の従来型石油の生産量の減少を見越して、オイルサンドの生産に力を入れ始めているんだとか。

なんかイメージとしては、出涸らしのお茶を必死ですすってるようなイメージがあるな。

その次に、ナショジオ英語版記者による、省エネ生活のレポ。

当然、これは省エネを啓蒙する意図で書かれた記事なんだろうと思うんですが、なんか読んでてアメリカ人の省エネへの認識のなさが逆に浮き彫りになったような印象が(笑)。

いちいち記者が、それほど大したことでもないようなことを、凄いことを達成したかのように書いているのが「おまえ今までどんだけ無駄遣いしててん(笑)」とツッコミを入れたくなる感じでした。

というわけで、記者の意図とは別のところで、興味深く読めました。
ナショジオの記事は、結構客観的でなく、記者の主観が入りまくった記事が多いので、記者の思想や意図に共感できるにしてもできないにしても、単に記事を事実として読むのとはさらに別の楽しみ方ができて良いです。

続いて、絶滅の危機に瀕している中南米のジャガーの記事。

動物ものの読み物は無条件で面白いので、当然興味深く読みました。

ジャガーを保護するには、ジャガーの生息地だけでなく、ジャガー達の中南米に渡る長距離の移動と繁殖(遠方の異性と出会うことによる種の多様性の確保?)を可能にする"回廊"と呼ばれる通り道の保護大切だ、とのこと。

ただ、記事の内容だけでは、ちょっと"回廊"の概念が漠然としていて、実体がよく掴めませんでした。僕の想像力が不足しているのかもしれん。

そして、シナイ半島の記事。今回はこれが一番興味深かったです。

いわゆる、ニュースでよく耳にする「ガザ地区」とかあの辺の話ですね。

あのあたりの戦乱のバックグラウンドは、漠然と知ってるような知らないような、という感じだったので、宗教の絡む背景や、エジプト人とイスラエル人とイスラム教徒のベドウィンと呼ばれる人々との複雑な関係を解説してもらえて、ちょっと理解が深まった気がします。

まあどんな背景があったとしても、テロは悪だけど。


大体、今月号はこんな感じでしょうか。
1月号・2月号と比べると、僕の個人的な琴線に直に触れる記事はなくて、全体的なちょっとパッとしない印象ではありました。
それでも、どの記事も面白く読めたんですけどね。

次の4月号では、古代エジプトの男装の女王の記事と、両生類を脅かしているカビの記事がかなり気になります。
また買ってこないとー。

関連するブログ記事
スポンサード リンク
カテゴリー
雑誌
タグ
エコ | オイルサンド | シナイ半島 | ナショナルジオグラフィック | 動物 | 哺乳類 | 自然 | 魚類

コメント(10) | トラックバック(0)

 

Christmas Angel

2009年3月29日 15:12 Christmas Angel

また旧ブログから自作曲の紹介です。
めっっっちゃくちゃ季節外れなタイミングですが、俺はそんなの気にしない。

というわけで、以下、旧ブログに掲載していた文章の転載です。


初めに断っておきます。
こんなタイトルですが、この曲は全然クリスマスっぽくありません

もう何年も前に、友人達がバンドを始めるということでボーカルの女の子が書いた詞に曲をつけて提供したものです。
結局そのバンド自体はうやむやになってしまったようでこの曲は日の目を浴びることはなかったのですが、 他人に提供した曲だったおかげで自分でも信じられないくらい丁寧に書いたスコアが残っていたので、リメイクしてみました。
女の子のツインボーカルということだったので、当時一世を風靡したSPEED(懐)なんかを結構意識して曲を書いたかもしれません。
何だか「Romeo & Juliet」以上に音が多すぎてうるさくなった気もしますが、 メロディは気に入っています。
作った当時は、自分ではクリスマスっぽいと思い込んでいた気も......。

Christmas Angelの続きを読む

関連するブログ記事
カテゴリー
自作曲
タグ
Amethyst | Christmas Angel | MIDI | YU | 自作曲

コメント(3) | トラックバック(1)

 

perl の CGI や PHP でフォーム入力チェックによく使う正規表現のまとめ

perl や PHP で Webアプリケーションを作る際、ユーザーがフォームに入力した値を受け取って、何らかの処理を行なう、というのは基本中の基本です。

ユーザーが入力した値をチェックして、こちらが想定したフォーマットで送られているかどうか確認し、想定外の値ならばエラーを返す、というのも基本中の基本ですね。

というわけで、そんなフォームからのユーザー入力の値のエラーチェックによく使いそうな正規表現をまとめてみました。

以下、perl の方は「$FORM{'data'}」という変数の中に、 PHP の方は「$_REQUEST['data']」という変数の中に、ユーザー入力の値が入っているとします。

半角数字のみを受け付ける場合

フォームに入力された値の中に、「半角数字以外が含まれている場合」にエラーを返すには、以下のようにします。

#-- perl の場合
if($FORM{'data'} =~ /\D/){
	print qq|Error: 半角数字で入力して下さい\n|;
}

#-- PHP の場合
if(preg_match("/\D/",$_REQUEST['data'])){
	print ("Error: 半角数字で入力して下さい\n");
}

ただし、上記の場合はフォーム入力が空の場合はチェックを通ってしまいますので、別途チェックが必要です。

なので以下のように、「1桁以上の半角数字のみ受け付ける」ようなチェック方法の方が良いかと思います。

#-- perl の場合
if($FORM{'data'} !~ /^\d+$/){
	print qq|Error: 半角数字で入力して下さい\n|;
}

#-- PHP の場合
if(!preg_match("/^\d+$/",$_REQUEST['data'])){
	print ("Error: 半角数字で入力して下さい\n");
}

「5桁の数字のみ受け付ける」という場合は、以下のようにします。

#-- perl の場合
if($FORM{'data'} !~ /^\d{5}$/){
	print qq|Error: 5桁の半角数字を入力して下さい\n|;
}

#-- PHP の場合
if(!preg_match("/^\d{5}$/",$_REQUEST['data'])){
	print ("Error: 5桁の半角数字を入力して下さい\n");
}

桁数を変えたければ、「\d{5}」の部分を「\d{10}」とか「\d{6}」とかにすればOK。

「5桁ぴったりではなく、5桁以内(1~5桁)の半角数字のみ受け付ける」という場合は、以下のようにします。

#-- perl の場合
if($FORM{'data'} !~ /^\d{1,5}$/){
	print qq|Error: 1~5桁の半角数字を入力して下さい。\n|;
}

#-- PHP の場合
if(!preg_match("/^\d{1,5}$/",$_REQUEST['data'])){
	print ("Error: 1~5桁の半角数字を入力して下さい。\n");
}

1~5桁ではなく、2~4桁にしたければ「\d{1,5}」の部分を「\d{2,4}」にすれば良いですし、0~10桁にしたければ「\d{0,10}」にすればOK。

半角数字と半角ドット「.」のみ受け付ける場合

要するに、数字だけを入力して欲しいけれど、小数もOKにしたいので、小数点「.」も許可したい、という場合ですね。

半角数字と半角ドット以外が含まれている場合にエラーを返すには、以下のようにします。

#-- perl の場合
if($FORM{'data'} =~ /[^\d\.]/){
	print qq|Error: 半角数字と半角ドット「.」で入力して下さい。\n|;
}

#-- PHP の場合
if(preg_match("/[^\d\.]/",$_REQUEST['data'])){
	print ("Error: 半角数字と半角ドット「.」で入力して下さい。\n");
}

しかし、これも入力が空だと通ってしまいますし、半角ドットが二つ以上あっても通ってしまいますので「小数は許可したい」というニーズを超えてしまっています。

なので「一桁以上の数値からはじまっていて、0~1個の半角ドットと半角数字だけが含まれ、最後は半角数字で終わるもののみ受け付ける」という考え方で正規表現を書くのが良いかと思います。

#-- perl の場合
if($FORM{'data'} !~ /^\d$|^\d+\.?\d+$/){
	print qq|Error: 半角数字と半角ドット「.」で入力して下さい。\n|;
}

#-- PHP の場合
if(!preg_match("/^\d$|^\d+\.?\d+$/",$_REQUEST['data'])){
	print ("Error: 半角数字と半角ドット「.」で入力して下さい。\n");
}

上記は、「一桁の数字か、一桁以上の数字から始まって0~1個のドットを含み一桁以上の数字で終わる」もののみマッチします。

半角英数字のみ受け付ける場合

正規表現で「半角英数字」は「\w」で表すことができます。
また、「半角英数字以外」は「\W」で表すことができます。

2010/07/16追記
flagged utf8 では、「\w」に日本語が含まれるという指摘を頂きました。
参考リンク1 参考リンク2

なので、前述の「半角数字のみを受け付ける場合」の「\d」「\D」を「\w」「\W」に置き換えるだけで基本的には問題ないかと思います。

ただし「\w」には半角アンダーバー「_」も含まれます(逆に「\W」は正確には「半角英数字とアンダーバー以外」ですね)。
なので、半角アンダーバー「_」を除外したい場合は「\w」の代わりに「[A-Za-z0-9]」を使うのが良いかと。
また、「\W」の代わりは「[^A-Za-z0-9]」になります。

たまにあるケースで、ユーザーIDが「数桁の英字+数桁の数字」(ABC0123みたいな)で固定されているケースでは、それに応じた正規表現を書くのが良いでしょう。

例えば「3桁の英字+4桁の数字」の場合は以下のようになります。

#-- perl の場合
if($FORM{'data'} !~ /^[A-Za-z]{3}\d{4}$/){
	print qq|Error: 3桁の英字+4桁の数字を入力して下さい。\n|;
}

#-- PHP の場合
if(!preg_match("/^[A-Za-z]{3}\d{4}$/",$_REQUEST['data'])){
	print ("Error: 3桁の英字+4桁の数字を入力して下さい。\n");
}

英字が大文字のみで統一されている場合は「[A-Za-z]」の部分を「[A-Z]」に、小文字で統一なら「[a-z]」にしても良いですが、大文字と小文字でIDに差異がないのなら、どちらでも受け付けられる方がユーザビリティが良いでしょう。

郵便番号入力欄のエラーチェック

郵便番号は、ユーザーに入力の際にハイフンを省力してもらって、数字7桁のみ受け付けるようにするのが手っ取り早くて楽ですね。

#-- perl の場合
if($FORM{'data'} !~ /^\d{7}$/){
	print qq|Error: 郵便番号を半角数字(ハイフンなし)で入力して下さい\n|;
}

#-- PHP の場合
if(!preg_match("/^\d{7}$/",$_REQUEST['data'])){
	print ("Error: 郵便番号を半角数字(ハイフンなし)で入力して下さい\n");
}

ハイフンありじゃないと困る、という場合は以下のような感じになります。

#-- perl の場合
if($FORM{'data'} !~ /^\d{3}-\d{4}$/){
	print qq|Error: 郵便番号を半角数字(ハイフンつき)で入力して下さい\n|;
}

#-- PHP の場合
if(!preg_match("/^\d{3}-\d{4}$/",$_REQUEST['data'])){
	print ("Error: 郵便番号を半角数字(ハイフンつき)で入力して下さい\n");
}

ハイフンがあってもなくても受け付けるようにしたい、という場合は以下のような感じに。

#-- perl の場合
if($FORM{'data'} !~ /^\d{3}-?\d{4}$/){
	print qq|Error: 郵便番号を半角数字で入力して下さい\n|;
}

#-- PHP の場合
if(!preg_match("/^\d{3}-?\d{4}$/",$_REQUEST['data'])){
	print ("Error: 郵便番号を半角数字で入力して下さい\n");
}

ハイフンがあってもなくても受け付けるようにしておいて、後でスクリプト内でハイフンを取り除いて統一させておくのが一番良いかもですね。

電話番号入力欄のエラーチェック

電話番号も、郵便番号と同じく、ユーザーに入力の際にハイフンを省略してもらうのが楽ですよね。

国内の電話番号は、多分「0から始まる10~11桁の数字」で大丈夫だと思うので、以下のような感じ。

#-- perl の場合
if($FORM{'data'} !~ /^0\d{9,10}$/){
	print qq|Error: 電話番号を半角数字(ハイフンなし)で入力して下さい\n|;
}

#-- PHP の場合
if(!preg_match("/^0\d{9,10}$/",$_REQUEST['data'])){
	print ("Error: 電話番号を半角数字(ハイフンなし)で入力して下さい\n");
}

携帯電話に限定するなら「1文字目と3文字目が0で、全部で11桁の数字」で良いと思うので、以下のような感じでしょうか。

#-- perl の場合
if($FORM{'data'} !~ /^0\d0\d{8}$/){
	print qq|Error: 電話番号を半角数字(ハイフンなし)で入力して下さい\n|;
}

#-- PHP の場合
if(!preg_match("/^0\d0\d{8}$/",$_REQUEST['data'])){
	print ("Error: 電話番号を半角数字(ハイフンなし)で入力して下さい\n");
}

ハイフンありの場合は「市外局番2~6桁-市内局番0~4桁-4桁の数字」(これで合ってるかどうか正直自信ないです)にマッチしているかどうかチェックすれば良いと思うので、以下のような感じ。

#-- perl の場合
if($FORM{'data'} !~ /^0\d{1,5}-\d{0,4}-?\d{4}$/
 || $FORM{'data'} !~ /^.{11,13}$/){
	print qq|Error: 電話番号を半角数字で入力して下さい\n|;
}

#-- PHP の場合
if(!preg_match("/^0\d{1,5}-\d{0,4}-?\d{4}$/",$_REQUEST['data'])
 || !preg_match("/^.{11,13}$/",$_REQUEST['data'])){
	print ("Error: 電話番号を半角数字で入力して下さい\n");
}

「市外局番2~6桁-市内局番0~4桁-4桁の数字」のチェックだけでなく、総文字数が11~13文字であるかどうかもチェックしています。
※単純な文字数チェックは length関数とか strlen関数とか使った方が良いと思いますが、今回は正規表現の記事なので、無理矢理正規表現でやってみました(^^;


他にもまだ色々ありますが、この記事書くのに意外と時間がかかったので、続きはまた次の機会に。

関連するブログ記事
カテゴリー
PHP | perl/CGI
タグ
CGI | perl | PHP | preg_match | 正規表現

コメント(327) | トラックバック(0)

 

「OCEAN」 - B'z

2009年3月27日 23:34 「OCEAN」 - B'z

ちょっとここ最近、久しぶりにB'z熱が再燃してきたので、旧ブログからB'zのシングル『OCEAN』の感想を引っ張りだしてきました。

今でも表題曲の『OCEAN』は結構よく聴くけど、2nd Beat と 3rd Beat はあんまり聴かないですね......。

というわけで、以下は3年以上前の『OCEAN』発売直後の感想です。


B'zのニューシングル「OCEAN」の感想文。
シングルとしては「GOLD以来、4年振りのバラード曲ですな。

 
  1. OCEAN
    基本的に私はそれほどバラードは好きじゃないんですが、この曲はかなり良いなぁと思います。
    サビのメロディがツボを心得た盛り上がり方という感じ。
    結局、今回のシングルの中では一番好きな曲かも。
  2. なりふりかまわず抱きしめて
    今回のシングルで一番激しい曲。
    やっぱりこういうロック調の曲が一番聴き易いです。
    イントロはAEROSMITHの「Theme From Spider Man」(O, Yeah! Ultimate Aerosmith Hits)に似てると弟が言ってた。
    うん、まあ似てないこともない。
  3. Dear my lovely pain
    「もうはなさない」(ARIGATO)とそっくりのポップな曲。
    目新しさは欠片もないですが、まあ爽やかで聴き易い曲なのではないでしょうか。

表題曲の「OCEAN」の出来が予想以上に良かった反面、2nd BEAT・3rd BEATはひねりの無い既存曲の単なる焼き直し的な感じでした。
まあその分安心して聴けますが、それ以上でもそれ以下でもない感じ。

関連するブログ記事
カテゴリー
B'z
タグ
B'z | Dear my lovely pain | OCEAN | なりふりかまわず抱きしめて | 松本孝弘 | 稲葉浩志

コメント(7) | トラックバック(0)

 

ブラウザ上で正規表現のチェックができるエディタ「Rubular」

なんかめちゃくちゃ便利なものを見つけてしまいました。

Rubular スクリーンショット

既にはてブ数が300近いサイトなんで、結構有名だとは思うんですが自分的にはかなり感動したのでご紹介。

ブラウザ上で正規表現のチェックができる「Rubular」というサービスです。

ページ上部の「Your regular expression」という項目に正規表現を入力し、その下の「Your test string」の項目に正規表現でチェックしたい文字列を入力。
すると、自動的に右下の「Match result」の項目にマッチした文字列が強調されて表示されます。

試しに、半角数字と半角の「.」(ドット)以外の文字が含まれているかどうかチェックする簡単な正規表現でテストしてみた結果が、以下のスクリーンショットです。

 

しっかり半角数字と半角の「.」(ドット)以外の文字が強調されているのが分かります。

Rubularで正規表現のテスト(1)

さらに、以下のスクリーンショットのように、日本語の正規表現にも対応していることが判明。これは凄い!

Rubularで正規表現のテスト(2)

この Rubular は、Ruby の正規表現エディタらしいですが、基本的なところは perl や PHP とも変わらないと思うので問題なく使えるかと思います。

個人的に、正規表現はちょっと苦手なので、こういうエディタがあると凄く助かりますね。

関連するブログ記事
カテゴリー
Web制作技術
タグ
perl | PHP | Ruby | 正規表現

コメント(6) | トラックバック(1)

 

『見てわかる ダーウィンの進化論』の感想

利己的な遺伝子』を読んでから、もう一年半くらい経ってるんですが、相変わらずマイブームは進化論とか遺伝子とか、その辺の話です。

この間、出張帰りの移動時間で読む本がなかったので、書店で適当に見繕って買ったのが、この『見てわかる ダーウィンの進化論』です。

この本は、最近ハマっている雑誌『ナショナルジオグラフィック』に過去に掲載された、進化論や遺伝子関係の記事だけを集めて、再編集したものらしいです。

そう言われると、確かに一冊の本として全体を通して見ると、個別の各記事それぞれが孤立していて、ぶつ切りっぽい印象もあるかもしれません。

とは言え、うまい具合に、

 
  1. 進化の証明 - ダーウィンが見つけた進化の証拠
  2. 進化の傑作 - 目、腕、翼はどうやって生まれた?
  3. 進化の歴史 - 地球の生命が歩んできた38億年
  4. 哺乳類の進化 - 繁栄の秘密は女性にあった

という、四つの章にまとまってたかな、とも思います。

『見てわかる』というタイトル通り、写真が非常に豊富なので、文章を読まずにぼんやり眺めてるだけでも楽しめますし、だからと言って、文章が物足りないわけでもなく、非常に読みやすい本でした。

全体としては、ざっくりと遺伝子と進化についての概要を解説しているような内容なので、結構既に知っていることも多かったですが、そんな中で、興味深かったのが、遺伝子のスイッチの役割を果たすという「ホックス遺伝子群」に関する記事でした。

なんでも、遺伝子の構成自体は、節足動物も哺乳類も似たようなもので、「ホックス遺伝子」がどの遺伝子のスイッチを、どれくらいの期間オンにするか、で体の構造なんかが変わってくるとか。

プログラミングっぽく例えると、データベースの中身や、使えるAPIは同じでも、どのAPIを使って、どのデータを利用するか、で出来上がる Webサービスの特徴も全然違ってくる、みたいな感じですかね?

あと、もう一つ、読んでいて意外にも新鮮だったのが、最後の「哺乳類の進化」の章ですね。

進化論とか古生物関連の本を読むことは増えたんですが、カンブリア紀の生物とか、定番の恐竜とか、意外と哺乳類が登場する以前の時代にスポットを当てたものばっかり読んでいたのかもしれません。

なので、恐竜の時代に登場して、人類が生まれる頃までの哺乳類の進化の歴史というのは、知らないことだらけで楽しく読めました。

というわけで、あんまり気合を入れなくても、生物の進化についての話がさっくりと読める、という意味で、なかなか良い本だったなと思います。

関連するブログ記事
カテゴリー
一般向け科学書
タグ
ダーウィン | ナショナルジオグラフィック | ホックス遺伝子 | 動物 | 哺乳類 | 自然 | 進化論 | 遺伝子

コメント(2) | トラックバック(2)

 

「黒祠の島」 - 小野不由美

2009年3月19日 22:14 「黒祠の島」 - 小野不由美

今日は旧ブログから、読書感想文を転載。

というわけで、以下、旧ブログの文章そのままです。
5年前の感想なので、今読むとまた印象が違うかもですね。


読了前

先週の金曜日、仕事帰りに寄った本屋でたまたま見つけて買って帰った「黒祠の島」を、 通勤の行き帰りで読んでます。
やっぱ小野不由美、良いなぁ。
屍鬼」もそうだけど、 この人の書く、閉鎖的な集落の何とも言えない嫌な雰囲気がたまらないですね。

まだ途中までしか読んでないけど、「SIREN」は、 「屍鬼」だけじゃなくて「黒祠の島」からもだいぶ影響を受けてるっぽいのかな。
まあ「閉鎖的な集落に宗教的・政治的圧力で君臨する有力者一族と、その禁忌」というモチーフは王道ですけど。
「SIREN」やる前にこっちも読んでたら、もっと楽しかったかもしれない。

 

読了後

黒祠の島」読了。
かなり面白かった。
けど、クライマックスがちょっとなぁ......。
浅緋が登場するまでは、「実際に現実にあってもギリギリ納得できる」というボーダーライン上で、 嫌な感じの異質な世界が描かれていたのに、浅緋の登場であっさりそのボーダーを越えちゃったという印象。
文学的な雰囲気が、一気に漫画的になったというか。
屍鬼」の場合は、 文庫本で5冊にも渡るボリュームの中で、ゆっくりじわじわとそのボーダーを越えて行ったので、 比較的違和感なく受け止めることができたんですが、「黒祠の島」はその辺りが強引過ぎた感じでしょうか。
惜しいなぁ......。けど中盤まではほんとに雰囲気が秀逸でした。
ミステリーとして読んだ場合は、どうなんでしょうね。もともとあまりミステリーは読まない人なので何とも。

関連するブログ記事
カテゴリー
ミステリ/推理小説
タグ
SIREN | ミステリ | 小野不由美 | 屍鬼 | 推理小説 | 黒祠の島

コメント(9) | トラックバック(0)

 

異国の街で

2009年3月18日 23:05 異国の街で

今回も旧ブログから自作曲の紹介です。

以下、旧ブログに掲載していた文章の転載です。


完全な新曲は約二年ぶり。
Romeo & Juliet」を作ってる最中に、 シタールを使って異国情緒溢れる曲が無性に作りたくなったので、勢いに任せて作ってみました。
勢いだけで作ったと言っても過言ではないので、 アレンジを試行錯誤している間に異国情緒が溢れだしてなくなってしまった気もしないではないですが、 メロディは結構気に入っています。
宮崎アニメのオープニングっぽいイメージをちょっと意識していたかも知れません。

異国の街での続きを読む

関連するブログ記事
カテゴリー
自作曲
タグ
Amethyst | MIDI | 異国の街で | 自作曲

コメント(5) | トラックバック(0)

 

非技術者のためのパーミッションについての解説

Webデザイナー系の人とかに、仕事で Movable Type の設置からカスタマイズまでレクチャーすることとかが多いんですが、その時に、パーミッションについての解説をすると、妙に感動される人が結構な確率でいらっしゃいます。

曰く「いつもよくわからないまま 755 とか 666 とか設定するように書かれているからその通りにしていたけど、その意味がはじめて理解できた」とのこと。

つまり、Webデザイナー系の人は仕事柄、CGI の設置とかは経験してるんで、パーミッションの変更作業自体は普通にやってるんだけど、技術的なことには別に興味ないから、その作業自体の意味を知る機会がないみたいなんですよね。

というわけで、普段は(比較的初心者向けとは言え)技術者向けの記事ばっかり書いてる気がするんですが、今回は(ある程度Webのことがわかっている)非技術者の人が読むことを意識して、記事を書いてみます。

FFFTPのパーミッション変更画面

メジャーな FTP ソフトである「FFFTP」のパーミッション変更画面を例に出してみましたが、CGI の設置とかを経験している方なら、「拡張子 .cgi のファイルのパーミッションを 755 に変更」という文面は、見たことがあるかと思います。
あと、データファイルやログファイルを「666」に変更、とか。

この「755」とか「666」という数字が何を意味しているのかを簡単に解説してみようかと思います。

これらの三桁の数字は、それぞれ左から「そのファイルのオーナー」「オーナーと同グループのユーザー」「その他のユーザー」の、ファイルに対する権限を表します。
※オーナーとかグループって何、というのはとりあえず保留で。

つまり「755」なら、オーナーの権限は「7」、同グループのユーザーの権限は「5」、その他のユーザーの権限も「5」というわけです。
「666」ならどのユーザーも権限は「6」ですね。「644」なら、オーナーだけ「6」で、それ以外のユーザーは「4」です。

じゃあ、この「7」とか「6」とか「4」とかの数字は何なんだ、という話になるわけですが、ここで先ほどの FFFTP の画面をもう一度見てみてください。

「オーナー」「グループ」「その他」の各枠内に「呼出」「書込」「実行」という項目がありますね。
パーミッションとは、各ファイルに対する「呼出(ファイルを読むこと)」「書込(ファイルに書き込むこと)」「実行(プログラムを起動・実行すること)」の権限の設定だったわけです。

で、「呼出」「書込」「実行」の各権限には以下の数字が割り振られています。

  • 「呼出」= 4
  • 「書込」= 2
  • 「実行」= 1

この数字を足し算したものが、「オーナー」「グループ」「その他」の各権限になります。
「呼出」「書込」「実行」全ての権限があれば「4+2+1 = 7」。
「呼出」「実行」の権限があるなら「4+1 = 5」
「呼出」「書込」の権限なら「4+2 = 6」
という具合です。

ここまでをふまえると、「755」というパーミッションが何を表しているのか、何となくわかりますよね。

  • オーナー:「呼出」「書込」「実行」(4+2+1 = 7)
  • グループ:「呼出」「実行」(4+1 = 5)
  • その他:「呼出」「実行」(4+1 = 5)

というわけです。

「644」なら、

  • オーナー:「呼出」「書込」(4+2 = 6)
  • グループ:「呼出」(4)
  • その他:「呼出」(4)

という感じですね。

だいぶパーミッションの謎も解けてきたんじゃないでしょうか。

後は、最初に出てきた「オーナー」「グループ」「その他」という謎の言葉が理解できれば、納得できそうですね。

この「オーナー」「グループ」「その他」の概念については、本格的に説明するとまたややこしくなるので、あくまで「FTP でファイルをレンタルサーバーetcにアップロードして Webサイトを運営してる非技術者な人」向けに、ざっくりとした説明をしておきます。

まず「オーナー」というのは、FTP でファイルをアップロードしたあなた自身のことです。
つまり、オーナーの権限が「7」というのは、読み込み(サーバー上のファイルの中身を見ること)も、書込み(サーバー上のファイルの内容を変更したり削除したり、上書きアップロードすること)も、実行(CGI 等のブログラムを実行すること)も可能、ということです。

「グループ」というのは、同じサーバー内の自分と同じグループのユーザーのことなんですが、そう言われても意味不明ですよね(笑)。
まあ、要するに「自分と同じサーバーにログインできる、自分以外の誰か」であることは間違いないので、この権限は個人的には「0」にしておくのが良いんじゃないかなと思ってます。
例えば、CGI の配布元にパーミッションを「755」と指定されていた場合も「705」にしとく、とかですね。

そして「その他」のユーザーというのは、文字通りなんですが、ブラウザ経由でアクセスしてくる一般ユーザーは、全てここに含まれます。
ちなみに、サイトオーナー自身であっても、ブラウザでアクセスしている時は「その他」のユーザーですので勘違いのないように。
つまり、「755」というのは、サイトオーナー自身はプログラムの実行も読込も書込(削除や上書きアップロードも含む)できるけど、それ以外のユーザーは書込(削除や上書きアップロードも含む)はできない、という設定なわけです。
誰にでも削除や上書きできちゃうと困りますからね。

ただ、CGI 経由でログファイルなどに書き込む際には、その CGI にアクセスしたユーザー(つまりは「その他」のユーザー)に書込権限がないと、ログの書込み等ができません。
なので、ログファイルやデータファイルには「666」(オーナー以外にも書込権限がある)というパーミッションが求められるケースが多いわけです。

ちなみに、「呼出」(読込)権限がない=「403 Forbidden」のエラーが返ってくる、ということになります。

関連するブログ記事
カテゴリー
Web制作技術
タグ
403 | Apache | CGI | FTP | UNIX | アクセス制限 | パーミッション | レンタルサーバー

コメント(16) | トラックバック(0)

 

Romeo & Juliet

2009年3月16日 23:59 Romeo & Juliet

また旧ブログからの自作曲紹介です。
なんと言うか、今聴くとすんごい若さに満ち溢れた曲だなぁ(笑)。

というわけで、以下旧ブログに掲載していた文章の転載です。


私が作曲を覚えて二番目に作った曲です。もちろん元ネタはシェイクスピア。
夢魔」よりも古い曲だったと思います。
バンドをやっていた当時は、「どういう曲をやってるの?」という質問に対して、とりあえずこの曲を聴いてもらう、という言わば私の名刺代わりのような、個人的に自分の代表作的存在でした。
作詞・作曲共に自分で担当した曲の中では最も思い入れのある曲です。
MIDIでリメイクするにあたって「原曲のアレンジをできるだけ崩さないように」というテーマで作ってみました。
もともとが歌物の曲なので、ボーカルのないMIDIではどうしてもカラオケっぽさが出てしまうのですが、できる限り原曲に忠実に、かつ原曲よりグレードアップしたアレンジで作れたかなと思います。
ちょっと音が多すぎる気もしないではないですが。
この曲をリメイクしたおかげで、パイプオルガンとシタールは意外と相性が良い、という新たな発見もできました。

Romeo & Julietの続きを読む

関連するブログ記事
カテゴリー
自作曲
タグ
Amethyst | MIDI | Romeo & Juliet | シェイクスピア | 自作曲

コメント(3) | トラックバック(0)

 

perl や PHP で Excelファイル(xlsファイル)を簡単に出力する方法

perl や PHP で、Excelファイル(拡張子が「.xls」のファイルとか)を出力するために、色々とライブラリみたいなものがあるみたいなんですが、裏技的でちょっと邪道な、もっと簡単な解決方法があります。

Excel で作った文書を保存する際に、「Webページとして保存」というメニューがあることからも想像できますが、Excelで html文書を開いたら、普通に Excel 文書として読めるんですよね。

なので、 perl の CGI や PHP で、Excel 形式で出力しようと思ったら、perl の CGI や PHP でよく出力する Content-type ヘッダ一覧 (MIME-type)を参考に、以下のようなヘッダを出力。

#-- perl の場合
print qq|Content-type: application/vnd.ms-excel\n\n|;

#-- PHP の場合
header('Content-Type: application/vnd.ms-excel');

そしてその後は、普通に html を出力すれば、勝手に Excel が開いて、Excel 文書として出力されます。

Excel を開くのではなく、ダウンロードさせたい場合は、perlやPHPでファイルのダウンロード確認ダイアログを表示させる方法を参考にすれば良いと思います。

#-- perl の場合
print qq|Content-type: application/vnd.ms-excel\n|;
print qq|Content-Disposition: attachment; filename="sample.xls"\n\n|;

#-- PHP の場合
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="sample.xls"');

なお、Excel ファイルを前述のように「Webページとして保存」すると、作成したファイルが html 文書として保存されるので、それを元に編集して perl の CGI や PHP の出力結果を用意すると良いかと思います。
Excel が吐き出す html ソースは凄まじく汚くて読み辛いですが......。

関連するブログ記事
カテゴリー
PHP | perl/CGI
タグ
CGI | Content-Disposition | Content-type | Excel | HTTPヘッダ | Internet Explorer | MIME | perl | PHP | Windows | xhtml | ダウンロード | 拡張子

コメント(541) | トラックバック(4)

 

ボタンクリックでテーブルに行を追加する JavaScript

ユーザー側から任意の複数行のデータをフォームから受け取る場合に、入力フォームのテーブルの行を、ボタンクリックで動的に追加していく処理というのは、結構使えるんじゃないかなと思います。

例えば、以下のようなテーブルがある場合。

<table border="1" cellspacing="0" cellpadding="4" id="table1">
  <tr>
    <th>名前</th>
    <th>住所</th>
    <th>TEL</th>
  </tr><tr>
    <td class="name"><input type="text" name="name" value="" size="10" maxlength="20" /></td>
    <td class="address"><input type="text" name="address" value="" size="10" maxlength="20" /></td>
    <td class="tel"><input type="text" name="tel" value="" size="10" maxlength="20" /></td>
  </tr>
</table>

「insertRow」や「insertCell」を使って、「table1」という ID を持つテーブルに、行を追加します。

var table1 = document.getElementById("table1");
var row1 = table1.insertRow(1);	// 行を追加
var cell1 = row1.insertCell(0);	// 一つ目のセルを追加
var cell2 = row1.insertCell(1);	// 二つ目のセルを追加
var cell3 = row1.insertCell(2);	// 三つ目のセルを追加

「insertRow」「insertCell」の各引数は、何番目の行・セルを追加するかを指定します。
IEでは引数なしでも動きますが、FireFoxでは引数が必須なので注意。

で、最初のサンプルでは各セルに class を指定していたわけですが、追加したセルに class を指定するには、「setAttribute」「className」等を使います。

cell1.setAttribute("class","name");
cell2.setAttribute("class","address");
cell3.setAttribute("class","tel");
cell1.className = 'name';
cell2.className = 'address';
cell3.className = 'tel';

また、セルの中身である input 要素等を入れるのには、「innerHTML」を使います。

var HTML1 = '<input type="text" name="name" value="" size="10" maxlength="20" />';
var HTML2 = '<input type="text" name="address" value="" size="10" maxlength="20" />';
var HTML3 = '<input type="text" name="tel" value="" size="10" maxlength="20" />';
cell1.innerHTML = HTML1;
cell2.innerHTML = HTML2;
cell3.innerHTML = HTML3;

ただ、これだとボタンをクリックされる毎に追加される input 要素の name 属性が、全て「name」「address」「tel」になってしまうので、別途カウンタを回して「name1」「name2」......みたいな感じになるようにした方が良いでしょう。

この辺の事も踏まえたうえでのサンプルコードは以下。

<script type="text/javascript">
var counter = 0;
function AddTableRows(){
	// カウンタを回す
	counter++;

	var table1 = document.getElementById("table1");
	var row1 = table1.insertRow(counter);
	var cell1 = row1.insertCell(0);
	var cell2 = row1.insertCell(1);
	var cell3 = row1.insertCell(2);

	// class の付与は UserAgent によって
	// 挙動が違うっぽいので念のため両方の方法で
	cell1.setAttribute("class","name");
	cell2.setAttribute("class","address");
	cell3.setAttribute("class","tel");
	cell1.className = 'name';
	cell2.className = 'address';
	cell3.className = 'tel';

	var HTML1 = '<input type="text" name="name' + counter + '" value="" size="10" maxlength="20" />';
	var HTML2 = '<input type="text" name="address' + counter + '" value="" size="10" maxlength="20" />';
	var HTML3 = '<input type="text" name="tel' + counter + '" value="" size="10" maxlength="20" />';
	cell1.innerHTML = HTML1;
	cell2.innerHTML = HTML2;
	cell3.innerHTML = HTML3;
}
</script>

<table border="1" cellspacing="0" cellpadding="4" id="table1">
  <tr>
    <th>名前</th>
    <th>住所</th>
    <th>TEL</th>
  </tr><tr>
    <td class="name"><input type="text" name="name0" value="" size="10" maxlength="20" /></td>
    <td class="address"><input type="text" name="address0" value="" size="10" maxlength="20" /></td>
    <td class="tel"><input type="text" name="tel0" value="" size="10" maxlength="20" /></td>
  </tr>
</table>
<form method="GET" action="#">
  <input type="button" value="テーブルに行を追加" onClick="AddTableRows();" />
</form>

実際の挙動

名前 住所 TEL

ボタンクリックでテーブルに行が追加されるはずです(ちゃんと動くかな)。
各行の input 要素の name 属性も、「name1」「name2」......となっていくはず。

関連するブログ記事
カテゴリー
JavaScript
タグ
class属性 | form要素 | input要素 | JavaScript | name属性 | table要素 | td要素 | tr要素 | xhtml

コメント(1284) | トラックバック(2)

 

Sleeping Box

2009年3月13日 23:37 Sleeping Box

旧ブログからの自作曲紹介第四弾です。

以下、旧ブログに掲載していた文章。


私の運営している別のサイトのバナーを作ってくださった方に、お礼として強引に送りつけた曲です(笑)。
可愛らしいイメージのサイトを運営されている方なので、曲もオルゴール調の可愛らしいメロディで作ってみました。
シンプルですが気に入ってます。

Sleeping Boxの続きを読む

関連するブログ記事
カテゴリー
自作曲
タグ
Amethyst | MIDI | Sleeping Box | 自作曲

コメント(6) | トラックバック(2)

 

.htaccess で CGI スクリプトを実行できるように設定する方法

.htaccess を使用して、ディレクトリ単位で CGI の実行を許可する方法の解説です。

CGI スクリプトを実行可能にする

ディレクトリに対して、CGI スクリプトの実行を可能にするためには、.htaccess に以下のように記述します。

Options +ExecCGI

「ExecCGI」(CGI の実行)というオプションを追加(「+」)してる、というようなニュアンスですね。

逆に、

Options -ExecCGI

と書けば、CGI スクリプトの実行ができなくなります。

拡張子「.cgi」を CGI スクリプトであると認識させる

以下のように .htaccess に記述することで、Webサーバーに、拡張子「.cgi」がCGI スクリプトである、と認識させることができます。

AddType application/x-httpd-cgi .cgi

上記以外にも例えば、「.pl」の拡張子のファイルを CGI スクリプトと認識させたければ、

AddType application/x-httpd-cgi .pl

と書けば良いですし、PHP を CGI スクリプトとして実行する場合は、

AddType application/x-httpd-cgi .php

と書けば良いでしょう。

関連するブログ記事
カテゴリー
.htaccess | perl/CGI
タグ
.htaccess | AddType | CGI | Content-type | Options | perl | PHP

コメント(12) | トラックバック(0)

 

新規に Webサイトを制作する際の xhtml テンプレート

テンプレートというほどのものでは全くないですが......。

新規にサイトを制作する際、いつも過去に作ったサイトのソースから、head要素の中身とかをコピペしてくるんですが、外出先とかだとすぐに過去に作ったサイトを出せなかったりして面倒なので、ここにメモっておきます。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-style-type" content="text/css;charset=utf-8" />
<meta http-equiv="content-script-type" content="text/javascript;charset=utf-8" />
<meta name="description" content="■■■ここに概要■■■" />
<meta name="keyword" content="■■■ここにキーワード■■■" />
<meta name="author" content="Tatsuya Abe" />
<link rel="stylesheet" href="styles.css" type="text/css" />
<link rel="alternate" type="application/atom+xml" title="Atom" href="atom.xml" />
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="rsd.xml" />
<title>■■■ここにタイトル■■■</title>
</head>

<body>

<div id="container">



</div>
</body>
関連するブログ記事
カテゴリー
xhtml/html
タグ
head要素 | link要素 | meta要素 | xhtml

コメント(5) | トラックバック(0)

 

Riddle

2009年3月10日 22:56 Riddle

今回も旧ブログから自作曲を発掘してきました。

というわけで、自作曲紹介第三弾です。
以下、旧ブログに掲載していた文章。


ネットで知り合ったとある方に、日頃お世話になっているお礼に贈らせて頂いた曲です。
三拍子の物悲しいメロディが気に入ってます。
前二作が、昔作った曲をアレンジしてMIDIでリメイクしたのに対し、こちらはMIDIでの作曲を覚えた後に作った最初の曲です。
曲を0から作るという作業に数年のブランクがあったので、良い曲が作れるかどうか不安だったりもしましたが、自分でも納得のいく曲に仕上がったと思っています。

Riddleの続きを読む

関連するブログ記事
カテゴリー
自作曲
タグ
Amethyst | MIDI | Riddle | 自作曲

コメント(9) | トラックバック(0)

 

PHP の便利なマルチバイト文字列操作(mb_***)系関数まとめ

プログラミングをする上で、マルチバイト文字(全角文字etc)の扱いというのはなかなか面倒な問題ですよね。
言語側で用意されている文字列操作系関数が、1バイト文字にしか対応していなくて困ったりとか。

PHP のマルチバイト文字操作系関数(mb_ が頭につく関数群)は、そういう意味で非常に便利な存在だといえます。

というわけで、個人的によくお世話になっている(or 今後なる予定の)関数群を、備忘録的にまとめておきます。

mb_check_encoding

文字列が、指定した文字コードかどうか判別する関数。

文字列 $string が utf-8 かどうか判別する場合、

if(mb_check_encoding($string,'UTF-8')){
	print ("\$string は UTF-8 です。\n");
}else{
	print ("\$string は UTF-8 ではないです。\n");
}

みたいな感じで使う。

mb_detect_encoding

文字列の文字コードを取得する。

$encode = mb_detect_encoding($string);

mb_convert_encoding

文字列を、指定した文字コードに変換する。

euc の文字列を utf-8 に変換する場合、

$utf8_string = mb_convert_encoding($euc_string,'UTF-8','EUC-JP');

みたいな感じで使う。

最後の「'EUC-JP'」の部分は、配列や、カンマ区切りの文字列で指定可能。
また「auto」を指定すると、自動判別してくれる(あまりあてにならない)。

mb_convert_kana

全角文字と半角文字の相互変換。

$string = mb_convert_kana($string,option,'UTF-8');

「option」の部分で、変換前・変換後の文字種を指定する。

a
全角英数字を半角英数字に変換。
A
半角英数字を全角英数字に変換。
s
全角スペースを半角スペースに変換。
S
半角スペースを全角スペースに変換。
k
全角カナを半角カナに変換。
K
半角カナを全角カナに変換。
h
全角かなを半角カナに変換。
H
半角カナを全角かなに変換。
c
全角カナを全角かなに変換。
C
全角かなを全角カナに変換。
V
濁点つき半角カナを一文字の全角文字に変換。K や H と併用。

mb_strlen

文字列の長さを、マルチバイト文字も各一文字扱いで取得する。

$length = mb_strlen($string,'UTF-8');

mb_substr

文字列を、マルチバイト文字も各一文字扱いで、指定した長さにして返す。

文字列の頭から20文字目までを取得したい場合、

$substring = mb_substr($string,0,20,'UTF-8');

みたいな感じにする。

mb_send_mail

自動で文字コードを変換した上で、メール送信する。

mb_send_mail($to_address,$subject,$mailbody);

ただし、自動文字コード変換はあまりあてにならないので、件名や本文の文字コードをあらかじめ変換しておくか、PHP 内部のデフォルト文字コードを設定しておく方が良いかも。
詳しくは、PHPのmb_send_mail()関数で送信したメールが文字化けする際の対処法を参照のこと。

関連するブログ記事
カテゴリー
PHP
タグ
mb_check_encoding | mb_convert_encoding | mb_convert_kana | mb_detect_encoding | mb_send_mail | mb_strlen | mb_substr | PHP | 文字コード | 文字化け

コメント(4) | トラックバック(1)

 

秋桜~cosmos~

2009年3月 8日 23:55 秋桜~cosmos~

久々に旧ブログからコンテンツを引っ張ってきました。

昔ブログで公開していた自作曲の紹介Part2です。
Part1(夢魔)はこちら

以下、旧ブログに掲載していた文章です。


もともとは、友人の書いた同名の詩に、数年前に私が勝手に曲をつけて贈ったもの。
詩の作者には気に入ってもらえたと、一方的に思い込んでいます(笑)。
切ないメロディがかなり気に入ってるんですが、それをピアノの独奏にアレンジしてみました。
音色はピアノだけなので、曲に表情をつけるのに結構苦労しました。うん。

秋桜~cosmos~の続きを読む

関連するブログ記事
カテゴリー
自作曲
タグ
Amethyst | MIDI | Violy | 秋桜~cosmos~ | 自作曲

コメント(4) | トラックバック(0)

 

FeedBurner の Google アカウントへの移行に手間取った件

このブログでは、FeedBurnerという、RSSフィードのアクセス解析サービスを利用しています。

この FeedBurner が先日 Google に買収されたんですが、それにより、Google AdSense アカウントで FeedBurner にログインして、自分の RSSフィードに AdSense 広告を掲載できるようになりました。

で、つい先日、その FeedBurner に、かーなり久しぶりにログインしようとしたら、「Google アカウントに移行してください」的なエラー表示が出て、ログインできなくなりました。

仕方ないので、Google AdSense のアカウントでログインして、Google アカウントに移行しようとしたところ、

次のフィード URI は既に使用されています:abe-tatsuya

というエラーが出てしまい、移行できませんでした。

色々とググって調べてみたんですが、似たような症状の方は見受けられるものの、これと言った原因や対策手段は見当たらず......。

というわけで、試行錯誤してみたところ、原因が判明しました。

まず、前提として、FeedBurner のサービスには、本家の英語版 feedburner.comと、日本語版の feedburner.jpがあります。

僕は、当初日本語版があることを知らずに、英語版の feedburner.com を利用していたんですが、しばらくして日本語版の feedburner.jp があることを知って、そちらに利用を切り替えたんですね。
つまり、僕がGoogle アカウントに移行しようとしていたのは FeedBurner日本語版の方です。

ちなみに、英語版の FeedBurner で利用していた RSSフィードのURIは
feedburner.com/abe-tatsuya
というものでした(ドメインはうろ覚え)。

そして、日本語版に切り替えて使っていた RSSフィードのURIは
feedburner.jp/abe-tatsuya
というものだったんですね。

つまり、ドメイン以下のURIが全く同じだった、と。

で、これらのアドレスが Google アカウントに移行した際にどうなるかと言うと、英語版も日本語版も関係なく、
feeds2.feedburner.com/任意のアドレス
になるようです。

Google アカウントに移行する際、どうやらこの「任意のアドレス」の部分に自動で、今までのアドレス(僕の場合だと abe-tatsuya)が指定されるのが問題だったっぽいです。

どうやら英語版の FeedBurner のアドレスが、日本語版のものより優先される(?)らしく、日本語版の「abe-tatsuya」のフィードを移行しようとしたら、「そのURIは英語版の方で既に存在するから移行できないよ~」ということで、前述のエラーが出ていたようなのですね。

なので、試しに英語版の方にログインして、Googleアカウントへの移行を試してみると、あっさりと成功。
やはり予想が当たっていたみたいです。

でも、使いたいのは日本語版の方なので、英語版の方の「abe-tatsuya」のRSSフィードは、Googleアカウントへ移行直後に削除しちゃいました。

そして、もう一度日本語版の FeedBurner にログインして、Google アカウントへの移行を試してみると、無事成功。
というわけで、無事解決しました。

結論

日本語版 FeedBurner で、

次のフィード URI は既に使用されています:○○○

というエラーが出るのは、同じURIのRSSフィードが英語版 FeedBurner に存在するから。

僕と同じように、日本語版と英語版で同じURIのRSSフィードを作っちゃってる人は、英語版の方を先に Google アカウントに移行させた後、さっくり削除しましょう。

日本語版しか利用していなくて、同様のエラーが出る場合は、自分とは無関係の誰かが、英語版で同じURIを利用しているのが原因である可能性が高いです。
せめて自分のRSSフィードのURIを変更できればどうにか対処できるんですが、現状 Google アカウントに移行するまでは、何の操作もできない状態になっているので、打つ手なし......かもしれません。

関連するブログ記事
カテゴリー
アクセス解析
タグ
Feed | FeedBurner | Google | Google AdSense | RSS | アクセス解析

コメント(1) | トラックバック(0)

 

『内向型営業マンの売り方にはコツがある』

何冊も本を出版されている友人の渡瀬謙さんが、新たに『内向型営業マンの売り方にはコツがある』という本を出されたので、告知を手伝わせて頂きます。

渡瀬さんは、文章が巧みで物静かなタイプの方なんですが、そんな印象とは裏腹に、意外にも営業とかアポ取り関連の書籍執筆や講演を中心に活動されていらっしゃいます。

いわゆる「イケイケ」の営業ではなく、ご自身の実際の経験を元に、内向的な人間がいかに営業を成功させるか、というポイントに焦点を合わせて情報を発信されている方です。

渡瀬さんから頂いたメールを引用させて頂くと、

 
この本は、かなり気合を入れて作り込んだ内容で、内向型で売れずに悩んでいる営業マンを救える本だと自信を持っています。

コンピュータなどの技術系の方は、とくに内向型タイプが多いのではないかと推測しています。
そんな方のコミュニケーションにもお役に立てる内容です。

※強調は引用者による

とのことですが、実際その通りで、技術系の人間でイケイケの営業ができる人なんて、そうそういないでしょうね(笑)。

僕もそうですが、フリーランスで技術者をやってる人間は、内向的であっても、クライアントさんと接する機会というのは多々あるわけで、そういう仕事に苦手意識を持ってる人は多いと思います。
そんな人間にとって、非常に役立つ内容なんじゃないでしょうか。

と言いつつ、僕自身もまだ読めていないんですが(笑)、文章の巧い渡瀬さんのことなので、きっとノウハウ本としてだけでなく、読み物としても面白い内容になっているんだろうな、と期待しています。

本日(3月6日)中に、アマゾンで購入して、こちらのページから申し込めば、さらに書き下ろしのテキストのPDFと、出版記念の講演に無料で参加できるそうなので、興味のある方はぜひぜひ。

関連するブログ記事
カテゴリー
営業
タグ
内向型営業マンの売り方にはコツがある | 営業 | 渡瀬謙

コメント(5) | トラックバック(0)

 

最近『ナショナルジオグラフィック』が面白くて仕方がない

今年に入ってから、『ナショナルジオグラィック』を読むようになったんですが、面白いですね。

たまたま今年の一月に、書店で一月号の印象的な表紙を見かけて(ヒョウかと思ったら、オセロットらしい)、絶滅危惧種が特集というのにも興味を惹かれて衝動買いしたんですが、思った以上に面白くてびっくりでした。

科学系・文化系の記事とかが多い雑誌なんだと期待してたんですが、社会的な内容の記事も多いんですね。
というか、科学系の記事はそんなにないのかも。

一月号の絶滅危惧種の特集とか、二月号のダーウィンと進化論の特集なんかは、今の僕の興味のど真ん中で当然めちゃくちゃ面白かったんですが、どちらかというとそんなに期待していなかった、社会系の記事も、読んでみたら凄まじく興味を惹かれました。
アメリカのホワイトハウスの裏事情の話とか、金を採掘する違法労働者の話とか、北朝鮮からの脱北者の話とか、凄くのめりこんで読んでしまったなあ。

テレビがそんなに好きじゃないせいで、ドキュメンタリーとかもなかなかじっくりと見られないので、こういうので色々と自分とあんまり関わりのない世界の情報が入ってくるのは、ありがたいです。

そういや、もう三月号出てるなぁ。
最近引っ越して、近所に大きな書店がないので、見つかるかな......。
というか、そろそろ年間購読するか。

 
関連するブログ記事
カテゴリー
雑誌
タグ
ダーウィン | ナショナルジオグラフィック | ホワイトハウス | 動物 | 北朝鮮 | 絶滅危惧種 | 自然 | 進化論 |

コメント(8) | トラックバック(1)

 

MySQL でテーブル内の同値の数をカウント ( count ~ group by ~ の使い方)

例えば、各ユーザーの好きな食べ物を格納した、以下のようなテーブルがあるとします。

t_favorite_food
user_id favorite_food
1 カツ丼
2 カツカレー
3 カツ丼
4 カツ丼
5 カツカレー
6 串カツ
7 串カツ
8 メンチカツ
9 カツカレー
10 カツ丼

お前らどんだけカツ好きやねん。というのは置いておいて、こういうテーブルから好きな食べ物毎の件数をカウントして取得するのが、group by 関数というやつです。

select favorite_food, count(favorite_food)
from t_favorite_food group by favorite_food;

上記SQLで、

カツ丼 4
カツカレー 3
串カツ 2
メンチカツ 1

という結果が返ってくるはずです。

関連するブログ記事
カテゴリー
MySQL
タグ
count | group by | MySQL | RDBMS | SQL

コメント(22) | トラックバック(2)

 

PHP と perl の配列の添え字に関するメモ

PHP の配列自動指定について

PHPでは、配列に空の添え字を指定することで、自動で添え字を +1 できるんですね。
恥ずかしながら知りませんでした。

例えば、

$list = array();
for($a=0;$a<10;$a++){
	$list[] = $a;
}

と書けば、 $list[0]~$list[9] にそれぞれ 0~9が入る、と。

他にも、

$list = array();
$list[0] = 'Red';
$list[1] = 'Blue';
$list[5] = 'Purple';
$list[] = 'Pink';

とやると、最後の行は $list[6] = 'Pink'; となるそうな。

perl では似たような方法あるのかな......?

PHP と perl の配列の添え字最大値取得方法

上記のような手段を取ると、やっぱり配列の添え字の現在の最大値を見るような処理が必要になってくるケースなんかもある気がします。

そういう場合、perl だと、

@list = ('Red', 'Blue', 'Purple', 'Pink');
$max = $#list;

という感じで、$#配列名 で配列の添え字の最大値が取得できます。

PHPの方にはざっと調べたところ、こういう簡単な手段はないようで、

$list = array('Red', 'Blue', 'Purple', 'Pink');
$max = max(array_keys($list));

とかやるみたいです。

参考: 最大添字を取得するには - Yahoo!知恵袋

関連するブログ記事
カテゴリー
PHP | perl/CGI
タグ
perl | PHP | 配列

コメント(8) | トラックバック(1)

 

このブログについて

阿部辰也

Webコンサルタントやシステムエンジニア、執筆業などをやっている、グッドホープ代表・阿部辰也のブログです。
Web技術系のTipsから仕事の話、趣味の話まで色々と。
人生は所詮生まれてから死ぬまでの壮大な暇つぶし。
だったら有意義に暇をつぶして生きましょー。

阿部辰也へのお仕事のご依頼・問合せはこちらからどうぞ。

Twitter: @t_abe
読書メーター: ID:Tatsuya

このブログのサイトマップ
このブログのはてなブックマーク数

Feed/RSS購読

タグクラウド

最近のトラックバック

阿部辰也の著書

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

頑張って書いたのに、出版後すぐに出版社が倒産して印税も貰えずじまいで俺涙目(笑)。

Powered by Movable Type 5.02

スポンサード リンク

はてなブックマーク



あわせて読みたい

t-abeの今読んでる本

t-abeの最近読んだ本

t-abeの今やってるゲーム

t-abeの最近やったゲーム