「tw」を含む日記 RSS

はてなキーワード: twとは

2009-06-12

メール返すのマンドクセ

ケータイメールに「実はだれそれとだれそれでどこそこ行こうって話になってるんだけど、今度遊びに行かない?大体何月何日ごろ予定してて、1泊かなーと思ってるんだけど。予定とかどう?」的なメールが届いた。

すいません。メール見るのめんどくさいんでTwで返事しました。Tw見てないだろうけど。

2008-10-10

Depeche Mode:Tour Of The Universe 2009

■TOUR OF THE UNIVERSE 2009/ヨーロッパツアー全日

May/5月

Sun 10th テルアビブ, Ramat Gan Stadium / イスラエル

Tue 12th アテネ, Terra Vibe Park / ギリシャ

Thu 14th イスタンブール, Santral Istanbul / トルコ

Sat 16th ブカレスト, Park Izvor / ルーマニア

Mon 18th ソフィア, Vasil Levski Stadium, Tuborg Greenfest / ブルガリア

Wed 20th ベオグラード, USCE Parc, Tuborg Greenfest / セルビア

Thu 21st ザグレブ, Arena, Tuborg Greenfest / クロアチア

Sat 23rd ワルシャワ, Gwardia Stadium / ポーランド

Mon 25th リガ, Skonto Stadium / ラトビア

Wed 27th ヴィルニアス, Zalgirio Stadionas / リトアニア

Sat 30th ロンドン, O2 Arena / イギリス

June/6月

Tue 2nd ハンブルグ, HSH Nordbank Arena / ドイツ

Thu 4th デュッセルドルフ, LTU Arena / ドイツ

Sun 7th LEIPZIG, Zentralstadion / ドイツ

Wed 10th ベルリン, Olympiastadion / ドイツ

Fri 12th フランクフルト, Commerzbank Arena / ドイツ

Sat 13th ミュンヘン, Olympiastadion / ドイツ

Tue 16th ローマ, Stadio Olimpico / イタリア

Thu 18th ミラノ, Stadio San Siro / イタリア

Sat 20th WERCHTER, TW Classic Festival / ベルギー

Mon 22nd ブラティスラバ, Inter Stadium / スロバキア

Tue 23rd ブダペスト, Puskas Ferenc Stadium / ハンガリー

Thu 25th プラハ, Slavia Stadium / チェコ

Sat 27th パリ, Venue TBC / フランス

Tue 30th コペンハーゲン, Parken Stadium / デンマーク

July/7月

Thu 2nd ベルゲン, Koengen / ノルウェー

Fri 3rd アルヴィーカ, Arvika Festival / スウェーデン

Sat 11th ポルト, Superbock Super Rock Festival / ポルトガル

http://www.emimusic.jp/intl/news/?id=intl_news&no=100?rssno=941

2007-10-30

[]55行で作るC#テンプレートエンジン

http://anond.hatelabo.jp/20071030034313二番煎じ

あまりのアホさに、作ってて気が狂いかけた

方針


using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Microsoft.CSharp;

delegate void ConvertTemplateDelegate(TextWriter tw, Dictionary<object, object> args);
static class TemplateGenerator {
    public static ConvertTemplateDelegate Generate(string code) {
        CompilerParameters param = new CompilerParameters();
        param.GenerateInMemory = true;
        param.ReferencedAssemblies.Add("System.Web.dll");
        CompilerResults rs = new CSharpCodeProvider().CompileAssemblyFromSource(param, ParseTemplate(code));
        if (0 < rs.Errors.Count) {
            StringWriter sw = new StringWriter();
            sw.WriteLine("Compile Error...");
            foreach (CompilerError err in rs.Errors)
                sw.WriteLine(err.ToString());
            throw new Exception(sw.ToString());
        }
        return (ConvertTemplateDelegate) Delegate.CreateDelegate(typeof(ConvertTemplateDelegate), rs.CompiledAssembly.GetType("Template", true).GetMethod("Convert"));
    }
    private static string ParseTemplate(string code) {
        using (StringWriter sw = new StringWriter()) {
            sw.WriteLine("using System; using System.Collections.Generic; using System.IO; using System.Web;");
            sw.WriteLine("public static class Template {");
            sw.WriteLine("public static void Convert(TextWriter tw, Dictionary<object, object> args) {");
            int index = 0;
            while (0 <= index &amp;&amp; index < code.Length) {
                int i = code.IndexOf("<%", index);
                sw.WriteLine("tw.Write(\"{0}\");", EscapeString(i < 0 ? code.Substring(index) : code.Substring(index, i - index)));
                if (0 <= i) {
                    i += 2;
                    int i2 = code.IndexOf("%>", i);
                    if (0 <= i2) {
                        string cc = code.Substring(i, i2 - i);
                        if (cc.StartsWith("="))
                            sw.WriteLine("tw.Write(HttpUtility.HtmlEncode(\"\"+({0})));", cc.Substring(1));
                        else
                            sw.WriteLine(cc);
                        i = i2 + 2;
                    }
                }
                index = i;
            }
            sw.WriteLine("}}");
            return sw.ToString();
        }
    }
    private static string EscapeString(string code) {
        return code.Replace("\\", "\\e").Replace("\"", "\\\"").Replace("\t", "\\t").Replace("\n", "\\n").Replace("\r", "\\r").Replace("\\e", "\\\\");
    }
}

サンプル C# コード。ためしにテンプレートから Xml 生成して、標準出力してみる。

class Program {
    static void Main(string[] args) {
        ConvertTemplateDelegate func = TemplateGenerator.Generate(TemplateEngine.Resource1.template);
        using (StringWriter sw = new StringWriter()) {
            Dictionary<object, object> arg = new Dictionary<object, object>();
            arg["title"] = "template sample";
            arg["data"] = new string[] { "foo", "fooo", "<strong>foooooooooo!</strong>" };
            func(sw, arg);
            Console.WriteLine(sw);
        }
    }
}

サンプルテンプレート

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title><%= args["title"] %></title>
  </head>
  <body>
    <h1><%= args["title"] %></h1>
    <table>
<% string[] data = (string[]) args["data"]; %>
<% for(int i = 0; i < data.Length; i++) { %>
      <tr bgcolor="<%= i % 2 == 0 ? "#FFCCCC" : "#CCCCFF" %>">
        <td><%= i %></td>
        <td><%= data[i] %></td>
      </tr>
<% } %>
    </table>
  </body>
</html>

出力例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>template sample</title>
  </head>
  <body>
    <h1>template sample</h1>
    <table>


      <tr bgcolor="#FFCCCC">
        <td>0</td>
        <td>foo</td>
      </tr>

      <tr bgcolor="#CCCCFF">
        <td>1</td>
        <td>fooo</td>
      </tr>

      <tr bgcolor="#FFCCCC">
        <td>2</td>
        <td>&lt;strong&gt;foooooooooo!&lt;/strong&gt;</td>
      </tr>

    </table>
  </body>
</html>

CodeDom 使って動的コンパイル……って、このコードのままだとセキュリティ的に大問題な気がするな。

素直に ASP.NET 使ったほうが楽だと直感した。

あと EscapeString すっごく自信ない。たぶん修正が必要だと思うw

2007-07-28

私の時間泥棒

1999 ICQチャットルーム ←テレホ時代

2000 チャットルーム、2ちゃんねる ←ISDN

2001 2ちゃんねる

2002 2ちゃんねるネトゲRO) ←フレッツADSL

2003 ネトゲRO

2004 ネトゲROTWなど混在)、IRC ←フレッツADSLモア2へ

2005 IRCmixi

2006 YouTube ←光回線

2007 ニコニコ動画(暫定)

表にしても面白…くないな、別に。

テレホ時代が懐かしすぎる。

ログイン ユーザー登録
ようこそ ゲスト さん