challenger: 2008年3月アーカイブ

日本人の会社で働いている人のほとんどがこう思っているんではないでしょうか?

「残業をする人は偉い」と。

私もそうでした。残業をするのは仕事ができることだ、とか定時に帰る人は仕事が暇な人だと。

そんな私が最近読んだ本を紹介します。

 

この本を読んだときに率直に思ったことが、私の今までの考え方は間違っていたということです。

残業をする=仕事ができる人ではなく、残業をする人=時間内に仕事が終わらない人ということだったんだと。たしかに、仕事量が多すぎて残業になることもありますが、そこで「仕事量が多いから」という理由で残業をするのではなく、「なぜ仕事量が多い?」「今までのやり方ではダメだ!仕事のやり方を変えて時間内に終わらそう」という意識が大切なことなんだと思いました。

ただ、それはあくまでも社内での仕事に対してのみ有効なんだとも思いました。

仕事がユーザ主体だと、ユーザの業務によっては残業が必須になってくると思うのです。

業務中に停止できないシステムのメンテナンスとかだと、必然的に業務終了後の作業開始となりますし、一般的な休日に営業しているユーザだと休日が関係なくなってしまいます。

こういう場合は一体どうすればいいのでしょうか?

gooのランキングってどーでもいーけど気になることを載せていることが多いですよね。

今日も何気にチェックしてたら「憧れる運命的な出会いのシチュエーションランキング」ってのがありました。

どれもありえないですよね。でも、正直憧れる。

偶然の出会いの瞬間、ふと流れる曲が一つだけ思い浮かびます。

それは、東京ラブストーリー のテーマ「ラブ・ストーリーは突然に」

年齢がばれそうですけど。

 そのほかのランキングは↓

新着情報30件→RSS
goo ランキング
憧れる運命的な出会いのシチュエーションランキング
1 旅先で会った人と、全然違う場所で再会
2 子どもの頃に引っ越していった初恋の人と、偶然再会
3 飛行機の席で偶然隣り合った人が、昔好きだった人
4 通勤でいつも会う片思いの彼が、隣に引っ越してきた
5 雨宿りをしていたら、傘をかしてくれた
6 雨宿りの軒下で偶然隣り合った人が、昔好きだった人
7 一目ぼれした人が、自分と同じ部署に入社してきた
8 怖そうな人に絡まれているところを助ける/助けられる
9 図書館で同じ本を借りようとして手が触れた
10 好きな人が偶然同じエレベータに乗ってきた
もっと見る
(C) NTT Resonant Inc. All Rights Reserved.
先日、PHP処理でのタイムアウトについて書きましたが、捕捉です。
タイムアウト処理うんぬんの前に、PHP側及びApache側での設定で強制的にタイムアウトになります。
【php.ini】
max_execution_time = 300
// 300秒でタイムアウト
【PHP】
set_time_limit(300);
//300秒でタイムアウト
【httpd.conf】
Timeout 300
//300秒でタイムアウト
KeepAliveTImeout 300
//300秒でタイムアウト

上記の設定は0にすればタイムアウトしない設定になります。
ちなみに、わたしの場合上記設定でもダメな場合がありました。
構成としては拠点Bからサーバ設置場所Aという状態で、拠点Bから拠点Aへのアクセスの際にどんなに対策をしてもタイムアウトになっていました。
原因は、ファイアーウォールでした。
ファイヤーウォール側でセッションのタイムアウトを設定していてアウトでした。
参考までに。

PHPを使ってMySQLの操作をしてるときに、データベースのレコード数が少ないときはいいんですが、ある一定以上のレコードを抽出するときにWWWサーバ側でメモリ不足のエラーが出ることがあります。

私の場合は、データベースから抽出したレコードを全て配列に格納してから処理をしているんですが、この配列変数で容量オーバーしてメモリ不足となることがありました。

対策としては、

1.抽出件数をLimitで制限して、whileなどで繰り返し処理を行う。

2.mysql_query→mysql_fetch_assocの流れではなく、mysql_unbuffered_query→mysql_fetch_assocという流れで処理をする。

1については、単純に一度に扱うデータ量を減らしています。

2のmysql_unbuffered_queryは、結構PHPのマニュアル本には載ってないことが多く私は知らなかった関数でした。

 

プログラマの人で、完全個室で仕事している人ってどれくらいいるんでしょうか?

大手一流企業だったら当たり前なんでしょうけど、地方企業なんかは狭い部屋に数人のプログラマが押し固まっているんでは??

内勤が基本であれば、音楽でも聴きながら周りの音をシャットアウトしてできるんでしょうけど、接客もやっているような人だと、耳栓や音楽聴きながら仕事なんてマズイですよね。

でも、となりのプログラマのキーボードのことがカチャカチャとうるさかったら、イライラしませんか?

かく言う私も自分が行き詰っているときに、となりから軽快なカチャカチャ音が聞こえるとイライラしてきます。

しかも、となりですから気晴らしにヤフオクを見ることも許されず。

そこで、こんな商品がありました。

これだったら、少しはストレスから逃れられるかも。。。

プレゼントして見ようかな。

PHPなどでWEBアプリを開発しているとどうしても印刷をきれいするという要望が出てきます。

TABLEの行数の制限などである程度は制御できるんですが、数ページに渡って印刷を行う場合はズレが生じてきます。

そこで、改ページ用のスタイルシートを埋め込むときれいにレイアウトされて印刷ができます。

例えば、改ページの区切り線にスタイルを設定する。

<hr style="page-break-after: always;">

 

表示される文字数によっては、変な位置でページが切れる場合があるんですがそこはページ内の文字数に余裕を持って構築しないといけないです。

PHPでWEBアプリを開発しているとある壁にぶち当たりました。
それはWEBブラウザのタイムアウト制限です。
データベースと連携している性質上データの件数が肥大するに伴い処理時間が
超過していきます。
データベース構築時点での設計ミスもありますが、やはり限界があるのではないでしょうか?

最初は、php.iniやApacheの設定をいじっていましたが頭打ちをするところまできました。
いろいろと調べてみると、WEBサーバからのデータが一定時間ないとWEBブラウザは接続が切断されたものとして判断してしまうようです。
だったら、細かく途中経過のデータを送ってあげればいいのでは?
と単純な考えでソースの埋め込み開始。
//出力バッファOFF
ob_end_clean();
 
// IEはこれがいるらしいので
echo str_pad('',256);
flush();

// あとは要所要所に途中経過コメントを出力
echo "コメント";
flush();

これで、数時間にわたる処理がとりあえず実行できるようになりました。

数時間に渡る処理自体が問題との声がありそうですが・・・・。

とあるWEBシステムで「ページが表示できない」という表示になってしまうというトラブルがありました。

始めはApacheが落ちた?と思っていましたが正常に稼動中。

サーバのメモリ?それも異常がない。

毎回ではなくたまになるらしいのですが、原因がさっぱり。

とりあえずApacheのアクセスログとエラーログを確認してみることに。

エラーログに次のエラーがたまに記載されていました。

FATAL:  emalloc():  Unable to allocate xx bytes

調べてみるとメモリの確保に失敗しているらしいのですが、このエラーが出るときに「ページが表示できません」となるみたいです。

処理を見直してみても、メモリを浪費しているような内容でもないし。

暫定的にphp.iniのmemory_limitを拡張して設定で回避。

MySQLでシステムを構築していく上で、事前にDBの設計ってかなり重要なんですよね。
(私は運用後に気づきました)
レコード数が少ないときは、あまり気にならないんですけど、データベースというのはレコードを蓄積していくものなので日々レコードは追加され、更新されていきます。
とあるシステムでどーしても速度を向上しろとクレームになりまして、いろいろとネットで調べたりしていました。
そのときに、購入した本が「実践ハイパフォーマンスMySQL」。いわゆるクック本と言うのでしょうか。
当時、わらにもすがる思いで読んでいました。
情報としては、少し古いバージョンのMySQLについての解説でしたけど、基本部分はバージョンがあがっても変わっていないと思いますが。
特に重点的に読んだのがクエリのチューニングの箇所でした。
とりあえずPHPに埋め込んでいたSQL文がけっこうダメなSQL文だったので、結果が返ってくるまでに時間がかかってしまいタイムアウトで処理が止まったりとしていたので、SQL文の見直しをするのに有効な手法なんかが記載してあったりして、結構内容は濃く今でも理解しきれない部分があります。

インターネットで調べれば同様のことは記載してあったりするんですけど、やっぱり本の方が理解しやすい気がします。



とあるシステムでPHPを定時に実行しなくてはいけないことがありました。

最初はwindows系のサーバからだったので単純にタスクにURLを実行するように指示をして自動的にブラウザを起動、処理が完了したら自動的にブラウザを閉じるという設定をしてました。

ところが、サーバがLinux系の場合はどうするんだろう??

と悩んで調べてみるとまず[cron]を使ってどうにかするということが分かりました。しかし、何を呼び出せばいいのか。

そこで、わかったことは[wget]コマンドでURLを呼び出せばいいんだと。あとはシェルにダウンロードしたファイルを削除するように指示してあげれば定期的なPHPでの処理ができました。

 

 

Skypeって結構普及してきましたよね。
ほとんどのパソコンがある家庭には、インストールされいるんではないでしょうか?
あと、ビジネスでも導入している会社も多くなりましたよね。
どこの会社もコスト削減のため、社内会議などはSkypeを使ってというシーンも珍しくなくなりました。
さて、みなさんはどんな機器を使っていますか?
私はヘッドセットを使っているのですが、どーしても常にヘッドセットをしたまま仕事をするわけにもいかず着信に気づかないなんてこともたまにあるんです。
なので、ビジネスシーンではハンドセットがいいのかな?とも思います。
ヘッドセットも両手がフリーになって、便利なんですけどね。

入力フォームを作成していて、どうしてもキーボードのEnterキーを押して間違って送信することがありました。

そこで、Enterキーでの入力で送信をしないようにJavascriptで制御します。

コードは以下のとおりです。

function NoEnter(evt){
  evt = (evt) ? evt : event;
                var charCode=(evt.charCode) ? evt.charCode :
                                   ((evt.which) ? evt.which : evt.keyCode);
  if ( Number(charCode) == 13 || Number(charCode) == 3) {
  return false;
  } else {
  return true;
  }
}

function NoSendEnter(formName) {
  var elements = document.forms[formName].elements;
  for (var j=0; j < elements.length; j++) {
  var e = elements[j];
  if (e.type == "text"){
  e.onkeypress=NoEnter;
  }
  }
}

実際のフォームには次のように埋め込みます。

<form name="form1">
~入力項目~
<input type="text" name="text1">
</form>
<script>
NoSendEnter('form1');
</script>

PHPで処理をしているときに、データ量がある一定を超えたあたりから極端に処理速度が遅くなってきました。

処理の流れとしては、

1.MySQLよりデータの抽出

2.抽出したデータを全て配列aに格納

3.配列aに対して処理をして別の配列bに格納

という処理です。

データ量が数万、数十万件あたりまでは問題なかったのですが、百万件近くになったときに著しく処理が遅くなってきました。

まず、各箇所で処理時間を計測してみました。

すると、3の処理をしているときに徐々に処理時間が遅くなってくることが分かりました。

??と思っていろいろと検討してみた結果、まず1のMySQLの結果リソースの解放をする。

その次の3で配列aについても解放をする。

データが少ないときはとりあえず乗り切れているんでしょうけど、データが肥大化するに伴い今回のようなことが発生することが分かりました。

恐らく、「そんなことは設計段階で把握しておかないと」って怒られそうですが、また一つ勉強になりました。

「使わないものは、片づけをする」←人として基本ですよね。

 

個人向け商品ですよね、これって。

とうとうパーソナルユース向けで1TB。

しかも手のひらサイズって、持ち運びするの?

バッファローは、コンパクトサイズで1テラバイトの大容量を実現したネットワーク対応ハードディスク(HDD)"LinkStation Mini(リンク・ステーション ミニ)"「LS-WS1.0TGL/R1」を発売する。

MySQLって軽快な動作をすると評判らしいのですが、チューニングをしてあげないと意味がないんですね。

最初はデフォルトの状態で運用していたのですが、レコード数が増えるにしたがって遅くなってしまう。そこで、いろいろと調べると設定ファイルを調整してあげれば格段に軽快な動作をするようになりました。

以下は私が設定した例です。

※設定はあくまで例です。参考程度にして下さい。

#スロークエリログ設定
log-slow-queries
long-query-time=30
log-long-format

#SELECT文をキャッシュ
query_cache_size=32M

#インデックスを用いないテーブル結合のときに使われるメモリ上の領域
join_buffer_size=8M
#インデックスを用いないテーブルスキャンのときに使われるメモリ上の領域
read_buffer_size=8M
#ソート後にレコードを読むときに使われるメモリ上の領域です。
#ディスクI/Oが減るのでORDER BYの性能向上が期待できます。
read_rnd_buffer_size=32M
#最大コネクション数
max_connections=50


#メモリに余裕がある場合に指定。検索に使われるインデックスをバッファに保存する際のメモリサイズ
key_buffer=32M
#入力データ保持のための最大バッファサイズ。画像など、大きなデータ挿入でこの制限に引っ掛かる可能性がある
max_allowed_packet=1M
#頻繁なアクセスに対し、データのキャッシュでディスクのI/O負荷を減らす場合に使用
table_cache=256
#頻繁なアクセスに対し、データのキャッシュでディスクのI/O負荷を減らす場合に使用
sort_buffer_size=16M
#値を大きくすることでインデックスを含まないクエリーの実行速度を上げる
record_buffer=1M


# スレッドの作成,削除は負荷が大きい.
# Threads_Createdの動きを見ながら変更.
thread_cache=16

# You can write your other MySQL server options here
#                                  Datafile(s) must be able to
#                                  hold your data and indexes.
#                                  Make sure you have enough
#                                  free disk space.
innodb_data_file_path = ibdata1:100M:autoextend:max:10000M
# InnoDBはOSキャッシュを使用しないため,全メモリの70-80%を当てると良い.
innodb_buffer_pool_size =128M
#InnoDBの内部データなどを保持するための領域
innodb_additional_mem_pool_size=10M

 

その他に「ここも設定したほうがいい」という項目があったら教えてください。

 

今はSEとしてやっていますけど、今の仕事に就く前はハード系の仕事してました。
転職時はWEBプログラマになろうとPHPを覚えていましたけど、PHPのコードを書くのにHTMLの知識って必須なんですよね。
PHPで処理をしても結局HTMLで表示しますから。
とりあえずHTMLの入門書はいろいろと読んできました。
ある程度デザインを考えるとスタイルシートについても覚えないといけなくて、結構大変でした。
デザインスキルがあればWEBデザイナもこなせるんでしょうけどorz

とりあえず一通りHTMLの構造を覚えた後、今でも利用しているのが「ポケットリファレンス」シリーズですね。これは手元においても邪魔にならない大きさですし、必要なことはほとんど掲載しているんで、PHP本と並べて置いています。


PHPの入門書を紹介しましたが、入門したあとに手にしておいた本はこれです。

「PHP ポケットリファレンス」

このシリーズは結構役に立っています。

「なんだ、そんなの買わなくてもWEBで探せばあるよ」って思っている人もいるでしょう。

でも、WEBページよりもアナログ的な紙ベースの方が格段に探しやすいです。

ただ、紙ベースの難点は更新されないことぐらい。

入門したあと、自分でプログラムを考えて構築するには是非片手に持っていて損はないと思いますよ。

 

私はもともとプログラムの経験はほとんどなく学生時代にC言語をかじった程度でした。

今は主にPHPを使っているのですが、独学です。

そんな入門書として最適なのが

最初は10日でほんとにって感じですが、意外に簡単に覚えることができます。

なにより段階を踏んでいるのと、難しいところは無視しているような内容が挫折しないで読める、試せるという感じでした。

あくまで入門書なので「PHPとは」という触りの部分だけですが、とっかかりは非常によかったです。

これからPHPを独学で始めてみようという人にはオススメです。

カスタム検索

ioPLAZA【アイ・オー・データ直販サイト】 ioPLAZA【アイ・オー・データ直販サイト】
あれもこれも標準装備のレンタルサーバ あれもこれも標準装備のレンタルサーバ


Web広告限定ストア(eクーポン)Web広告限定ストア(eクーポン)

問い合わせ

メールフォーム