カテゴリ: 勉強会など

ページ: << 1 2 3 4 5 6 >>

第12回高蔵寺SE勉強会

パーマリンク 2008/08/24 23:00:00 著者: kumaold メール
カテゴリ: 仕事, 勉強会など

昨日は第12回高蔵寺SE勉強会に行ってきました。

今回の宿題ネタは自分が担当だったのですが、出題が遅くなってしまい、皆さんにはご迷惑をおかけしてすみませんでした。


今回出題したネタは…ありそうでやってなかったものです。

[言語]PHPに限らず
[お題]
サーバに置いたファイルなどを読み書きしてみよう。
読み取り、書き込みどちらか一方で結構です。


以前からニコニコメソッドプレゼン(AIR/RSS版?)用の投稿フォームがあればプレゼン用などの使い道が増えると思っていたので、作ってみました。


表示・投稿スクリプト index.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>ニコニコメソッドプレゼン WEBフォーム</title>
</head>

<body>

<h3>ニコニコメソッドプレゼン WEBフォーム</h3>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <table>
        <tr>
            <td>コメント</td>
        </tr>
        <tr>
            <td>
                <input type="text" name="comment" size="50">
                <input type="submit" value="コメントする">
                <input type="reset" value="リセット">
            </td>
        </tr>
    </table>
</form>

<?php
//RSSファイルのパス
$rss_file = 'rss.xml';

if (isset($_POST['comment'])) {
    //RFC 2822 フォーマットの日付取得(Sun, 24 Aug 2008 12:00:00 +0900)
    $time = date("r", mktime());
    
    //既存RSSを配列に格納
    $rss_data = file($rss_file);
    
    if ($rss_data) {
        //既存RSSのヘッダ部読み取り
        for($i = 0; $i <= 6; $i++) {
            $new_rss .= $rss_data[$i];
        }
        //新規RSSに時刻ヘッダ追加
        $new_rss .= "        <pubDate>" . $time . "</pubDate>\n";
        $new_rss .= "        <lastBuildDate>" . $time . "</lastBuildDate>\n";
        //新規RSSに内容追加
        $new_rss .= "        <item>\n";
        $new_rss .= "            <title>" . $_POST['comment'] . "</title>\n";
        $new_rss .= "            <pubDate>" . $time . "</pubDate>\n";
        $new_rss .= "        </item>\n";
        
        //既存RSSの内容読み取り
        for($i = 9; $i <= count($rss_data); $i++) {
            $new_rss .= $rss_data[$i];
        }
        
        //RSSファイルを書込用にオープン
        $fp = fopen($rss_file, 'w');
        if ($fp) {
            //RSSファイルを新しい内容で置換
            fwrite($fp, $new_rss);
            //RSSファイルをクローズ
            fclose($fp);
        } else {
            die("ファイルオープンに失敗しました。\n");
        }
    } else {
        die("ファイルオープンに失敗しました。\n");
    }
}
?>
<div>
<strong>最新コメント</strong></div>
<textarea cols="70" rows="10">
<?php
//過去ログ表示用にRSSを読込む
$xml_data = file_get_contents($rss_file);

//XMLパースライブラリーを読込む
include('xml.php');

//XMLを連想配列に格納する
$rss_array = XML_unserialize($xml_data);

for ($i = 0; $i < count($rss_array['rss']['channel']['item']); $i++) {
    //投稿日時表示
    echo date('m/d H:i', strtotime($rss_array['rss']['channel']['item'][$i]['pubDate'])) . ' | ';
    //コメント表示
    echo $rss_array['rss']['channel']['item'][$i]['title'] . "\n";
}
?>
</textarea>

</body>
</html>

※RSS(XML)パースライブラリとしてこちらのxml.phpを使っています。

コメントRSS rss.xml

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>ニコニコメソッドプレゼン用RSS</title>
        <link>http://kumazaki.kashimo.co.jp/rss.xml</link>
        <description>AIR版ニコニコメソッドプレゼン(ニコニコ風RSSリーダー)でのプレゼンコメント用RSSです。</description>
        <language>ja</language>
        <pubDate>Sun, 24 Aug 2008 10:34:03 +0900</pubDate>
        <lastBuildDate>Sun, 24 Aug 2008 10:34:03 +0900</lastBuildDate>
        <item>
            <title>フォームをPOSTに変更</title>
            <pubDate>Sun, 24 Aug 2008 02:21:16 +0900</pubDate>
        </item>
        <item>
            <title>サーバ側の描画処理が重いので弾幕は自重ww</title>
            <pubDate>Sun, 24 Aug 2008 02:19:05 +0900</pubDate>
        </item>
        <item>
            <title>ニコニコメソッドプレゼン(゜Д゜)ウマー</title>
            <pubDate>Sun, 24 Aug 2008 01:17:02 +0900</pubDate>
        </item>
        <item>
            <title>色は自動で決定@表示ソフト側</title>
            <pubDate>Sun, 24 Aug 2008 01:16:56 +0900</pubDate>
        </item>
        <item>
            <title>最新コメントが上位表示</title>
            <pubDate>Sun, 24 Aug 2008 01:14:53 +0900</pubDate>
        </item>
        <item>
            <title>過去ログ実装しますた</title>
            <pubDate>Sun, 24 Aug 2008 00:09:53 +0900</pubDate>
        </item>
        <item>
            <title>(・∀・)イイ!!</title>
            <pubDate>Sat, 23 Aug 2008 22:51:39 +0900</pubDate>
        </item>
        <item>
            <title>てst</title>
            <pubDate>Sat, 23 Aug 2008 21:50:30 +0900</pubDate>
        </item>
    </channel>
</rss>


今回はとりあえずの作りなのでRSS解析・作成ライブラリで…なんてことはせずテンプレートになるRSSに行指定で追加するだけの単純処理です。

ついでに簡易過去ログ表示機能もつけてみました。


配布用セット(ZIP):

ニコニコ動画風RSSリーダー用PHPフォーム


発表

CakePHPでの安全なサイトの作り方2~クロスサイトスクリプティング~

[進行]あつさん
[概要]セキュリティの話の第2回になります。
    今回は「クロスサイトスクリプティング」についてです。


動的に出力される部分全てにおいてXSSの危険性があるので、スクリプトなどのタグ除去、無効化などを1つでも忘れないように心がけたいです。



Webアプリセキュリティ対策入門 ~あなたのサイトは大丈夫?Webアプリセキュリティ対策入門 ~あなたのサイトは大丈夫?
大垣 靖男

技術評論社 2006-03-16
売り上げランキング : 223865

Amazonで詳しく見る

第11回高蔵寺SE勉強会

パーマリンク 2008/08/10 23:00:00 著者: kumaold メール
カテゴリ: 仕事, 勉強会など

OSC2008から帰った翌日、早速第11回高蔵寺SE勉強会でした。

色々あって1ヶ月ぶりなわけですが、今回宿題を最後まで放置してました。

さて、今回の宿題はこちら。

[出題者]あつ
[言語]CakePHP
[お題]世の中の誰かが作ったコンポーネントをつかってみよう。
ただし、自分自身が今まで使ったことの無いものに限る。 (1)

[出題者]あつ
[言語]PHP(CakePHP)
[お題]WEBサービスを利用して、サイトを作ってみよう。 (2)

勝手に番号を付けました。まずは(1)の方から。

なんか探してみたら為替レートコンポーネント?なるものがありました。

使ってみましたって感じですが、indexではクロス円レート、convertでは2つの通貨を渡すとそのレート計算できるようにしてみました。(ex.convert/USD/JPY)

マイナーな通貨ペアのレート計算にも使えます。

手抜きでサーセンw

class TestsController extends AppController
{
    var $name = 'Tests';
    var $components = array('CompCurrency');
    
    function index()
    {
        $fromCurrency = array('USD', 'EUR', 'AUD', 'NZD', 'CAD', 'HKD', 'CHF', 'ZAR', 'TRY', 'NOK', 'MXN', 'ISK', 'KRW');
        $toCurrency   = 'JPY';
        
        foreach ($fromCurrency as $from) {
            $result[$from] = $this->CompCurrency->convert(1, $from, $toCurrency);
        }
        $this->set(compact('result'));
    }
    
    function convert($from, $to)
    {
        $this->set('result', $this->CompCurrency->convert(1, $from, $to));
    }
}



(2)の方は少し真面目に実用的なものにしてみました。

以前から製作中の地域HPコンテンツの一環で、携帯の位置情報を活用してみるサンプルも兼ねてます。

携帯の位置情報測位には各キャリア毎に仕様が違い、GPS測位と基地局測位ではまた別なため数種類のページを用意する必要がありました。

それを解決できるAPIがありました!Cirius Lab.の『GeoForm API』です。


これに簡単なパラメータを渡すと、向こうでキャリア毎に測位ページを生成し、結果をGETで返してくれるので手間要らずです。


それを使って、1回の位置情報測位だけで位置情報を用いた携帯サイトを横断的に使える便利なものを作ってみました。

LocationsController

class LocationsController extends AppController
{
    var $name = 'Locations';
    var $uses = null;
    var $components = array('CompLocation');
    var $helpers = array('Html');
    
    function index()
    {
        //位置情報が取得されていないとき
        if (!isset($this->params['url']['lat'])) {
            $userAgent = urlencode($_SERVER['HTTP_USER_AGENT']);
            $returnURI = urlencode('http://kumazaki.kashimo.co.jp/CakePHP/locations/');
            $APIkey    = '1234567890abcdefghijklmnopqrstuvwxwz';
            
            $locationAPI = "http://api.cirius.co.jp/v1/geoform/xhtml?ua={$userAgent}&return_uri={$returnURI}&api_key={$APIkey}&datum=wgs84";
            $this->set(compact('locationAPI'));
        } else {
            $lat     = $this->params['url']['lat'];        //緯度
            $lon     = $this->params['url']['lon'];        //経度
            $address = $this->params['url']['address'];    //住所
            
            //緯度経度をdd.dddd形式→dd.mm.ss形式変換
            $latDMS = $this->CompLocation->degree2dms($lat);
            $lonDMS = $this->CompLocation->degree2dms($lon);
            
            $siteURL = array(
                'Yahoo!地図'    => "http://maps.mobile.yahoo.co.jp/mpl?lat={$lat}&lon={$lon}",
                'Livedoor地図'  => "http://map.m.livedoor.com/map/?lat=N{$latDMS}&lng=E{$lonDMS}",
                'BIGLOBE地図'   => "http://map.mobile.biglobe.ne.jp/i/search/area.jsp?1=1&mla={$lat}&mlo={$lon}",
                'Yahoo!地域情報'=> "http://local.mobile.yahoo.co.jp/p/local/location?guid=ON&lat={$latDMS}&lon={$lonDMS}&geo=wgs84",
                'Yahoo!路線情報'=> "http://trans.mobile.yahoo.co.jp/p/transit/main/gps?guid=ON&lat={$latDMS}&lon={$lonDMS}&geo=wgs84",
                'Yahoo!グルメ'  => "http://gourmet.mobile.yahoo.co.jp/gps?guid=ON&lat={$latDMS}&lon={$lonDMS}&geo=wgs84",
                'ぐるなび'      => "http://mobile.gnavi.co.jp/search/search_near_result.php?lat={$latDMS}&lon={$lonDMS}&geo=wgs84&x-acc=2",
                '楽天トラベル'  => "http://web.tabimado.net/portal/i/m_sch_co.ll?lat={$latDMS}&lon={$lonDMS}&geo=wgs84",
                'ホットペッパー'=> "http://hpr.jp/K/K001.jsp?lat={$latDMS}&lon={$lonDMS}&geo=wgs84",
                '郵便局'        => "http://map.japanpost.jp/m/map.php?red=1&company=3001&nl={$lat}&el={$lon}&scl=250000&prev=place",
                '道の駅'        => "http://www.asiato.net/cgi-bin/michieki/latf_df.cgi?lat=%2B{$latDMS}&lon=%2B{$lonDMS}&geo=wgs84",
                'ゲームセンター'=> "http://www.ge-sen.com/gps.php?lat={$latDMS}&lon={$lonDMS}&geo=wgs84"
            );
            
            $this->set(compact('siteURL', 'latDMS', 'lonDMS', 'address')); 
        }
    }
}


CompLocationComponent

class CompLocationComponent extends object
{
    /* 緯度経度を度分秒(dms)形式に変換
     *
     * @return string location[dd.mm.ss]
     * @param $degree float location[dd.dddd]
     */
    function degree2dms($degree)
    {
        $n = 1000;
        $u = floor($degree*3600*$n + 0.5);
        $s = (int)($u/$n) % 60;
        $m = (int)($u/60/$n) % 60;
        $d = (int)($u/3600/$n);
        $u %= $n;
        return sprintf("%d.%02d.%02d.%s", $d,$m,$s,$u);
    }
}

中身は、見てのとおりAPIから帰ってきたものを解析した各サイトのパラメータに渡しているだけです。

コンポーネントでは135.80000度→135°48'00"という変換をしてます。

WGS84→Tokyoの変換はこの際面倒なので無視。


これをベースに色々組み合わせてコンテンツを制作しようと思います。


GPSのための実用プログラミングGPSのための実用プログラミング
坂井 丈泰

東京電機大学出版局 2007-01
売り上げランキング : 115572

Amazonで詳しく見る
type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

OSC2008 Nagoya

パーマリンク 2008/08/09 23:00:00 著者: kumaold メール
カテゴリ: 勉強会など

本日はオープンソースカンファレンス2008 Nagoyaに行ってきました。


名古屋の勉強会大集合! のセッションであつさんが発表してきました。

発表グループ数も15くらい?、参加人数100人以上で意外に名古屋にも勉強会が多くあるんだな~と思いました。


軽く思ったこといくつか。

・ハードウェア系もあった(→NBUGCSnagoya など)
・PHPが意外に少ない
・プレゼンPCでWindowsが少数派
・2chねらー大杉(先行者とかまさに外道とかまたまた古いネタを・・・)

1HzのCPU製作とか面白そうだな~
学生時代のH8マイコン制御とロジックICの知識を生かせそう



↓無駄にレビューの評価が高い

CPUの創りかたCPUの創りかた
渡波 郁

毎日コミュニケーションズ 2003-10-01
売り上げランキング : 6439
おすすめ平均

Amazonで詳しく見る
type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

<< 1 2 3 4 5 6 >>

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年3月
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

検索

XMLフィード

16ブログ     powered by b2evolution free blog software