CentOSからSQL Serverへ接続する

自分のブログでも書いてますが、こちらにも書いてみます。

ちょっと機会があったので備忘録的にメモしておきます。

環境はこんなかんじ

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>

あとはCSSとかでレイアウト整えたりすれば極シンプルな掲示板ができるかと。

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/>
<% } %>

ロリポップで動く簡易Twitterブラウザアプリを作ってみる。

前提

以下のモジュールで立ち上げます。

デプロイ

ここにかなり時間を要してしまった。
上記の2つのモジュール以外に用意したモジュールは以下の通り。

  • JSON::Any
  • Net::OAuth
  • Class::Accessor
続きを読む

Mojolicious::LiteでWebフレームワークを試す [その3]

前々回前回の続き。

今日はテンプレートとflash/stashの勉強。

テンプレート

MVCモデルのVに当たると思いますが、表示部分のテンプレートはEmbedded Perl(EP)と呼ばれる記法(?)で記載するようです。
基本的にはHTMLと同様なのですが文中にPerlコードを組み込むことができます。
ドキュメントにはいろいろ書いてあるのですが、以下自分が使いそうなものから。

続きを読む