漫ろで行こう

自由気まま過ぎる、ギークになりたい男の子の話

Archive for the ‘言語’ category

仕事柄多岐にわたり色々な言語に触れることがあるのですが、「得意な言語は?」と聞かれた場合「○○です!」と自信をもっていえる言語がない。
最近多用している言語は?ということであれば、もっぱら C# ではあるのだけども。
PHP 特化の人や、Perl 特化の人達なんかと比較したら下の下の下くらいの実力しかないと思う。

何かしら得意な言語を習得すべきなのだろうとは思うのだけども、いったい何を習得するべきなのだろうか?と思ったので、何社かオープン WEB 系の求人を出している会社で記載されている言語をまとめてみました。
※以下順不同

言語

サンプル数が少ないのでアレですが、集計前は「Perl か PHP じゃなかろうか?」と思っていたところ、意外にも JAVA が11票。同率1位で PHP。次いで C と Perl でした。
他にも Amazon やサイバーエージェント、リクルートなんかも調べてみたかったのですが、生憎求人が終了したようで掲載がなくなっていました。残念。
ついでに SQL に関しても集計してみました。SQL もプログラム言語同様に、特化していないので一通り触れるけど……というような状況なんですよね。

SQL

こちらに関しては予想通りの結果でした。Oracle が2位なのは基幹系との連携処理が絡んでくるからなのでしょうか?
以外にも PostgreSQL が0票というのには驚きました。一昔前であれば MySQL より PostgreSQL だろ常考!という感じでしたが、MySQL もバージョンアップを重ねて、RDBMS としての地位を確立してきたと考えるべきなのでしょう。

ということでプログラム言語としては PHP、JAVA、Perl、C あたりを。
SQL としては MySQL、Oracle あたりを習得すると良いのかもしれません。

自分は……もう少し検討してみようと思います。

サイボウズ・ラボ秋元氏が最近リリースした「twitterで読書記録。読んだ4!」を利用したり、API 叩いてみたりして遊んでたので、ついでに mixi アプリに最新読書記録を表示するだけの簡単なアプリを作ってみました。

[mixi] 読んだ4! on mixi

後はデザイン整えたり、表示件数変更出来るようにしたりとやらなきゃいけないことがいくつか。ユーザー情報登録してもらって自分のページのみ表示出来るようにしてみたり、読書記録者 or アプリ利用者の Amazon アフィリエイト情報登録出来るようにしたりとか。

取り急ぎ、ランキングを表示出来るようにもしたいので、API の拡張依頼を出そうと思います。

twitter 使ってて読んだ4!を使い、更に mixi を使っている人が対象という、何というニッチなアプリなんだろう……。
暇があったら登録してみてください。

そーいえば、バーコード読み取って全国の Amazon から書籍情報を取得し、背表紙を自分の棚に並べていくサービスが海外だかにあった気がする。物理的にバーコード読み取って本棚に並ぶ光景をみんなで歓喜しながら眺めていた希ガス。
Twitter でも良いけど、ふと iPhone アプリでも出来るんじゃね?と思った。あったら面白いなぁ。いちいち twitter にポストしなくて良いし、Amazon で ASIN を検索しなくて良いし。

official.twitterで読書記録。読んだ4!, via.秋元 » 読んだ4!(yonda4.com)オープンベータテスト中

Copyright @ 2004-2005 by donavan nelson, lance davis, 4wx networks, CentOS ltd

Copyright @ 2004-2005 by donavan nelson, lance davis, 4wx networks, CentOS ltd


Copyright © 1990-2009, Python Software Foundation

Copyright © 1990-2009, Python Software Foundation

何と言うか、Linux は色々と手間の掛かる子である。またそこが面白いんだけど。

仕事で使うため、サーバーを CentOS で構築してもらった(金かかるから RedHat EL は使わせてもらえなかった)は良いけども、いざ設定しようと思ったらインストールされている Python が 2.4.3 な件について。
こちらとしては 2.5 が使いたい。と言うことで yum で update 叩いてみたものの、どうやら CentOS では 2.4.3 が最新らしい。
OS インストールしてもらっただけなので、特に何も弄っていない初期状態。
yum の repo 追加すれば良いのかもしれないが、なんか面倒なので rpm source から入れてみる。

Google 先生に聞いたら「CentOSでPython2.5を使う – スコトプリゴニエフスク通信」が良いとのことだったので参考にしてみるも、肝心の途中が抜けている。「技術者なら知っとけ」みたいな見事な投げっぱなしジャーマンに惚れ惚れする。
ということで、紹介されていた「Bashton Blog » Blog Archive » Python 2.5 RPMs for RHEL 5 / Centos 5」から python25-2.5.1-bashton1.src.rpm をダウンローしてインストール。

cd /usr/local/src/
wget http://bashton.com/downloads/rpm/python/python25-2.5.1-bashton1.src.rpm
yum install readline-devel gmp-devel ncurses-devel gdbm-devel expat-devel libGL-devel tk tix libX11-devel tcl-devel tk-devel tix-devel bzip2-devel sqlite-devel db4-devel
rpmbuild –rebuild python25-2.5.1-bashton1.src.rpm

自分のところでは依存関係が出たので、関連のものを yum でインストールしてからリビルドしました。
リビルドしたファイルは /usr/src/redhat/RPMS/i386/ に保存されています。
あとは通常の RPM インストールと同様にインストールをするだけ。

cd /usr/src/redhat/RPMS/i386/
rpm -ivh python25-2.5.1-bashton1.i386.rpm python25-devel-2.5.1-bashton1.i386.rpm python25-libs-2.5.1-bashton1.i386.rpm python25-tools-2.5.1-bashton1.i386.rpm tkinter25-2.5.1-bashton1.i386.rpm

このままでは 2.4.3 のままなので、2.5 が利用できるように若干修正。

cd /usr/bin/
mv python python.org
ln -s python2.5 python

python -V で 2.5.1 が表示されれば完了です。

先日「[Webサービス][言語][Javascript]mixi アプリではてブ | 漫ろで行こう」で書いた後、更に以下のアプリを作成してリリースしました。
まだまだ、デザインとか色々考えなくちゃいけないのですが……。

[mixi] 今日は何の日?
[mixi] 過去の出来事
[mixi] 毎日が誕生日!
[mixi] ニコニコ動画毎時ランキング

今日はニコニコをタブ化しようとしていたら、ちょっとバグっぽい挙動を確認。
ガジェット自体始めて作る上、Javascript を熟知しているわけではないので、バグなのかどうかも微妙ですが、一応念のためコミュへは報告しておきました。
タブがウィンドウ幅を超える場合、タブが横へ遷移しないんですよねぇ……。

それはさておき、タブ化のために準備をしていたカテゴリ一覧やらロジックやらが無駄になるのもアレなので、そのままドロップダウン化してみました。
「毎時ランキング」なのに毎時以外にも対応。

アプリ名称は変更した方が良いのだろうか?

official.mixi アプリβ

RSS を Python から作成したくて色々探してみたのですが、ElementTree や RSS.py を触ってみたものの使用感が個人的にイマイチ。
更に探してみたら PyRSS2Gen というものがあることを発見。使ってみた感覚としては、前述した ElementTree や RSS.py より利用しやすいと思いました。

PyRSS2Gen, ダウンロード

使う前にインストール。coreserver 上で使いたいので、Prefix は変更。

user@host:~> cd src/
user@host:~/src>
user@host:~/src> wget http://www.dalkescientific.com/Python/PyRSS2Gen-1.0.0.tar.gz
user@host:~/src> tar zxvf PyRSS2Gen-1.0.0.tar.gz
user@host:~/src> cd PyRSS2Gen-1.0.0/
user@host:~/src/PyRSS2Gen-1.0.0> python setup.py build
user@host:~/src/PyRSS2Gen-1.0.0> python setup.py install –Prefix=$HOME/local

これでインストール完了。動作確認。

user@host:~> python
Python 2.4.3 (#1, Sep  9 2006, 16:25:40)
[GCC 3.4.6] on linux2
>>> import PyRSS2Gen
>>>

問題なくインポートできたもよう。
実際の動作確認として PyRSS2Gen にあるサンプルソースを実行。

import datetime
import PyRSS2Gen

rss = PyRSS2Gen.RSS2(
    title = "Andrew’s PyRSS2Gen feed",
    link = "http://www.dalkescientific.com/Python/PyRSS2Gen.html",
    description = "The latest news about PyRSS2Gen, a "
                  "Python library for generating RSS2 feeds",

    lastBuildDate = datetime.datetime.now(),

    items = [
       PyRSS2Gen.RSSItem(
         title = "PyRSS2Gen-0.0 released",
         link = "http://www.dalkescientific.com/news/030906-PyRSS2Gen.html",
         description = "Dalke Scientific today announced PyRSS2Gen-0.0, "
                       "a library for generating RSS feeds for Python.  ",
         guid = PyRSS2Gen.Guid("http://www.dalkescientific.com/news/"
                          "030906-PyRSS2Gen.html"),
         pubDate = datetime.datetime(2003, 9, 6, 21, 31)),
       PyRSS2Gen.RSSItem(
         title = "Thoughts on RSS feeds for bioinformatics",
         link = "http://www.dalkescientific.com/writings/diary/"
                "archive/2003/09/06/RSS.html",
         description = "One of the reasons I wrote PyRSS2Gen was to "
                       "experiment with RSS for data collection in "
                       "bioinformatics.  Last year I came across...",
         guid = PyRSS2Gen.Guid("http://www.dalkescientific.com/writings/"
                               "diary/archive/2003/09/06/RSS.html"),
         pubDate = datetime.datetime(2003, 9, 6, 21, 49)),
    ])

rss.write_xml(open("pyrss2gen.xml", "w"))

ここでトラップカードオープン!
保存された pyrss2gen.xml を確認してみると……。

<?xml version="1.0" encoding="Shift_JIS"?>

…… Shift_JIS とな!
それじゃあ意味がない。
にしても PyRSS2Gen 公式にまともなドキュメントが見当たらない。自分が見つけられないだけなのか?
ということで、色々試した結果 UTF-8 で保存する方法を発見。

rss.write_xml(open("pyrss2gen.xml", "w"), "utf-8")

こうすることにより、UTF-8 で保存することが出来ました。

official.PyRSS2Gen

urllib2.urlopen を使って Shift_JIS でコーディングされたサイトに機種依存文字が含まれていると上手くエンコード出来ない。
凄く嵌って、漸く解決したので覚書。

#!/usr/bin/env python
# vim: set fileencoding=utf-8 :

import urllib2

url = ‘http://hoge.hogehoge.com’
html = urllib2.urlopen(url).read()
html = html.encode(‘utf-8′)

これだと、機種依存文字の影響で Traceback が出力されます。

Traceback (most recent call last):
File “test.py”, line 8, in ?
html = html.encode(‘utf-8′)
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0×83 in position 361: ordinal not in range(128)

そこで

html = html.encode(‘utf-8′)

を以下に修正。

html = unicode(html, ‘cp932′).encode(‘utf-8′)

cp932 で一端デコードすると良い。
昨日、今日と悩んだ。

融通が利かないところがまた良いカンジがする Python であった、うん。

昨日8日に mixi から「mixiアプリ」のオープンβ版が公開されました。
ということで、性懲りも無く試してみました。
ちなみに作ったアプリのページはこちら「[mixi] はてブ人気エントリー」。いつの間にか11人に増えてた。

やったことは「はてなブックマーク」の最新人気エントリー上位25件を表示するというだけの簡単なお仕事。
Feed の処理は全て Guide – Google AJAX Feed API に投げるだけ。後は返り値を処理して終わり。

画面全体で見るとこんな感じ。
20090409mixiapps01

自分のホーム左側最下部(マイコミュニティの下)に「マイアプリ」が表示されます。
20090409mixiapps02

また、追加したアプリは画面右最下部(PR 企画の下)に各アプリのウィンドウが追加されます。
20090409mixiapps03

利用するためには、デベロッパー登録をする必要があります。
手順などに関しては「「mixiアプリ オープンβ」コミュニティへの参加とデベロッパー登録」を参考にしてください。

official.mixi Developer Center (ミクシィ デベロッパーセンター)

ちょいと、Python から URL 短縮を行いたかったので、何となく tinyurl.com を利用したサンプルが無いかと探していたところ「どう書く?org 7131 匿名: (LL Golf Hole 1 – tinyurl.comを使ってURLを短縮する) – 投稿の詳細」を発見。
試しにレスしている方のを丸コピーさせて試行してみたところ、Warning ががが。

user@host:~> python test.py
test.py:8: DeprecationWarning: operating in backwards-compatibility mode
form = ParseResponse(response, False)[1]

http://tinyurl.com/5mngx8

ちなみに自分の実行環境は Python 2.4.3。
現状 DeprecationWarning が表示されていても問題ないようですが、「DeprecationWarning(日本語環境でのPython (for Python 2.3 or later))」こちらの解説によると今後問答無用でエラーにする予定だとか。
文字エンコーディングの定義云々が記載されているのですが、Warning 内容とちょっと違う。
backwards-compatibility mode で実行しなくてはならないようです。

ということで、ちょっと8行目の記述を変更。
Before

form = ParseResponse(response,False)[1]

After

form = ParseResponse(response, backwards_compat=False)[1]

修正後、改めて実行。

user@host:~> python test.py

http://tinyurl.com/5mngx8

Warning も取れてすっきり。
初めて Python 触るので大変勉強になりますm(_ _)m

via.ClientForm を使用した HTML parsing – forest book

ウチは coreserver を借りてこのサイトを運用しているのですが、Python で遊ぼうと思ったときに必要になるモジュールがインストールできないことに気がつきました。
色々調べてみたところ、どうやら virtual-python というモノをインストールしたら追加モジュールのインストールが、レンタルサーバーでも可能らしいということで試してみました。

参考にさせていただいたのはこちら「reizn Second-Life – virtual-pythonの使い方
ユーザーホームディレクトリに python ディレクトリがあったりと気持ち悪いので、local に変更したり諸処若干変更しています。

user@host:~> mkdir src
user@host:~> cd src/
user@host:~/src> wget http://peak.telecommunity.com/dist/virtual-python.py
user@host:~/src> python virtual-python.py –prefix=$HOME/local
Creating /virtual/user/local/lib/python2.4
Creating /virtual/user/local/lib/python2.4/site-packages
Creating /virtual/user/local/include/python2.4
Creating /virtual/user/local/bin
Copying /usr/local/bin to /virtual/user/local/bin
You’re now ready to download ez_setup.py, and run
/virtual/user/local/bin/python ez_setup.py

このままでは利用できないので、環境変数にインストールしたパスを追加します。

user@host:~/src> export PATH=$HOME/local/bin/:$PATH
user@host:~/src> export PYTHONPATH=$HOME/local

また、ログインする度に環境変数がリセットされてしまい、virtuall-python にたいしてフルパス指定(/virtual/user/local/bin/python)と叩かなくてはいけなくなるため、dot-bashrc に環境変数の設定を記述しておきます。

user@host:~/src> cd
user@host:~> echo “export PATH=$HOME/local/bin/:$PATH” >> .bashrc
user@host:~> echo “export PYTHONPATH=$HOME/local” >> .bashrc

以上で完了。

インストール中に You’re now ready to download ez_setup.py, and run と表示されたので、setuptools もインストールしておきます。

user@host:~> cd ~/src/
user@host:~/src> wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c9.tar.gz#md5=3864c01d9c719c8924c455714492295e
user@host:~/src> tar zxvf setuptools-0.6c9.tar.gz
user@host:~/src> cd setuptools-0.6c9
user@host:~/src/setuptools-0.6c9> cp -pr ez_setup.py ~/local/bin/
user@host:~/src/setuptools-0.6c9> cd ~/local/bin/
user@host:~/local/bin> python ez_setup.py

これで、easy_install コマンドの利用が可能になります。
この後、ちょいちょい試してみたのですが、上手くインストールできないモジュールがいくつかありました。
解決方法があるのでしょうが prefix だけで単純解決でませんでしたので、気がついたら書いていこうかと思います。

それでは、良いレンタルサーバーライフを!

official.PEAK – The Python Enterprise Application Kit
via.reizn Second-Life – virtual-pythonの使い方

Twitter 上の はてブ BOT から飛んできたのでチョット気になって見てみました。
かなり使えるPHPの正規表現まとめ – IDEA*IDEA ~ 百式管理人のライフハックブログ ~

パッと見「おー、便利便利」と思ったのですが、これ絶対に誰か言及するなー。特に小飼氏のとこには引っかかりそうだ。とか思っていたら案の定言及されてて笑った
404 Blog Not Found:「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ

まぁ、小飼氏のトコが思い浮かんだのは、以前にも正規表現に関して言及していたことがあったので、逆鱗(?)に触れるかなー程度。それはさておき、正規表現って完璧に出来てる人っているんだろうか?と。自分は全然自信が無いですが、自信が無いじゃ済まない世の中ですが。

究極的なメールアドレスの正規表現ってのはこんな感じらしい。
メールアドレスの正規表現

お手軽」を求めるのか「完璧」を求めるのか。
お2人の畑がそもそも違うので、決着は着かないのでは?
一概にどちらが良いということは無いと思いますし、互いにメリット・デメリットはやはりあるでしょう。

完璧であることが望ましいと思いますが、自分はどちらかと言うと Taguchi 氏寄りの考え。
小飼氏の言及内容は内容で、非常に勉強になるので読んでて面白いですけどね。

via.かなり使えるPHPの正規表現まとめ – IDEA*IDEA ~ 百式管理人のライフハックブログ ~

Get Adobe Flash playerPlugin by wpburn.com wordpress themes
Proudly powered by WordPress. Theme developed with WordPress Theme Generator.
Copyright © 漫ろで行こう. All rights reserved.