Pelican タグクラウドを表示する

この blog は今のところは Pelican のデフォルトテーマを使用していますがいくつか変更したいところもあり、この連休中に少しでも進められたらと思っています。

気になっているところの一つはタグの表示で、ドキュメントを見たところタグクラウドを簡単に導入できそうだったので試してみたのですが、まだできていません。

下記の html をテンプレートに入れるだけでできそうな感じだったので pelican/lib/python3.3/site-packages/pelican/themes/simple/templates/base.html に入れてみたのですが特に表示はされませんでした。 pelicanconf.pyTAG_CLOUD_STEPS = 4 と書いても結果は変わらず。記述するテンプレートのファイルが正しくないのかもしれません。

<ul>
  {% for tag in tag_cloud %}
  <li class="tag-{{ tag.1 }}"><a href="/tag/{{ tag.0 ...
more ...

Python 正規表現で複数行を置換する

仕事でちょっとしたテキスト処理に正規表現の置換をよく使います。会社では Windows を使っていて Emacs も使いますが普段使いのエディタとしては Mery をメインに使っています。

あるルーティン処理でこれまでは Mery で手動で処理していたものを Python でスクリプトを書いて自動化しようと思い、少し試してみたのですがどうも思ったような動作にならず、試行錯誤していました。結局のところ、フラグの指定など細かいところまでドキュメントを読んでいなかっただけの話で、無事解決できたので記録を残しておきます。

import re

prog = re.compile(r'pattern')
result = prog.sub('replace', 'source')

こういう感じで正規表現をコンパイルして sub メソッドで置換します。

ただ、上記の書き方だと一行ごとでしか検索してくれないのでコンパイル時にフラグを指定する必要がありました。

prog = re.compile(r'pattern', re.MULTILINE)

これでいけるかと思いきや、まだ期待したとおりに動いてくれません。よくよくドキュメントを読むとデフォルトでは . (ドット)は改行文字を含まないので改行文字を含める場合は DOTALL フラグも必要と書いてありました。

prog ...
more ...

Python SQLite3 を操作する(重複チェック)

今考えているプログラムではデータベースにデータを登録する際に、すでに登録されているかどうかをチェックして重複しないように、未登録のデータのみを登録するようにしたいと考えています。

前回作ったデータベースapp_url カラムの値でチェックする場合だと以下の様な関数でチェックできそうです。

# app_url の値をチェックする
def is_exist_url(target):
    sql = 'SELECT app_url FROM apps WHERE app_url ="' + target + '"'
    cur = conn.execute(sql)
    if len(cur.fetchall()):
        return True
    else:
        return False

SQL を組み立てて実行し、その結果を fetchall() したリストの長さを調べます。もしすでに登録されていた場合はデータが入ったリストが返ってきますし、登録がなければ len(結果のリスト)0 になります。

def put_data2(app):
    with conn ...
more ...

Python SQLite3 を操作する(テーブル作成からデータ登録、読み出し)

ファイル形式のデータベース SQLite を Python から触ってみます。Python には標準で sqlite3 というモジュールが付いているので特に何かをインストールする必要はありません。

テーブルの作成

まずテーブルを作ってみます。

import sqlite3

DATABASE = 'sample.db'
conn = sqlite3.connect(DATABASE)

def create_table():
    sql = '''CREATE TABLE IF NOT EXISTS apps
             (id INTEGER PRIMARY KEY,
              app_url TEXT,
              app_name TEXT,
              store_url TEXT)'''
    conn.execute(sql)
    conn.commit()
    # conn.close()

sample.db というファイルでデータベースを作り、 apps ...

more ...

eXcale を試してみる(WordPress をデプロイ)

TIS が運営している PaaS(であってますかね?)eXcale を試してみました。

PHP や Node.js、Rails などのアプリを動かせる、Heroku のようなものだと思います。解説記事がたくさん書かれているので初めて触る人でもいろいろできそうですね。今回は WordPress を入れてみました。

上記の解説記事のそのままですが、一箇所ちょっとした見落としがあってやり直したところがあったので書いておきます。 wp-config.php を編集する際に DB のホスト名を入力するところは ホスト名:ポート番号 の形で両方を指定する必要があります。(解説記事にもその旨書いてあるのですが見落としていました)

/** MySQL のホスト名 */
define('DB_HOST', '10.1.99.99:12345');
↑値は適当です

あとは shell から入力したコマンドを備忘のため載せておきます。

tar ...
more ...

Flask を触ってみる

Python の Web アプリケーション・フレームワークのひとつ、Flask を触ってみました。 Hello World を表示させるサンプルと、Jinja2 テンプレートをつかった HTML 生成を少しやってみます。

ほとんどサンプルコードそのままなので誰かの参考になるようなものではないのですが、自分の備忘のためという意味もこめて。

from flask import Flask
from flask import render_template


app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello World!!"


@app.route('/user/<username>')
def show_user_name(username=''):
    # return "user: " + username
    return render_template('hello.html', name=username ...
more ...

BeautifulSoup で窓の杜ライブラリからソフトウェアのバージョン番号を抜き出す

BeautifulSoup でスクレイピングの練習です。窓の杜ライブラリのページからソフトウェアのバージョン番号のところを抜き出してみます。 窓の杜ライブラリでは以下のような感じでソフトウェアの紹介ページがあり、タイトルなどと一緒に最新のバージョン番号も記載されています。

HTML のソースを見ると以下のようになっていて、 <div class="list-tlt-spec"> を指定して取りに行けばよさそうです。

<div class="list-tlt-spec">
  <h3>Google Chrome</h3>
  <dl>
    <dt class="invisible">バージョン・リリース日</dt>
    <dd>v34.0.1847.131(14/04/24)</dd>
  </dl>
</div>

書いたコードはこういう感じになりました。

import re
from bs4 import BeautifulSoup ...
more ...

MacPorts と Homebrew の違いについて

Mac のパッケージ管理システムとして最近は Homebrew の方がメジャーなようですが、MacPorts や Fink という選択肢もあります。 個人的な感覚としては少し前までは MacPorts がデファクトスタンダードだったような気がします。その後 Homebrew が出てきてデファクトの座を追われたような印象を持っていたのですが、両者の間に(Fink はおいておいて)どのような違いがあるのか気になったので少し調べてみました。

パッケージのインストール先

  • Homebrew は /usr/local にインストールする
  • MacPorts は /opt/local にインストールする

インストールに必要なユーザー権限

  • Homebrew は一般ユーザーの権限でインストールする
  • MacPorts は管理者の権限でインストールするため、sudo が必要

インストールするパッケージについて

  • Homebrew は必要なソフトウェアのうち OSX に元から入っているものがあればそれを使う
  • MacPorts は必要なソフトウェアは全部新たにインストールするため、環境のセットアップに時間がかかる

その他

Python で SciPy、Numpy、NLTK ...

more ...