ソフトウェア」カテゴリーアーカイブ

NuGet で簡単にパッケージを導入する。

案外知られていない気がする。

Ruby や Python では、パッケージを簡単にインストールして利用する方法があって、

Ruby では gem
Python では easy_install

がこれに該当しますかね。

 

.NET にも NuGet という同様の仕掛けが存在し、
利用することが出来ます。

.NET開発の新標準「NuGet」入門(前編) - @IT
詳細な解説についてはここのあたりを見ておくと良いかと思います。

 

注:対象は Visual Studio 2010 以降の Visual Studio に限ります。


分からない人向け:

たとえば、今から Twitter の機能を利用したソフトウェアを作ろうとあなたが思ったとき、
以下の選択肢から一つ選ぶことになると思います。

1.自分で OAuth の認証書いて、アクセスするライブラリを作る。
2.インターネットから既存のライブラリをとってくる。

現代においては、教育目的を除いて 1 を選ぶことは殆ど無いかと思います。
(気に入る形に出来ない場合や、そもそも無い場合は作ることにはなりますが。)

 

となると、現実的な回答としては、2となりますが、
インターネットから探してきて、インストールして・・っていうのは面倒で、
カタカタっと名前を打ったりして、簡単にインストール出来た方がいいわけです。

インストーラが面倒くさいということも考えられるでしょうし、
そもそも、インストーラが無くて、自分で組み込まなければならない場合は面倒になりますし、
友人に教えながら作業するという場合や、雑誌にやり方を載せる場合などにおいては、
友人や読者にファイルのありかを教えなければなりませんし、
複数台に組み込む時なども・・・・ とまぁ、非常にナンセンスな訳です。

 

そんなわけで、 Python の easy_install や Ruby の gem
そして、この記事で触れる .NET の NuGet などのパッケージ管理ソフトウェアを用いることにより、
単純明快でかつ高速に、ライブラリを用意して使い始めることが出来ます。

また、ライブラリに更新があった場合、手動で入れた場合はまたインストールをしなければなりませんが、
大抵こういうパッケージ管理ソフトでは、アップデートも簡単に行える仕様が備わっています。

 

という感じで、長文になりましたが、
導入~更新 まで、ライブラリの利用に関するあらゆることを簡単に使えるようにした物。
それが、パッケージ管理ソフトウェア ということになります。


というわけで本題。

 

1.導入

http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
上記URL より、 Download をクリックしてダウンロード、インストーラを起動します。

 

image

上のような画面が出ますので、インストールをクリックし、導入を完了させます。

 

2.開発を始める。

image

いつものように、ソリューションを開きます。

 

3.パッケージを導入する。

image

メニューバーの 「ツール」 → 「Library Package Manager」 → 「Package Manager Console」 をクリックします。

image

コンソールが立ち上がった。

 

今回は例として、

http://www.twitterizer.net/
上記URL にて公開している、「Twitterizer」を導入してみます。

 

image

Install-Package twitterizer

と打って、Enter で実行。

 

image

自動的に依存関係が解決された状態で、参照にライブラリが加わり、使えるようになる。

 

3.コード書いて動かす。

 

image

 

とりあえずこんな感じ。

 


というわけで、適当に超基本的なコマンドだけ、対応表にするとこんな感じなのかなぁ。

コマンド

NuGet

gem

easy_install

hoge をインストール Install-Package hoge gem install hoge easy_install hoge
hoge を更新 Update-Package hoge gem update hoge easy_install –U hoge
全部更新 Update-Package gem update easy_install –U
hoge を削除 Uninstall-Package hoge gem uninstall hoge  

NuGet のコマンドについては、

http://www.atmarkit.co.jp/fdotnet/chushin/nuget_01/nuget_01_02.html
上記URL に大体まとまっているかと思います。

 

そんな感じで。であであ。

SyntaxHighlighter でコードを示したあと、ずたずたに書式が崩れる不具合の対応

どうもみむらです。

とっても見づらいブログ記事で本当に申し訳ございませんでした。
変に改行とかが入って、おそろしく見づらかったことかと思います。

 

ということで、今回はそれの犯人と、
修正の方法。

 

原因:

<pre> </pre> 以降の HTML データが上手く処理されず、
テキストデータとして改行がなされたところに <br /> たぐが自動挿入されたため。

 

対策:

WordPress 内の wpautop というフィルタによって自動挿入されるため、

http://urbangiraffe.com/plugins/disable-wpautop/
上記URL より入手できるプラグインを導入して処理を除去。

 

結果:

対策前:

image

上記のように、文と文が離れていて大変読みづらい状況でした。

 

対策後:

image

本来、当方が記述した際の正しい記述にて表示が行われ、
段落ごとに文章がまとまり、見やすくなっています。

 


というわけで、
WordPress で <pre> を利用してコードを記述している方で、
ずたずたにスタイルが崩れてしまった場合、利用してみてはいかがでしょうか。

ちなみに、RSS フィードに対しても wpautop は適用され、
改行が挿入されますが、
このプラグインでは RSS フィードに対しても有効であり、
かつ、Wordpress をアップデートしても有効となるため、かなり有用かと思います。

Python + Django してみた。 その4.データベース。

体力が切れてきた。やばい。みむらんです。

データベースを使ったサンプルってことで、何かやろうかと思ったのですが、
小さいものが見当たらないので、使い方だけ。

参照 : http://djangoproject.jp/doc/ja/1.0/topics/db/queries.html

 

1.models.py でモデルを定義しよう

Entry クラスにぼこぼこ書くだけで定義完了です。

class Human(models.Model):
    name = models.CharField(max_length=12)
    description = models.TextField()
    age = models.IntegerField()

たとえば、人の名前を管理するなら、こんな感じでしょうか。

name CharField(max_length=12) 最長12文字の文字列
description TextField() 文字列
age IntegerField() 数字

 

2.データベースへの反映

settings.py に、各種設定を済ませておきます。

変数名 設定内容
DATABASE_ENGINE データベースエンジン ‘mysql’ / ‘sqlite3’ など
DATABASE_NAME データベース名 ‘human_db’
DATABASE_USER ユーザ名 ‘mimuran’
DATABASE_PASSWORD パスワード ‘hogehoge’
DATABASE_HOST サーバホスト名 ‘example.com’
DATABASE_PORT ポート番号 ‘1234’

 

一通り済ませたら、

$ ./manage.py syndb

で、実データベースに反映します。

 

3.データの読み書き

書き込み:

data = Human()
data.name = u'みむらん'
data.age = 19
data.description u'ぱいそんよくわかってない系だんし'
data.save()

インスタンスを生成して、ごにょごにょ詰め込んだ後、 save メソッドを呼び出して保存。

すべて読み出し:

all = Human.objects.all()

条件を付けて読み出す:

mimuran = Human.objects.filter(name=u'みむらん')

とりあえず、こんな感じで。

Python + Django してみた。 その3.テンプレート使ってみた。

ども、みむらんです。
第2回の続きってことで。

 

1.テンプレートとなる HTML ファイルを書く。

test_project ディレクトリ以下に templates/test_app ディレクトリを作成し、
templates/test_app ディレクトリ以下に home.html を以下の内容で作成します。

<html>
<head>
<title>{{title}}</title>
</head>
<body>
{% for i in data %}
{{i}}<br/>
{% endblock %}
</body>
</html>

{{変数}} というのを、「テンプレート変数」と呼び、
{{% タグ 引数 %}} ~ {{% end タグ %}} というのを、「タグ」と呼びます。

テンプレート変数の記述を用いて、変数の中身を表示させ、
タグの記述を用いて表示上の処理を記述する形となります。

Django テンプレート言語 — Django v1.0 documentation
ぱーっとこのページを見ていた感じでは、以下の要素がよく使われそうな気がします(ぉ

タグ名

利用用途

extends [template file] すでに定義されているテンプレートファイルを継承する。

Java での extend と同義と捉えられるかも。
block [block name] 継承元:ブロック(範囲)を定義し、継承先で値が変更される場所を設定する。

継承先:事前にブロックとして定義されている範囲のテキストを変更する。
for [val1] in [val2] val2 から要素を1つ1つ取り出し、 val1 に格納する形で、

for ~ endfor 間を繰り返す。

Java で言うところの foreach がこれに該当。

ちなみに、 Python の for は全て foreach な処理になっている。

if [条件] ~ else ~ endif

ifequal [val1] [val2] ~ endifequal

ifnotequal [val1] [val2] endnotequal

条件が真であれば、該当範囲が実行される。通常の if 条件と同じ。

ifequal は2つが等しい場合。

ifnotequal は2つが等しくない場合にそれぞれ実行される。

 

2.settings.py にテンプレートが置かれているディレクトリのパスを記述する。

TEMPLATE_DIRS = (
)

こうなっている部分があるかと思いますが、ここを下記のように書き換えます。

TEMPLATE_DIRS = (
   '[test_project までの絶対パス]/templates',
)

([test_project までの絶対パス] には、それぞれの環境に合ったパスを記述してください。)

 

3.views.py を編集する。

test_app に移動し、views.py を以下のように書き換えます。

from django.http import HttpResponse
from django.template import loader, RequestContext

def home(req):
    contexts = RequestContext(req, {
        'title' : 'hello django!',
        'data' : ('Hello', 'django', 'world'),
    })
    template = loader.get_template('test_app/home.html')
    return HttpResponse(template.render(contexts))

 

4.実行する。

image

Python + Django してみた。 その2.とりあえずページを出してみる。

どーも。みむらんです。
というわけで、 第1回 の続きとして適当にぺけぺけと。

 

1. settings.py を編集する。

settings.py を編集して、 任意のアプリケーションを読み込むように指示します。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

上記のようなことが書かれている箇所があるのですが、
そこに、

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'test_app',
)

というように、(最下行)
test_app (作成したアプリケーション名) を追記。

 

2. urls.py を編集。

urls.py を編集し、任意の URI へのアクセスを
任意のアプリケーションのコールバック関数に渡るように、 URI と関数を関連づけます。

”””
どの本読んでも、
みんなコールバック関数じゃなくて、関数やメソッドと書かれているから、関数と書いた方がいい気がしてきた。

・・他の言語での用語に合わせるならば、ハンドラとも書けそうな気がするけど、むー。 
”””

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'test_project.views.home', name='home'),
    # url(r'^test_project/', include('test_project.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
)

デフォルトではこのようになっていますが、これを変更し、

urlpatterns = patterns('',
    (r'\$', 'test_app.views.home'),
)

という感じに。

こうすることで、全てのアクセスが、
test_app の、 views.py の中で定義されている、 home メソッドにて処理されるようになります。

第1引数は正規表現で記述しますので、
(r’^lang/(python|CSharp)/$’, ‘test_app.views.correct’)
なんて書き方も可能です。

 

3.views.py を書く。

先ほど作成した、アプリケーションのディレクトリへ移動して、
その中の views.py を編集し、処理内容を定義します。

views.py :

from django.http import HttpResponse

def home(req):
    return HttpResponse('Hello Django World !')

 

4.動かしてみる。

image

 

テキストが表示された!