カテゴリ: SE勉強会レポート

ページ: 1 2 3 >>

SE勉強会レポート (2008/11/16)

パーマリンク 2008/11/16 16:25:12 著者: おみう
カテゴリ: SE勉強会レポート

第17回高蔵寺SE勉強会のレポートです。
今回は社外からも大勢いらっしゃいました。

<宿題&コーディング品評会>
今回は、「カレンダーを生成するオリジナルヘルパーを作成してみましょう」というお題でした。

ということなので、Sunvisorさんのカレンダーヘルパーをお借りして、これに「先月・来月へのリンク」と「簡易スケジュール機能」を組み込むことにします。

calendar.php(カレンダーヘルパー)のソースコード
「(※改造部分)」とあるところを改造しました。

(コントローラーの例)

<?php
class PagesController extends AppController
{
    var $uses = array('Schedule');
    var $helpers = array('Html','Calendar');
    
    function display() {
        $schedules = $this->Schedule->find('list', array('fields'=>array('Schedule.date', 'Schedule.content')));
        $this->set('schedules', $schedules);
    }
}

スケジュール機能は本家のカレンダーヘルパーにもありますが、今回は、スケジュールデータをデータベースに保存しています。
コントローラーからスケジュールデータを読み込むことにしています。

(ビューの例)

<?php
echo $html->css('calendar');
echo $calendar->showCalendar($schedules);

CSSでカレンダーに色をつけています。(これは本家にある機能です)
スケジュールデータをビューからヘルパーに渡しています。


<発表>
CakePHP開発事例の紹介あつさん)
CakePHPの基本的なお話もありました。

CakePHPでのUnitテストについて(shideさん)
自分自身がUnitテストを試したことがないので、一度やってみたいと思います。

CakePHPで携帯サイトを作るためのテクニック株式会社ルーパス 齊藤勝弘さん)
セッション、個体識別情報など。
小学校のクラス会の携帯サイトに、認証システムを組み込もうとしたことがありますが、あきらめてしまいました(笑)。


<ライトニングトーク>
CakePHPでAjax入門MICKさん)
Ajaxヘルパーの使い方の紹介。

CakePHPとFlashの連携(おみう)
第14回の勉強会のネタです。

CakePHP簡単問合せフォームの作り方あつさん)
CakePHPでの開発の仕方の紹介。初心者向けのお話でした。

CakePHPの多言語化対応kumaさん)
CakePHP1.2から対応が強化されたようです。
意外と楽にできそうです。言語の語順の違いにもちゃんと対応しています(スゴイ!)。

SE勉強会レポート (2008/11/2)

パーマリンク 2008/11/02 17:12:00 著者: おみう
カテゴリ: SE勉強会レポート

第16回高蔵寺SE勉強会レポートです。

<宿題&コーディング品評会>
お題:写真を解析して何か作ってみよう

今回は、写真でクリックした位置の色を取得するプログラムを作りました。

index.html(画像を表示し、クリックしてもらうページ)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>画像の色を取得</title>
<script type="text/javascript">
<!--
function clickhandler(event) {
        if (!event) { event = window.event; }
        var hx, hy;
        // クリックした位置の座標を取得
        if (document.all) { // for IE
                hx = event.offsetX;
                hy = event.offsetY;
        } else {
                hx = event.layerX;
                hy = event.layerY;
        }
        window.open('imagecolorat.php?x=' + hx + '&y=' + hy, 'imagecolorat', 'toolbar=no,location=no,directorybuttons=no,width=200,height=180');
}
//-->
</script>
</head>
<body>
<p>クリックしてね!</p>
<div onclick="clickhandler(event)" style="position:fixed"><img src="img/test.png"></div>
</body>
</html>

imagecolorat.php(色情報を表示するスクリプト)

<?php
$x = $_GET['x'];
$y = $_GET['y'];
$im = imagecreatefrompng('img/test.png');
$rgb = imagecolorat($im, $x, $y); // 指定した座標の色を取得
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$hex = sprintf('%02X', $r) . sprintf('%02X', $g) . sprintf('%02X', $b); // 16進数に変換
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>画像の色を取得</title>
</head>
<body>
<p>x座標:<?php echo $x; ?> y座標:<?php echo $y; ?></p>
<div><img src="imagecolor_sample.php?r=<?php echo $r; ?>&g=<?php echo $g; ?>&b=<?php echo $b; ?>"></div>
<p>R:<?php echo $r; ?> G:<?php echo $g; ?> B:<?php echo $b; ?><br>#<?php echo $hex; ?></p>
<!-- html -->
</body>
</html>

imagecolor_sample.php(色見本の画像を作成するスクリプト)

<?php
$r = $_GET['r'];
$g = $_GET['g'];
$b = $_GET['b'];

// 塗りつぶし画像を作成
$im = imagecreatetruecolor(50, 50);
$color = imagecolorallocate($im, $r, $g, $b);
imagefill($im, 0, 0, $color);

header ('Content-type: image/png');
imagepng($im);
imagedestroy($im);

imagecolorat(GDライブラリが必要)を使って、色情報を取得しています。
クリックした位置の座標はJavaScriptで取得し、imagecolorat.phpに渡しています。
解析したい画像は、imgディレクトリにtest.pngという名前で保存してください。
アップロード機能はつけていません。

こんな感じに色情報を取得できます。
RGBの値、HTML等で利用する16進数の色コードを表示します。
ちなみに色見本に関しては、imagecolor_sample.phpで作った画像を表示しています。

画像の色を取得



<発表>
「Web上のいろいろな文章をJess(日本語小論文評価採点システム)にかけてみた」という題目で発表しました。
今回使った文章は、僕のブログ記事(8.3点)伊藤ハムのお詫びの文章(8.8点)、安藤裕子『鐘が鳴って 門を抜けたなら』の歌詞(3.0点)です。点数は10点満点です。
どうでもいい話ですが、安藤裕子さんの歌詞の評価が気に入りません(笑)
日本語解析に関しては、PHPでは形態素解析という手法が使えるようです。
ChaSenというものがあります。


<コードリーディング ~まんじゅうCMSを読んでみよう~>
CakePHP1.2で作られた、まんじゅうCMSのソースコードを読みました。
プラグインで機能を拡張できるようです。
今回MICKさんが発表していた、CakePHPのプラグインの話に関連しているので、試してみる価値は十分あります。


次回は11月16日開催予定です。
http://events.php.gr.jp/にて告知・参加募集します。

SE勉強会レポート (2008/10/19)

パーマリンク 2008/10/20 21:14:47 著者: おみう
カテゴリ: SE勉強会レポート

第15回高蔵寺SE勉強会レポートです。

<宿題&コーディング品評会>
お題:この場所の裏側はどこ?
「GoogleMaps上の任意の位置をクリックすると、その場所の地球の裏側の地図を表示するようにしてください。」という宿題でした。

今回はCakePHPではなく、普通のPHPで作りました。

index.php(一部修正)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Maps JavaScript API Example</title>
    <script src="http://maps.google.com/maps?file=api&v=2&key=(Google Maps API Key)"
      type="text/javascript"></script>
    <script type="text/javascript">
    //<![CDATA[
    function load() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.setCenter(new GLatLng(35.2653, 137.0428), 17);
      }
      
      GEvent.addListener(map, 'click', function(overlay, point) {
        if (point) {
          if (point.x > 0) {
            var x = point.x - 180;
          } else {
            var x = point.x + 180;
          }
          var y = point.y * -1;
          window.open('http://~/reverse.php?x=' + x + '&y=' + y, 'reverse');
        }
      });
    }
    //]]>
    </script>
  </head>
  <body onload="load()" onunload="GUnload()">
    <div id="map" style="width: 500px; height: 300px"></div>
  </body>
</html>

reverse.php(一部修正)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Maps JavaScript API Example</title>
    <script src="http://maps.google.com/maps?file=api&v=2&key=(Google Maps API Key)"
      type="text/javascript"></script>
    <script type="text/javascript">
    //<![CDATA[
    function load() {
      var x = <?php echo $_GET['x']; ?>;
      var y = <?php echo $_GET['y']; ?>;
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.setCenter(new GLatLng(y, x), 10);
        var marker = new GMarker(new GLatLng(y, x));
        map.addOverlay(marker);
      }
    }
    //]]>
    </script>
  </head>
  <body onload="load()" onunload="GUnload()">
    <div id="map" style="width: 500px; height: 300px"></div>
  </body>
</html>

地図上の任意の位置をクリックすると、新しいウィンドウが開き、「地球の裏側の地図」が表示されます。
特にこれといった工夫はしておりません。
index.phpのほうで、「地球の裏側」の緯度・経度の計算をしています。


<開発 BakeSaleを触ってみよう>
CakePHP1.2で開発されたBakeSaleをインストールして、ちょっと使ってみました。

少々ミスがあったものの、何とかインストールしてみました。
せっかくですので、「支払い方法」をカスタマイズしてみようと思ったのですが、いまいちよくわかりませんでした。
「代引き」とか「銀行振り込み」を組み込みたかったです。
クレジットカードを持っていない or オンラインでクレジットカードを使うのが不安という人も多いので、代引きは必須だと思います。


<ブログ発表>
最近ホットな「Google ストリートビュー」の記事と、それに関連する大学のレポートを発表しました。

このレポートは、「自分の好きな内容で小論文を書いて、日本語小論文 評価採点システム(JESS)にかけてみよう」という授業のために書いたものです。
JESSというのは、小論文の読みやすさ・論理構成・内容などを評価してくれる、画期的なシステムです。
どうやら、Perlで作られているようです。
詳しい仕組みをもっと調べてみたいです。

SE勉強会レポート (2008/10/5)

パーマリンク 2008/10/06 20:14:27 著者: おみう
カテゴリ: SE勉強会レポート

例によって、第14回高蔵寺SE勉強会レポートです。


<宿題&コーディング品評会>
宿題の準備 ~FlashDevelopをインストールしてみた~で触れたとおり、CakePHPとFlashを連携させて何か作ろうという宿題でした。

CakeConnect 0.2というものを利用します。

まずは、CakePHP側のソースコード。

<controllers/pages_controller.php>

<?php
class PagesController extends AppController
{
    var $uses = array('Bbs');
    
    function display(){
        // 書き込み処理
        if (!empty($this->data['Bbs'])) {
            $this->Bbs->save($this->data);
        }
        
        $data = $this->Bbs->find('all');
        $this->set('data',$data);
    }
}

<views/pages/display.ctp>

<?php
foreach ($data as $i):
    echo $i['Bbs']['name'] . '(' . $i['Bbs']['message'] . ')' . "\n";
endforeach;


<データベース(テーブル名:bbs)>

create table bbs (
id serial not null primary key,
name text not null,
message text not null
);


続いては、CakeConnect側の準備。
以下のようなmxmlファイルを作ります。
CakeConnect 0.2のページにある、サンプルのアーカイブを流用すると楽です。
(長すぎて見づらいです。ごめんなさい。)

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="initApp()" width="500" height="450">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import flash.display.*;
			import flash.text.*;
			import net.hogepiyo.cake.*;
			import net.hogepiyo.cake.events.*;
			
			private var server:CakeConnect;
			
			private function initApp():void {
				this.server = new CakeConnect();
				/*
					通信結果を受け取るクロージャを設定する
				*/
				this.server.fault = this.fault;
				this.server.result = this.result;
				
				/*
				    クロージャを設定しない場合
				    CakeConnectからカスタムイベントが発行されるため
				    addEventListenerで拾うこともできる。
				    
				    this.server.addEventListener(CakeResultEvent.RESULT, this.hogeHandler);
				*/
				
				/* 
					通信中に操作をロックするDisplayObjectを指定する。
					この場合、Application全体が操作不能になる。
				*/
				this.server.lock = this;
			}
			
			//SWXConnecterの場合、dataの型はString以外の可能性があるため注意
			private function result(data:String):void {
				bbs_body.text = data;
			}
			
			private function fault(data:String):void {
				Alert.show(data, "通信失敗");
			}
			
			private function run(connecter:String):void {
			    var args:Object = null;
				/*
					CakePHPのルートディレクトリと
					アクセスするコントローラを指定する。
				*/
				this.server.url = "http:// … /flash_bbs/";
				this.server.controller = "pages";
				
			    /*
			        コネクタとアクセスするアクションを指定し、
			        アクションへ渡す引数をserver.call()へ渡して通信開始
			    */
				switch(connecter) {
					case "display":
						this.server.connecter = new URLConnecter();
						this.server.action = "display";
						/*
							コネクタの設定(以下は全てデフォルト値のため、設定不要)
							
							this.server.connecter.setting = {
						        timeout: 30, //タイムアウトする秒数
								format: "text", //xml, e4xなど
								method: "POST"
							}
						*/
					
						/*
							GET or POSTでデータを送る場合
							POSTに指定するとコントローラの$this->params[form]へ、
							GETに指定するとは$this->params[url]へデータが格納される。
							
						*/
						args = {"data[Bbs][name]":  namae.text, "data[Bbs][message]": message.text}
						
						/*
							その他通信方法
							
							コントローラの$this->dataへデータを格納させる場合
    						args = {"data": "arg"}
    						
							$this->dataへCakePHPのフォーム風にデータを格納させる場合
							args = {"data[Model][column]": "arg1", "data[Model][column2]": "arg2"}
							
    						URL形式でデータを送信する場合 (/controller/action/arg1/arg2)
							※日本語は文字化けする可能性があるため注意。
							args = ["arg1", "arg2"]
						*/
						break;
				}
				this.server.call(args);
			}
			
		]]>
	</mx:Script>
	<mx:Panel width="100%" height="100%" title="FlashでBBS" horizontalAlign="center">
	<mx:Form>
	    <mx:Label text="Flashで作った簡易BBSです。" width="100%" fontSize="13" fontWeight="bold"/>
	    <mx:FormItem label="お名前" width="100%">
	        <mx:TextInput width="100%" id="namae"/>
	    </mx:FormItem>
	    <mx:FormItem label="メッセージ" width="100%">
			<mx:TextInput width="100%" id="message"/>
		</mx:FormItem>
        <mx:HBox width="100%" horizontalAlign="right">
	        <mx:Button label="送信" click="this.run('display')"/>
        </mx:HBox>
	</mx:Form>
	<mx:Text id="bbs_body">
	</mx:Text>
	</mx:Panel>
</mx:Application>

掲示板です。CakePHPが出力するテキストをFlash内に埋め込んでいます。
下の図のような感じになります。
文字化けするらしいので、日本語はできないようです。


宿題に引き続き、発表でした。
僕は準備していなくて発表できませんでした。ごめんなさい。
一応ネタ(CakePHPで作った小学校クラス会サイト)は考えていたので、次の機会には必ず発表します。

コードリーディングでは、BakeSaleのコードを読みました。
なかなか高性能です。ソースコードを理解するのが大変ですが、勉強になります。


<おまけ>
パンダちゃんの送別会のついでに、僕の誕生日パーティーを開いてもらいました。
本当にありがとうございます!
一六社の近くにある旬家亭という素敵なレストランでごちそうをいただきました。
僕は20歳になりましたので、合法的に飲酒できるようになりました。
ワインもいただきましたが、渋いです。
味覚はまだお子様のようです…

20歳になったついでに(?)、ブログの左側のプロフィールを更新しました。

SE勉強会レポート (2008/9/21)

パーマリンク 2008/09/22 17:46:12 著者: おみう
カテゴリ: SE勉強会レポート

高蔵寺SE勉強会レポートです。


<宿題&コーディング品評会>
今回は「CakePHPの新しい機能を発見しよう」という宿題でした。
CakePHP1.2の新機能の一つである、「AuthComponent」を使ってみました。
(参考サイト)
【CakePHP】AuthComponentについてのまとめ 【ざっくり基本編】

users_controller.php

<?php
class UsersController extends AppController
{
    var $name = 'Users';
    var $helpers = array('Html','Form');
    var $components = array('Auth'); // AuthComponentの宣言
    
    function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('add','index'); // ログインを免除するactionを指定
    }
    
    /*
     * インデックス
     */
    function index() {
    }
    
    /*
     * ログイン
     */
    function login() {
    }
    
    /*
     * 秘密のページ
     */
    function secret() {
        $this->set('username',$this->Auth->user('username'));
    }
    
    /*
     * ログアウト
     */
    function logout() {
        $this->Session->setFlash('お疲れ様でした。');
        $this->Auth->logout();
        $this->redirect(array('action' => 'index'));
    }
    
    /*
     * ユーザ追加
     */
    function add() {
        if (!empty($this->data)) {
            $this->User->create();
            $this->User->save($this->data['User']);
            $this->redirect(array('action' => 'index'));
        }
    }
}

login.ctp

<?php
e($session->flash('auth'));
e($form->create('User',array('action' => 'login')));
e($form->input('username',array('type' => 'text')));
e($form->input('password'));
e($form->submit());
e($form->end());

add.ctp

<?php
e($form->create('User',array('action' => 'add')));
e($form->input('username',array('type' => 'text')));
e($form->input('password'));
e($form->submit());
e($form->end());

secret.ctp

<p>こんにちは、<?php e($username); ?>さん</p>
<p>このページはパスワードで保護されています。</p>
<p><a href="/users/logout/">ログアウト</a></p>

ちなみに、パスワードは自動で暗号化してくれるようです。
SHA1を使っているらしいです。
http://manual.cakephp.org/ja/view/566/暗号化の方法を変更する


<開発>
午後からは、「普段やれないことをやってみよう」というテーマで、各自黙々と開発しました。
僕は以前やりかけていた「チャット」を、CakePHP1.2でもう一度作り直しました。
Ajaxを使うことになっていたので、データの読み込みをAjaxでやってみようと思います。


次回は10月5日(日)の予定です。どうでもいい話ですが、僕の誕生日です。

1 2 3 >>

2018年4月
 << <   > >>
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          

Name:おみう

某国立大学文学部の学生。
英語学(生成文法など)を勉強している。

安藤裕子(歌手)と北乃きい(女優)のファンであり、安藤裕子のライブによく行っている。

子どもと遊ぶサークルに所属しているが、サークル内では「ヒゲ」(←子どもにつけられた)と呼ばれている。

サークル以上に、某予備校の模試監督員アルバイトに精を出しており、模試監督ネタがブログで連載になりつつある。

文系学生にしてはパソコンにかなり精通しており、高蔵寺SE勉強会で勉強をしている。


詳しいプロフィールを見る?

メールを送る?

検索

XMLフィード

16ブログ     powered by b2evolution free blog software