CentOSからSQL Serverへ接続する
自分のブログでも書いてますが、こちらにも書いてみます。
ちょっと機会があったので備忘録的にメモしておきます。
環境はこんなかんじ
- SQL Server 2008 R2 on Windows Server 2008 R2
- CentOS 5.8
yumインストールでも良いのですが、今回はunixODBC, FreeTDSはソースでビルドしてみます。
続きを読むMojolicous::LiteとDBIx::Skinnyで簡易掲示板を作ってみた
今回はオンラインPerl勉強会の22回のお題についてDBIx::Skinnyを使って書いてみます。
DBIx::Skinnyは昨年のJPerl Advent Calendarを参考にしてみました。
データベースを用意する。
今回はオンライン勉強会と同じSQLiteを使って書いています。
シンプルに以下のようなテーブル。
$ sqlite3 bbs.db $ create table bbs(title text primary key not null, message text);
コーディング
使い方が間違っているかもしれませんが、以下のように書いてみました。
#!/usr/bin/env perl
package BBS::Model;
use DBIx::Skinny;
1;
package BBS::Model::Schema;
use DBIx::Skinny::Schema;
install_table bbs => schema {
pk 'title';
columns qw/title message/;
};
# これを入れると日本語も可
install_utf8_columns qw/title message/;
1;
package main;
use Mojolicious::Lite;
my $db = BBS::Model->new({dsn => 'dbi:SQLite:bbs.db'});
post '/post' => sub {
my $self = shift;
my $title = $self->param('title') || '';
my $message = $self->param('message') || '';
$db->create( 'bbs', {
title => $title,
message => $message
});
$self->redirect_to('index');
} => 'post';
get '/' => sub {
my $self = shift;
my @results = $db->search('bbs', {});
my $items = [];
for my $row (@results) {
my $item = {
title => $row->title,
message => $row->message
};
push @$items, $item;
}
$self->render( items => $items );
} => 'index';
app->start;
__DATA__
@@ index.html.ep
<!doctype html><html>
<head>
<meta http-equiv = 'Content' content-type='text/html;charset=UTF-8' />
<title>Mojo + DBIx::Skinny</title>
</head>
<body>
<div id='header'>
<h1>Mojolicious::Lite + DBIx::Skinny</h1>
</div>
<div id='form'>
<%= form_for 'post' => (method => 'post') => begin %>
Title: <%= text_field 'title' %><br/>
Message: <%= text_area 'message' %><br/>
<%= submit_button 'Post' %>
<% end %>
</div>
<div id='bbs'>
<% for my $row (@$items) { %>
<dl>
<dt class='title'><%= $row->{title} %></dt>
<dd class='message'><%= $row->{message} %></dd>
</dl>
<% } %>
</div>
</body>
</html>
Net::Twitpicを作ってみた
TwitpicのAPIv2を使用した画像アップロードのモジュールが見当たらなかったのでここを参照しながら試行錯誤してモジュールを作ってみました。
以下のように使用します。
use Net::Twitpic;
my $twitpic = Net::Twitpic->new(
consumer_key => 'YOUR-TWITTER-CONSUMER-KEY',
consumer_secret => 'YOUR-TWITTER-CONSUMER-SECRET',
token => 'OAUTH-TOKEN',
token_secret => 'OAUTH-TOKEN-SECRET',
api_key => 'TWITPIC-API-KEY'
);
my $response = $twitpic->upload(
message => 'Hello',
media => 'file/to/path'
);モジュールはgithubにアップしたのでここから入手してみてください。
- [2010-11-24 updated]
TwitpicのAPIにあわせるようにメソッド名をuploadに変更しました。
Mojolicousのテンプレートでクラス指定してみる
今回はテンプレートに書いた要素のレイアウトをCSSで制御したいときなどに便利なクラス指定やID指定をしてみます。
テンプレート内にHTMLとして以下のように書いても良いのですが
@@ index.html.ep
<form method='GET' action=<%= url_to('index') %> id='name_form'>
Name: <input type="text" name='name' class="name" /><br/>
<input type="submit" value="post" />
</form>以下のようにも書くことができます。
@@ index.html.ep
<%= form_for 'index' => (method => 'GET', id => 'name_form') => begin %>
Name:<%= text_field 'name' => (class => 'name') %><br/>
<%= submit_button 'post' %>
<% end %>"templates/*.html.ep"内や__DATA__内にCSSを書くことで制御可能です。
以下サンプル。
use strict;
use warnings;
use Mojolicious::Lite;
get '/' => sub {
my $self = shift;
my $name = $self->param('name') || '';
$self->render( name => $name );
} => 'index';
app->start;
__DATA__
@@ layouts/default.html.ep
<html>
<head>
<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/>
<title>Mojo class sample</title>
<style type='text/css' media='screen'>
#wrapper {
position: absolute;
width: 600px;
left: 50%;
margin-left: -300px;
background-color: #3cc;
}
.name {
width: 500px;
text-align: center;
}
</style>
</head>
<body>
<div id='wrapper'>
<%= content %>
</div>
</body>
</html>
@@ index.html.ep
% layout 'default';
<%= form_for 'index' => (method => 'GET', id => 'name_form') => begin %>
Name: <%= text_field 'name' => (class => 'name') %><br/>
<%= submit_button 'post' => (id => 'post_name') %>
<% end %>
<% if( $name ) { %>
Hello, <%= $name %>!<br/>
<% } %>