カテゴリ: 勉強会など

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

第10回高蔵寺SE勉強会!

パーマリンク 2008/07/07 14:35:38 著者: kumaold メール
カテゴリ: 仕事, 勉強会など

今回から勉強会の名前が変わって、『高蔵寺SE勉強会』になりました。
といってもな中身はいつも通りなわけですが。

1.宿題

今回の宿題はこれ↓

[出題者]パンダさん [お題]言語:PHP

PHPでWebサイトの情報を取得・解析し表示してください。
取得解析方法は何でも結構です!


以前から似たようなことはやっていたので、そのときに作ったものですが。

米軍の台風情報が5日先までの進路と最接近時間があって重宝するんですよ。
ですが、気象学用語とかでページが分かりにくい。
そこで日本語に翻訳をする串みたいなものを作ったわけです。

JTWC(米軍合同台風警戒センター)勝手に翻訳串

非常に手抜きなコードで晒すほどでもないんですが一応。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" href="http://metocph.nmci.navy.mil/jtwc.css">
    <title>米軍合同台風警戒センター(JTWC) - 勝手に翻訳串</title>
</head>

<body leftmargin="0" topmargin="0">

<?php
$url = "http://metocph.nmci.navy.mil/jtwc.php";
$html = file($url);
if(!$html) echo "Error!\n";

//誤挿入データ "," 置換
$html = str_replace(",\n", "", $html);

//翻訳データ(メッセージ)
$en[]="Joint Typhoon Warning Center Products";
$jp[]="米軍合同台風警戒センター";
$en[]="Current Northwest Pacific/North Indian Ocean* Tropical Systems";
$jp[]="現在の北西太平洋/北インド洋の熱帯地域";
$en[]="Current Central/Eastern Pacific Tropical Systems";
$jp[]="現在の中央/東太平洋の熱帯地域";
$en[]="Current Southern Hemisphere Tropical Systems";
$jp[]="現在の南半球熱帯地域";
$en[]="Current Significant Tropical Weather Advisories";
$jp[]="現在の重要な熱帯気象報告";
$en[]="Western/South Pacific Ocean Significant Tropical Weather Advisory";
$jp[]="西/南太平洋の重要な熱帯気象注意報";
$en[]="Western/South Pacific Ocean";
$jp[]="西/南太平洋";
$en[]="Indian Ocean";
$jp[]="インド洋";

$en[]="Please REFRESH or RELOAD your browser to view the most current";
$jp[]="最新のデータを見るためには、ブラウザを再起動するか、再読込してください";
$en[]="Includes Bay of Bengal and Arabian Sea";
$jp[]="ベンガル湾とアラブ海を含みます";
$en[]="data&nbsp;&nbsp;***";
$jp[]="&nbsp;***";
$en[]="No Current Tropical Cyclone Warnings.";
$jp[]="現在、熱帯低気圧警報はありません。";

$en[] = "Issued at";
$jp[] = "発表:";
$en[] = "Reissued at";
$jp[] = "新発表:";
$en[] = "Corrected";
$jp[] = "訂正版";
$en[] = "Final Warning";
$jp[] = "最終警報";
$en[] = "TCFA Text";
$jp[] = "熱低発達警報テキスト";
$en[] = "TCFA Graphic";
$jp[] = "熱低発達警報予想図";
$en[] = "TC Warning Text";
$jp[] = "台風進路テキスト";
$en[] = "TC Warning Graphic";
$jp[] = "台風進路予想図";
$en[] = "Ship Avoidance Graphic";
$jp[] = "船舶回避図";
$en[] = "IR Satellite Imagery";
$jp[] = "赤外衛星画像";
$en[] = "3 Hour Position Update Graphic";
$jp[] = "3時間毎の最新位置図";
$en[] = "Multispectral Satellite Imagery";
$jp[] = "マルチスペクトル感応性衛星画像";
$en[] = "Satellite Fix Bulletin";
$jp[] = "衛星位置報告";
$en[] = "Satellite Image";
$jp[] = "衛星画像";
$en[] = "IR Image";
$jp[] = "赤外画像";
$en[] = "Visible Image";
$jp[] = "可視画像";
$en[] = "Prognostic Reasoning";
$jp[] = "今後の予想";
$en[] = "Valid";
$jp[] = "有効";
$en[] = "Warning";
$jp[] = "警報";
$en[] = "Data";
$jp[] = "用データ";


//翻訳データ(単語)
$en[] = "Super Typhoon";          $jp[] = "台風(STY)";
$en[] = "Typhoon";                $jp[] = "台風(TY)";
$en[] = "Tropical Depression";    $jp[] = "熱帯低気圧(TD)";
$en[] = "Tropical Storm";         $jp[] = "熱帯低気圧(TS)";
$en[] = "Tropical Cyclone";       $jp[] = "熱帯低気圧(TC)";
$en[] = "Formation Alert";        $jp[] = "発達警報";
$en[] = "jtwc/";
$jp[] = "http://metocph.nmci.navy.mil/jtwc/";

//翻訳
$html = str_replace($en, $jp, $html);
$html = preg_replace("/([0-9]{2})\/([0-9]{2})00Z/e", "'$1日$2時(UTC)'", $html);

for($i=8; $i<=26; $i++){
    echo $html[$i];
}
menu();
for($i=48; $i<=54; $i++){
    echo $html[$i];
}
text();
for($i=59; $i <= count($html) - 1; $i++){
    echo $html[$i];
}

function menu(){
    echo
    "<!-- Code inserted by PHP -->
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/exercise.php'>製品の使用例</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/jtwc/menu/JTWC_mission.html'>役割の説明</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/jtwc/menu/jtwc_dis.html'>製品とサービスの案内</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/jtwc/legend/graphic_key.html'>台風進路予想図の凡例</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/jtwc/legend/ship_key.html'>船舶回避図の凡例</a></b> </td></tr>
    <tr><td align=center><b><a href='https://pzal.nmci.navy.mil/windprob'>強風確率(要認証)</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/jtwc/menu/names.php'>台風名</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/cgi-bin/abpwcreate.cgi'>地図表示の警報/注意報</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/jtwc/atcr/atcr_archive.html'>年次熱帯低気圧報告</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/jtwc/best_tracks/'>ベストトラック</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/jtwc/menu/JTFAQ.html'>よくある質問(FAQ)</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/jtwc/pubref/reference.html'>公的な参考サイト</a></b> </td></tr>
    <tr><td align=center><b><a href='http://metocph.nmci.navy.mil/'>アメリカ海軍海事予報センター</a></b> </td></tr>
    <tr><td align=center><b><a href=></a></b> </td></tr>
    <!-- End code inserted by PHP -->";
}

function text(){
    echo
    "                このウェブサイトのJTWC製品は米国政府機関による使用を目的とします。<br>
                     あなたの国や地方、地域に関係する熱帯低気圧のためには、<br>
                     国の気象機関か適切な世界気象機関地域専門気象センターを参考にしてください。\n";
}
?>

</body>
</html>


はい、また手抜きで申し訳ありません。

最近実用性のあるような無いようなコードばかり書いてます。

2.発表
CakePHPでAjax [入門編] by MICKさん

CakePHPでも意外と簡単にAjaxが扱えるんだなぁ~と思いました。 余裕ができたらAjaxにもチャレンジしたいと思います。

CakePHPでの安全なサイトの作り方1~SQLインジェクション~ by あつさん

セキュリティ関連シリーズの第1回はSQLインジェクションでした。

不正なSQLが実行されないようにするとともに、実行されても被害を最小に抑えるような対策を常に忘れないようにしたいです。

3.開発

前回の続きをやろうと思ったところで、・・・なんか開発鯖に繋がらない。

自宅にもpingが通らない、と思って調べてみたら加子母付近が物凄い雨のようだったのでどうやら停電のようです。

開発鯖の方は電源直繋ぎな上にBIOSで電源断後に立ち上がる設定をしていなかったのでどうしようもありません。


やっぱ夏場にUPSは必須アイテムですね。


APC APC ES 500 BE500JPAPC APC ES 500 BE500JP

エーピーシー・ジャパン 2003-07-18
売り上げランキング : 427
おすすめ平均

Amazonで詳しく見る

第9回SE勉強会!

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

今日は高蔵寺で第9回SE勉強会でした。

1.宿題


今回の宿題は、またまた自由課題的なことだったわけですが、
ネタが思いつかなくて手抜きのライブラリ紹介みたいなものになってしまいました。

[出題者]MICK [お題]言語:PHP

PHPで画像を扱った何かを作ってみてください。
ちょっとしたものでも、おぉー♪というものでも何でも結構です!


元々は、phpの画像処理まわりを調べていたら偶然出てきたものです。
その名は、phpOCR ←DLには登録(regist)が必要

名前のとおり、画像から文字認識するライブラリです。
海外発らしく日本語のドキュメントが一切なくて苦労しました。


とりあえずまずは見た方が早いので→サンプル改


今回はコードを書くと長くなるので改造したサンプルのZIPを見てください。
その代わりに、各ファイル構成と原理・注意を解説します。

+OCR
  +img             登録する文字の画像をSJISコード.pngで保存
     xxxx.png      (ex.あ→820a.png)
  +strage          登録した文字のバイナリデータが入る
     Xxxxxxxxxxxxxxxxx.char    自動生成
  +test            読み取る画像を1画像1文字で1~連番で保存
     X.png
  OCR.class.php    メインライブラリ
  char.object.php  付随ライブラリ
  config.php       設定(特に編集の必要なし)
  regist_chars.php 新たな文字を追加する際に編集&実行
  charcode.php     SJISコード確認用補助ツール
  sample.php       公式サンプルを改造したもの


本来は日本語など対応しているわけもないんですが、追加機能で画像・文字をあらかじめ記録させておけば、読み取れるようです。

登録作業は、文字の画像をSJISコード.pngでimgディレクトリに置き、regist_chars.php を編集後実行します。完了するとstrage ディレクトリ内にファイル名が登録した文字で始まるバイナリデータファイルが作成されます。


今回、基本文字として登録したデータはMSゴシック 12pxです。
そのため、読み取れるデータはMSゴシック 12pxで画像上に描画したデータの整数倍比率拡大(要はドット対応比がそのまま)になります。

なお、色に関しては2階調かそれ以上でも結構ですが、文字・地のどちらかは黒(#000000)か白(#FFFFFF)である必要があるようです。

あとは、1文字1画像なので何らかの分割処理を挟めば実用性も上がるかと。


長くなりましたがこんなライブラリもあるということで。

 

2.発表
・CSSの基本と共通化サンプル by MICKさん

開発者のやる気をアップさせるようなデザインということで実にきれいにまとまっていてすごいなと思いました。

・XML入門 by パンダさん

前回の宿題をやったときからXMLって処理が面倒だと思っていましたが、扱い方次第だということがよく分かりました。 XMLは色々応用が利きそうなので、勉強していきたいです。

 

3.開発?


今回から何か新しいことをやっていこうということで、「地域HP用コンテンツの制作」に取り掛かることになりました。


前々から、Google mapsと携帯GPSを使って何かを作ってみたかったので、地域に特化した地図を作っていこうと思いました。

携帯版からは、GPSで現在地から最寄の施設などを検索できるようにしようと思います。

type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

第8回SE勉強会!

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

さて、本日も恒例?の第8回SE勉強会でした。

今回は、あつさんからの出題でいつもとは一風変わった宿題でした。
Amazon Webサービスを使ってPHP/JavaScpiptで何か作るというものです。

まあ自由課題なんで何を作ってもいいわけなんですが、そもそもAWS自体扱ったことがなかったので最初はサンプルコードの理解だけで苦労しました。


しかし普通~にフォームからデータ渡して表示だけでは面白くなかったので、また今回も妙なことをやらかしましたw

説明も面倒なので実際に使ってみましょう。

携帯・PCなどからこちらに、件名(Subject:)を検索ワードで送ると、検索結果が数秒後にメールで返信されてきます。
検索対象は本(書籍)のみ。売り上げ上位最大10件表示。

amazon@kashimo.com[@は半角に]

※文字化け問題は解消されたので日本語混在でも使えるようになりました。


仕事と正反対なソフト群ですが、自宅鯖環境はこんな感じです。
このプロセスを実行させるためには、メールサーバソフトとの連携が不可欠です。

XMailはWindows上で動作するものの中ではかなり拡張性が高く、例えばメール受信時にプログラムを実行させることができます。

それを応用し、今回のシステムを作成しました。

OSWindows Server 2003 R2 SP2
WebサーバInternet Information Service(IIS) 6.0
メールサーバXMail 1.25
データベースMySQL 5.0.51a

 

MailRoot\cmdaliases\kashimo.com\amazon.tab を保存

"external" …受信時にプログラム実行
"0"     …優先度標準
"30"     …タイムアウト30秒
"php"    …phpを実行
"D:\WWW\test\amazon\amazon.php" "$(FROM)" "$(FILE)"
…実行するphpファイルパスと、メールのFROM:、メールのパスを引数にする

注:本当はタブ区切りの全て横1行で表記し、最後は改行します。


phpファイル(コマンドライン実行なのでインタフェイスなし)

<?php
//最後のメール送信部分はスパム対策でFROM:等は伏せておきます。

/******************************/
/*  Amazonメール検索システム  */
/*                            */
/* amazon.php (FROM) (FILE)   */
/******************************/

$mailto  = $argv[1];    //送信元アドレスを取得
$mailtmp = $argv[2];    //メール一時ファイルのパスを取得
//メール一時ファイルのパス取得バグ修正
$mailtmp = substr($mailtmp, 4, strlen($mailtmp) - 4);

//メール一時ファイルを配列に格納
$maildata = file($mailtmp);
//ファイルオープンに失敗したとき
if (!$maildata) {
    $message .= "ファイルオープン失敗\n";
}
//ファイルオープンに成功したとき
else {
    //メールを1行ずつ読む
    for($i=0; $i < count($maildata); $i++) {
        //メールヘッダのタイトル(Subject:)に合致したらそれ以降を切り出し、UTF-8に変換
        if(ereg("Subject", $maildata[$i])) {
            $search_word = substr($maildata[$i], 8, strlen($maildata[$i]) - 8);
            $search_word = mb_convert_encoding(mb_decode_mimeheader($search_word), "UTF-8", "Shift_JIS");
            break;
        }
    }
    //以下、Amazon Web Serviceによる検索処理。
    //xmlで取得し、xml.phpで配列に格納する
    
    // 自分のアクセスキーID
    $AWSACCESSKEYID = "0X64123456789ABCDEF"; 
     
    // 自分のアソシエイトID
    $ASSOCIATETAG = "******-22";
     
    // APIのURL
    $API_BASE_URL   = "http://webservices.amazon.co.jp/onca/xml";
     
    //------- パラメータの値入力
     
    $SERVICE        = "AWSECommerceService";
    $OPERATION      = "ItemSearch";
    $API_VERSION    = "2004-10-04";
    $RESPONSEGROUP  = Medium;
    $KEYWORDS       = urlencode($search_word);
    $SEARCHINDEX    = "Books";    //"Blended";
    $ITEMPAGE       = "1";
    
    $SORTINDEX      = "salesrank";
    $CONTENTTYPE    = "text/xml";
     
    //------- リクエストURLの生成と出力
     
    // リクエストURL生成
    $api_url = sprintf("%s?Service=%s&AWSAccessKeyId=%s&AssociateTag=%s&Operation=%s&Version=%s&ResponseGroup=%s&Keywords=%s&SearchIndex=%s&ItemPage=%s&Sort=%s&ContentType=%s" ,
        $API_BASE_URL,
        $SERVICE,
        $AWSACCESSKEYID,
        $ASSOCIATETAG,
        $OPERATION,
        $API_VERSION,
        $RESPONSEGROUP,
        $KEYWORDS,
        $SEARCHINDEX,
        $ITEMPAGE,
        $SORTINDEX,
        $CONTENTTYPE
    );
    
    // 検索ワードが存在する場合に、商品検索
    if(isset($search_word)) {
        
        // XMLデータを取得
        $xml_data = file_get_contents($api_url);
        
        // XML パースライブラリーを読み込む
        include('xml.php');
        
        // XMLを連想配列に格納する
        $array_data = XML_unserialize($xml_data);
        
        // 検索結果が1つの場合は、階層を変化させる
        if ($array_data[ItemSearchResponse][Items][Item][0]) {
            $item_data = $array_data[ItemSearchResponse][Items][Item];
        }
        else {
            $item_data[0] = $array_data[ItemSearchResponse][Items][Item];
        }
        
        // 検索結果数の取得
        $total_results = $array_data[ItemSearchResponse][Items][TotalResults];
        
        // 検索ワードのメール用デコード処理
        $decode_keywords = mb_convert_encoding($search_word, "Shift_JIS", "UTF-8");
        
        $message .= $decode_keywords . "の検索結果\n";
        
        //検索結果が1件以上あれば
        if ($total_results != 0) {
            //検索結果数を表示
            $message .= $total_results . "件ありました。\n\n";
            
            // item の数だけループして出力
            foreach ($item_data as $item){
                //各項目を、メール用にSJISにデコードする。
                $message .= mb_convert_encoding($item[ItemAttributes][Title], "Shift_JIS", "UTF-8") . "\n";
                $message .= mb_convert_encoding($item[ItemAttributes][Manufacturer], "Shift_JIS", "UTF-8") . "\n";
                $message .= mb_convert_encoding($item[ItemAttributes][ListPrice][FormattedPrice], "Shift_JIS", "UTF-8") . "\n";
                $message .= mb_convert_encoding($item[DetailPageURL], "Shift_JIS", "UTF-8") . "\n";
                $message .= "====================\n";
            }
        }
        else {
            $message .= "該当商品が見つかりません。";
        }
    }
}

//メールアドレスの形式チェック
if(preg_match("/[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+/", $mailto)) {
    $subject = 'Amazon Mail Search';
    $headers = 'From: *****@*******.***' . "\r\n" .
                'Reply-To: *****@*******.***' . "\r\n" .
                'X-Mailer: PHP/' . phpversion();
    
    $send = mail($mailto, $subject, $message, $headers);
    if ($send) {
        echo "送信成功!\n";
    }
    else {
        echo "送信失敗!\n";
    }
}
else {
    echo "形式不正!\n";
}

?> 

※このサーバはエンコードがShift_JIS基準なのでそれに合わせた。

xmlの配列格納ではPHP XML Library, version 1.2bを使いました。

感想など
 実用性に関しては?ということで…
 今まであまり作ったことない方式でしたが、色々組み合わせて文字化けに苦労しながらも一式作れてよかったです。何かメール送受信を組み合わせたシステムなどに応用できたらいいかなと思います。

Windows Vista/XP で作る 最強の自宅サーバー (CD付)Windows Vista/XP で作る 最強の自宅サーバー (CD付)
タブロイド

ソーテック社 2007-12-15
売り上げランキング : 115577
おすすめ平均

Amazonで詳しく見る
by G-Tools
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