Home > プログラミング

2008.07.29

Pythonは全部がオブジェクト(C言語でいうところの「ポインタ」なお話)

弊社に来年4月からやってくる新卒の学生に Python の勉強をしてもらおうと思っていたのだが、先日聞いたところでは大学で C言語 をやっているらしい。
それを聞いて Python の勉強はまだ良いから C をしっかりやって欲しいと伝えた。
C言語 は良い言語だ。C++ はもちろん、PHPも Java も他の言語も少なからず C言語 の影響は受けている。
Webサービスをやっているだけなら C言語 はほとんど使わないが、比較的余裕のある学生のウチに C を学べるのはとっても良いと思う。

今日は、C言語を学んだ人が最初に不思議に感じる「Pythonでは全てがオブジェクトとして扱われる」というお話。

(more…)

2008.07.25

cron用のMySQLダンプシェルスクリプト

データベースの情報をバックアップする際の選択肢のひとつとして
「cronで自動的にmysqldumpやpg_dump等のRDBMS特有のダンプコマンドを叩いて保存する」
という手段が挙げられます。

これは、バックアップの質としてはイマイチですが
専用ツールをインストールするような面倒な手間も無く、
いつも使っていてノウハウが蓄積されているコマンドで行うことが出来るため、
簡単なWebサービスや自前のサーバ等では、重宝する手段だと思います。

ただし、この方法を使う際に重要視したいのは、
「いい具合にバックアップする」という点です。

やり過ぎて手動のオペレーションが増えたり、自動化部分の安定性を損なってしまっては、
そもそも、cronで自動化・省力化する趣旨と反してしまいますし、
(※入念にバックアップをする必要がある場合は、気合を入れてサーバの体勢を整えて、かつ、mysql-zrm等の専用ツールを使うべきです)
やらな過ぎて、いざという状況で役に立たない場合も、これまた意味が無いものになってしまいます。

自分の場合は、過去、毎度毎度適当なシェルスクリプトを書いたり
かつ、cronを複数設定して、いい具合になるように調整していましたが、
その労力が勿体無いので、以下のような専用のシェルスクリプトを作成いたしました。

mysqldump4cron.sh

  • 【設定値解説】
    WEEKLY_TARGET_DAY_OF_WEEK … 週次の場合に保存される曜日を指定
    MONTHLY_TARGET_DAY … 月次の場合に保存される日付を指定
    DAYLY_MAX_LIFE … 日次保存ダンプファイルの保持期間を日数で指定
    WEEKLY_MAX_LIFE … 週次保存ダンプファイルの保持期間を日数で指定
    MONTHLY_MAX_LIFE … 月次保存ダンプファイルの保持期間を日数で指定
  • Linuxのみ対応、FreeBSDは現在非対応
    (対応する場合は、コチラの記事が参考になりそう)
  • MySQL用です
  • 異常系処理は実装無し、設定値を間違えないように注意して下さい
  • コメントがローマ字なのは、お恥ずかしい限りです

参考にして戴ければ幸いです。

それでは、大胆さの中にも慎重さがきらめくような、良きバックアップライフをお過ごし下さい!

2008.07.17

データマイニング基礎

クラウドマップではソーシャルブックマークのタグ付けデータを解析しています。これはいわゆるデータマイニングと呼ばれるもので、大量のデータの背後にある隠れた構造を露わにするものです。データマイニングの手法は多数提案されていますが、今日はその中で、最も基礎的で重要な手法である主成分分析(principal component analysis)とクラスタ分析(k-means clustering)について、さわりだけ紹介します。また、タグ付けデータに適用するとどうなるのかもお見せします(結論から言うと、これらの手法ではタグ付けデータをうまく解析することができません)。

■主成分分析を初めとするデータマイニング手法が行うことは、基本的には「データ圧縮」です。データの背後にある本質的な構造は、そのデータ自身よりも簡潔に記述できると想定できるからです。どのような制約の下で圧縮するかが手法の種類を決めると言えます。主成分分析の場合は次のようにデータ圧縮します:

(more…)

2008.07.16

Pythonにハマってきた…

ただいま、Pythonの本をバリバリと読書中。
脳内で「ああ、これは C言語 だとアレと同じだな」と翻訳しながら進めているけど、もし C言語 など他の言語を全く知らない人は大変だろうなぁと他人事のように感じてしまう。

また C言語 のような型をカッチリ決めてコーディングするのに慣れている人には、Pythonのような動的に型付けされる言語は違和感あるだろうなぁとも思う。
けど、アセンブラで組んだことがある人ならメモリサイズは気になるけど「型」なるものがある方が不思議で、メモリ空間にどう配置されているかがイメージできる人にとっては Python のような動的に型が変化する言語でも理解できる。

そういう意味では、様々な言語やハードウェアのちょっとした知識があると、理解の助けになるからお得だ。

以下、本を読んで他の言語と違うな~と感じたことをいくつか紹介。

(more…)

2008.07.02

普及するのか?! google Gearsを取り上げる

公開直後の反響に比べて、対応アプリがほとんど公開されない google Gears を今週の勉強会で取り上げます。

コンセプトは中々面白く、しかしアプリケーションが Gears に完全対応するのは難しく、今後がどうなるのか全く読めない技術ですが、googleパワーで普及してしまうのでしょうか?

 
(more…)

2008.06.26

JavaScriptのライブラリ、使ってますか?

今日は javascript の代表格(?)、jQueryのご紹介

実演をメインにする予定なので、ネット上にはさわり部分のみになりますが…

(more…)

2008.06.19

google app engineとは?

ちょっとホットな google app engine についての説明資料を作ってみました

具体的なコーディング方法などは wiki にアップしていきます。

(more…)

2008.06.17

Python導入記

現在、Pythonを社内に導入するプロジェクトが進行中。

もともと現役の東大生が中心になって開発を進めていた「クラウドマップ」では Python を採用していたが、B向けに展開する自社のサービスも Python で構築しようかと検討しているところ。

その大きな理由の1つが、google が採用していること。
Ruby でも問題なく実現できるんだろうけど、情報の質と量と今後を考えて今は Python の方が良さそうだ。
(但し、英語下での話)

Python や Ruby はWebサーバとしての機能を内包したフレームワークが多い。
LAMP構成になれていると「A」(apache)抜きで動くのが少し不思議な感覚になるが、サービスの管理がやりやすいのでこれはこれで便利。

近々、Pythonに関する情報をまとめている wiki を公開して、LAMP との違いなどを書いてみようと思う。

« Previous