2013年3月25日月曜日

2013/3/15 新幸丸 マダイ

船宿:新幸丸(出船12:30沖上がり18:30)
船長:新一船長
ポイント:御宿沖:55~75m
潮回り:中潮(干潮12:00満潮18:00)
天気:晴れ
タックル:シマノ LIGHT GAME CI4 スピニング TYPE73 M230 + シマノ レアニウム CI4+ C3000HG + 夢屋12ヴァンキッシュ 2500PE0820スプール
仕掛け:ラインPE0.6号 リーダー2.5号 5m ビンビンテンヤ他

釣友のH氏に誘われて、仕事を休み午後船で行ってきました。
仕事を休んだバチが当たったのかH氏の家まで予定では1時間半くらいのところを渋滞に巻き込まれて3時間掛かって到着。
待ち合わせの30分前着で出発したので30分遅れで済んだのが幸いし、大船長のお宅に集合時間の10分前くらいにギリギリセーフで到着。

が、しかし、この日は常連さんのお連れさんが遅れているとかで出船が30分遅れました。。。(汗)

何はともあれ出船し、ポイントへ到着。
水深は80m前後。
ひとまず12号のカブラを投入し、楽に底取が出来たので徐々に軽くし8号をメインに使用。

しかし、この日は全くと言っていいほどアタリが無く、H氏に至っては3回あったかどうかだったようで、仕掛けを回収したら「くっついてた」小さいオニカサゴ1匹と大撃沈。
自分もアタリは6回ほどあり、そのうち3回は餌を取られ、25cmくらいのマハタ、小さいカサゴと更に小さいホウボウらしくものを釣り、マハタだけお持ち帰り。。。

アタリが取れて無いのならまだしもエサ取りも全くなく、餌のエビを付け替える必要も全くない状態で、この釣りで初めて最初にもらった餌が半分近く残りしました。

船中でもマダイは数枚、ワラサが2本くらいと撃沈です。

そして翌日以降、やたらと中鯛、大鯛が釣れ出してました。。。

次回こそは!と思うものの去年の6月以降、釣れないループにハマってるようで、なんともかんとも。(^_^;)

どうせ釣れないならクーラーとか持って行かなければ釣れたりして。(苦笑)
# そういえば、フィクセルPremiumを買ってから釣れてないような…。

2013年3月8日金曜日

PodCast用のRSS出力ページをASP.NETで作ってみた

何となく作ってみた。(^_^;)

概要


指定したディレクトリ直下にある、.mp3 .m4a .m4v .mp4 .wma .wmv .jpg をPodCast用のRSSを出力する。
キーワードによる絞り込み、除外フィルタを行う。

コンパイルが必要無いようにASP.NETのWebFormでインラインで記述。
使用言語はC#
IISと.NET Framework 3.5 以上が導入されていること。

使い方


ファイル名に、「やまだ」または「すずき」を含むものを抽出する場合は、keyword=やまだ|すずき を引数で指定する。
逆にフィルタしたい場合は、fillter=やまだ|すずき を指定する。
「やまだ たろう」 「やまだ じろう」 「やまだ さぶろう」 とファイルがあって、さぶろうを除外したい場合は、keyword=やまだ&filter=さぶろう と指定する。

当初、ファイルは非公開ディレクトリに配置してダウンロード用のASPXを介してダウンロードさせようと思ったが、iTunesの場合、URLのファイルの拡張子とメディアタイプが不一致だと、アイテムを表示しないような仕様のため、ダウンロード用のファイルは公開ディレクトリに配置する必要がある。

MVCを使えば、URLを/test/podcast/hoge.mp4 のようにすることが出来るので上手くいけそうだが、ひとまずコンパイルしたくなかったので今回は見送った。

ソース

<%@ Page Language="C#"  Debug="true" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Text.RegularExpressions" %>
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.ServiceModel.Syndication" %>
<script runat="server">
    // タイトル
    private string castTilte = "Tilte";
    //キャストの説明
    private string castDescription = "Description";
    // 格納ディレクトリ
    private string searchDir = @"c:\test";
    // 配信URL
    private string castUrl = "http://xxx.xxx.xxx.xxx/test/";
    // ファイルタイプ
    private Dictionary<string, string> fileTypes  = new Dictionary<string, string>()
    {
        {".mp3", "audio/x-mp3"},
        {".m4a", "audio/x-m4a"},
        {".m4v", "video/x-m4v"},
        {".mp4", "video/x-mp4"},
        {".jpg", "video/x-mp4"},
        {".wma", "audio/x-ms-wma"},
        {".wmv", "video/x-ms-wmv"}
    };
      
    protected void Page_Load(object sender, EventArgs e)
    {
        string keyword = (string) Request.QueryString["keyword"];
        string filter = (string) Request.QueryString["filter"];
        Response.ContentType = "application/rss+xml";
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        XmlTextWriter xmlWriter = new XmlTextWriter(Response.Output);
        SyndicationFeed feed = new SyndicationFeed();
        feed.Title = new TextSyndicationContent(castTilte);
        feed.Description = new TextSyndicationContent(castDescription);
        List<syndicationitem> items = new List<syndicationitem>();
        
        searchFile(searchDir, items, keyword, filter);
        
        feed.Items = items;
        feed.SaveAsRss20(xmlWriter);
        Response.End();
    }
    
    // ファイルを検索してフィードアイテムを作成する
    private void searchFile(string dir, List<syndicationitem>items, string keyword, string filter)
    {
        IEnumerable<fileinfo> fileList = Directory.GetFiles(dir, "*.*", System.IO.SearchOption.AllDirectories).Select(x => new FileInfo(x));
        Regex keyRegex = new Regex(String.Format(@"({0}).*\.mp3|({0}).*\.m4a|({0}).*\.m4v|({0}).*\.mp4|({0}).*\.wma|({0}).*\.wmv|({0}).*\.jpg", keyword), RegexOptions.IgnoreCase);
        IEnumerable<fileinfo> keyFiles = null;
        keyFiles =
            from file in fileList
            where keyRegex.IsMatch(file.Name)
            orderby file.LastWriteTime descending
            select file;
        IEnumerable<fileinfo> filterFiles = null;
        if (filter == null)
        {
            filterFiles = keyFiles;
        }
        else
        {
            Regex filterRegex = new Regex(String.Format(@"^(?!.*({0})).+$", filter), RegexOptions.IgnoreCase);
            filterFiles =
                from file in keyFiles
                where filterRegex.IsMatch(file.Name)
                orderby file.LastWriteTime descending
                select file;
        }
        
        foreach (FileInfo target in filterFiles)
        {
            string fname = Path.GetFileNameWithoutExtension(target.Name);
            string extension = target.Extension;
            string fileType = fileTypes[extension.ToLower()];
            SyndicationItem item = new SyndicationItem();
            string title = fname;
            item.Title = new TextSyndicationContent(title);
            item.PublishDate = new DateTimeOffset(target.LastWriteTime);
            SyndicationLink link = SyndicationLink.CreateMediaEnclosureLink(new Uri(castUrl + HttpUtility.UrlEncode(fname) + extension), fileType, target.Length);
            item.Links.Add(link);
            items.Add(item);
        }
    }
</script>