Account: (login)

More Channels


Are you the publisher? Claim this channel

Search in 125,767,458 RSS articles:

Channel Description:

システム開発屋ãŒã²ã£ãり語るã¼ã‚„ã

Page 1 | 2 | 3 | 4 | 5 | newer | newest

Latest Articles in this Channel:

  • 06/24/10--09:30: Goã§JSDeferred書ã„ã¦ã¿ãŸã€‚ (chan 1718684)
  • Goã¯Javascriptã«ä¼¼ãŸæ›¸ãæ–¹ãŒå‡ºæ¥ã‚‹ã®ã ã‘ã©ã€ãれを利用ã—ã¦ä½•ã‹æ›¸ã‘ãªã„ã‹ãªãƒ¼ã¨æ€ã£ã¦ã€cho45ã•ã‚“ã®JSDeferred書ã„ã¦ã¿ãŸã€‚
    ã“れを使ã†ã¨ã€JSDeferredã«ä¼¼ãŸäº‹ãŒå‡ºæ¥ã‚‹ã€‚

    cho45.stfuawsc.com

    JSDeferredSimple and clean asynchronous processing.SampleJSDeferred SamplesDownloadjsdeferred.jsNo c...

    http://cho45.stfuawsc.com/jsdeferred/
    サンプルã ã¨ã“ã‚“ãªæ„Ÿã˜ã€‚
    package main

    import . "deferred"
    import "syscall"
    import "http"
    import "xml"
    import "os"

    type feed struct {
        Entry []struct {
            Title string
            Link []struct {
                Rel  string "attr"
                Href string "attr"
            }
            Summary string
        }
    }

    func main() {
        Deferred().
            Next(func() string {
                return "「ã“ã®æˆ»ã‚Šå€¤ãŒ...ã€"
            }).
            Next(func(v string) {
                println("ã“ã“ã®å¼•æ•°ã«ãã‚‹ï¼:" + v);
            }).
            Next(func() {
                println("ã‹ã‘ã£ã“ã™ã‚‚ã®ã‚ˆã£ã¨ã„ã§ï¼");
            }).
            Loop(3, func(i int) {
                println(string("ABC"[i]) + ":ã¯ã„ï¼");
            }).
            Next(func() {
                println("ä½ç½®ã«ã¤ã„ã¦ã‚ˆãƒ¼ã„ã©ã‚“ï¼");
            }).
            Parallel([]interface{} {
                func() {
                    println("A:一番手ã ã—ã¡ã‚‡ã£ã¨æ˜¼å¯ã—ã¦ã‹ã‚‰è¡Œãã‹");
                    syscall.Sleep(1000*1000*300);
                    println("A:ã¡ã‚‡www");
                },
                func() {
                    syscall.Sleep(1000*1000*200);
                    println("B:ãŸã¶ã‚“ï¼’ä½ã‹ãªï¼Ÿ");
                },
                func() {
                    syscall.Sleep(1000*1000*100);
                    println("C:俺ã„ã£ã¡ã°ãƒ¼ã‚“ï¼");
                },
            }).
            Next(func() {
                println("ã—ゅーりょーï¼");
            }).
            Next(func() {
                println("otsune:ãƒãƒƒãƒˆã‚¦ã‚©ãƒƒãƒã§ã‚‚ã™ã‚‹ã‹ï¼");
            }).
            HttpGet("http://b.hatena.ne.jp/otsune/atomfeed").
            Next(func(res *http.Response) *feed {
                var f feed;
                xml.Unmarshal(res.Body, &f);
                return &f
            }).
            Next(func(f *feed) {
                for _, entry := range f.Entry {
                    println(entry.Title + "\n\t" + entry.Link[0].Href);
                }
            }).
            HttpGet("http://b.hatena.ne.otsune/"). // this make error
            Next(func(res *http.Response) {
                println("ã“ã“ã«ã¯ã“ãªã„よ");
            }).
            Error(func(err *os.Error) {
                println("ã“れã¯ã²ã©ã„");
            })
    }
    Goã§ã¯ä¾‹å¤–ãŒcatch出æ¥ãªã„(ãã‚‚ãã‚‚throwãŒãªã„)ã®ã ã‘ã©ã€Goã®é¢¨ç¿’ã§æˆ»ã‚Šå€¤ã®æœ€å¾Œã«os.Errorã‚’è¿”ã™é¢¨ç¿’ãŒã‚ã‚‹ã®ã§ã€ãã®å ´åˆã¯Errorã«é£›ã°ã™æ§˜ã«ã—ã¦ã‚る。
    mattn's godeferred at master - GitHub

    port of jsdeferred: http://cho45.stfuawsc.com/jsdeferred

    http://github.com/mattn/godeferred
    使ã„é“ã‚ã‚‹ã‹åˆ†ã‹ã‚“ãªã„ã‘ã©ã€ã¨ã‚Šã‚ãˆãš...
    ※ã‚ã‚“ã¾ã—JSDeferredã®ä»•様詳ã—ãç„¡ã„ã®ã§æ­£ã—ã„å‹•ãã˜ã‚ƒãªã„ã‹ã‚‚苦笑

  • 06/26/10--07:25: modeline内ã§fileencodingを指定出æ¥ã‚‹Vimプラグイン書ã„ãŸã€‚ (chan 1718684)
  • ã¾ãšã€ã¡ã‚‡ã£ã¨ã‚¿ã‚¤ãƒˆãƒ«ãŒãŠã‹ã—ã„ã®ã§ã€æœ€å¾Œã¾ã§èª­ã‚“ã§ä¸‹ã•ã„。

    Windowsã®Vimを使ã£ã¦ã„ã‚‹æ–¹ãªã‚‰ã°ã€KaoriYaã®Vimを使ã£ã¦ãŠã‚‰ã‚Œã‚‹æ–¹ãŒå¤šã„ã¨æ€ã„ã¾ã™ã€‚

    KaoriYa.net

    Vim 7.2 Vim 7.2を公開ã—ã¾ã™ã€‚vim.orgç­‰ã§é…布ã•れるオリジナルã«ã€æ—¥æœ¬èªžã‚’扱ã†ä¸Šã§ä¾¿åˆ©ãªè¨­å®šã‚„スクリプトãŒè¿½åŠ ã•れã¦ã„ã¾ã™ã€‚Vimã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ–¹ã€…ã‹ã‚‰ã®æ„見ãªã©ã®æ”¯æ´ã«ã‚ˆã£ã¦è‚²ã¦ã‚‰...

    http://www.kaoriya.net/
    KaoriYaãŒé…布ã—ã¦ã„ã‚‹Vimã«ã¯è¤‡æ•°ã®patchãŒå½“ãŸã£ã¦ã„ã¦ã€migemo検索やフルスクリーンã¨ã„ã£ãŸä¾¿åˆ©ãªæ©Ÿèƒ½ãŒå…¥ã£ã¦ã„ã¾ã™ã€‚
    ãã®ä¸­ã®ä¸€ã¤ã«ã€modelineã®ä¸­ã§fileencodingãŒæŒ‡å®šå‡ºæ¥ã‚‹ã¨ã„ã†ç‰©ãŒã‚りã¾ã™ã€‚
    Vimã§ã¯ã€ãƒ•ァイルã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’調ã¹ã‚‹ã®ã«fileencodingsã§æŒ‡å®šã•れãŸè¤‡æ•°ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’失敗ã—ãªããªã‚‹ã¾ã§è©¦ã™ã¨ã„ã†ã€è‹¥å¹²ããªç²‰è‡­ã„手法ãŒç”¨ã„られã¦ã„ã‚‹ã®ã§ã™ã€‚ã§ã™ã®ã§ä¾‹ãˆã°ãƒ•ァイル内書ã‹ã‚Œã¦ã„ã‚‹ãƒã‚¤ãƒˆã‚³ãƒ¼ãƒ‰ã¨ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹é ˜åŸŸã«ã‚ˆã£ã¦ã¯èª¤èªè­˜ã™ã‚‹äº‹ã‚‚ã‚りã¾ã™ã€‚例ãˆã°Windowsã®CP932ç­‰ã¯ã€ã‚µãƒãƒ¼ãƒˆã™ã‚‹ç¯„囲ãŒåºƒã„ã®ã§æ–‡å­—æ•°ãŒå°‘ãªã„ã¨EUC-JPã¨èª¤çˆ†ã™ã‚‹äº‹ã‚‚ã‚りã¾ã™ã€‚
    ã“れを解決ã™ã‚‹ç‚ºã«ã€ãƒ•ァイルå˜ä½ã§è¨­å®šã‚’指定出æ¥ã‚‹modelineã¨ã„ã†è¨­å®šè¡Œã«fileencoding(fenc)を指定出æ¥ã‚‹ã¨ã„ã†patchã‚’KoRoNã•ã‚“ãŒæ›¸ãã¾ã—ãŸã€‚
    実ã¯ã“れã€KaoriYaã«ã“ã®ãƒ‘ッãƒãŒå…¥ã‚‹æ•°å¹´å‰ã«åˆ¥ã®patchã¨ã—ã¦vim-devã«é€ã£ãŸäº‹ãŒã‚りã€ãã®æ™‚ã¯ã€Œã†ãƒ¼ã‚“ã€ã¨Bramæ°ã«è¨€ã‚れã¦çµ‚ã‚ã£ã¦ã—ã¾ã£ãŸæ©Ÿèƒ½ã§ã™ã€‚

    KaoriYaã§ãªã„Vimを使ã£ã¦ã„ã‚‹å ´åˆã€modelineã«fenc指定ãŒã‚ã‚‹ã¨èª­ã¿è¾¼ã‚“ã ãƒ•ァイルã«å¯¾ã—ã¦fileencodingを変更ã™ã‚‹...ã¨ã„ã†å‹•ãã«ãªã£ã¦ã—ã¾ã„ã€ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ›´æ–°ã•れãŸã¨ã„ã†æ‰±ã„ã«ãªã£ã¦ã—ã¾ã„ã¾ã™ã€‚ã‚‚ã¡ã‚ã‚“ãã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã§ãƒ•ァイルãŒé–‹ã‹ã‚Œã‚‹è¨³ã§ã‚‚ã‚りã¾ã›ã‚“。
    ã“ã®KaoriYaä»•æ§˜ã«æ…£ã‚Œã¦ã—ã¾ã£ãŸæ–¹ãŒã€modeline内fencを指定ã—ãŸãƒ•ァイルを世ã«é…ã£ã¦ã—ã¾ã†äº‹ãŒã‚りã¾ã™ã€‚
    ãã—ã¦ãã®ãƒ•ァイルをKaoriYa仕様ã§ãªã„Vimを使ã£ã¦ã„る人ãŒé–‹ãã¨ã€é–‹ã„ãŸé€”端ã«ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ›´æ–°ã•れる...ã¨ã„ã†ã¨ã¦ã‚‚悲ã—ã„çµæœ«ã«ãªã£ã¦ã—ã¾ã„ã¾ã™ã€‚

    今日ã¯ãã®å•題を解決ã™ã‚‹ãƒ—ラグインを書ãã¾ã—ãŸã€‚

    mattn's modelinefenc-vim at master - GitHub

    enable to specify 'fenc' in modeline.

    http://github.com/mattn/modelinefenc-vim
    ã“れをpluginフォルダã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã¨ã€KaoriYa仕様ã®Vimã¨åŒã˜ã‚ˆã†ã«(modeline内fencã«é–¢ã—ã¦ã ã‘)動作ã—ã¾ã™ã€‚ファイルを書ã„ãŸäººãŒmodelineã«æŒ‡å®šã—ãŸã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã®é€šã‚Šãƒ•ァイルãŒè¡¨ç¤ºã•れã¾ã™ã€‚

    KaoriYa仕様ã§ãªã„Vimmerã«ã¯ä¾¿åˆ©ã‹ãªã¨æ€ã„ã¾ã™ã€‚ãŸã ã—ã€ï¼‘点守ã£ã¦ä¸‹ã•ã„。

    ã“ã®ãƒ—ラグインã§modeline内ã«fencを指定出æ¥ã‚‹æ§˜ã«ãªã£ãŸã¯ã„ã„ã®ã§ã™ãŒã€ãã‚ŒãŒæŒ‡å®šã•れã¦ã„るファイルã¯ãƒãƒ©ã¾ã‹ãªã„ã§ä¸‹ã•ã„。
    Vimã¯ä¸–界中ã§ä½¿ã‚れã¦ã„るテキストエディタã§ã™ã€‚KaoriYa版ã§ãªã„人ã€modelinefenc-vimを入れã¦ãªã„äººã¯æ˜Ÿã®æ•°ã»ã©ã„ã¾ã™ã€‚
    ã‚ãã¾ã§ã€ãã‚“ãªãƒ•ァイルを開ã„ãŸæ™‚ã«æ°—æŒã¡æ‚ªããªã‚ŠãŸããªã„...ã¨ã„ã†äººå‘ã‘ã®æ©Ÿèƒ½ã§ã™ã€‚

    ã§ã™ã®ã§ã‚¿ã‚¤ãƒˆãƒ«ã¯ã€Œmodeline内ã§fencを指定ã•れãŸãƒ•ァイルを開ã„ã¦ã‚¤ãƒ¤ãƒ¼ãƒ³ã¨ãªã‚‰ãªã„Vimプラグイン書ã„ãŸã€‚ã€ãŒæ­£è§£ã§ã™ã€‚

  • 07/03/10--05:48: Go本ãŒå‡ºã‚‹ã‚‰ã—ã„。 (chan 1718684)
  • ゴッ...ゴホンゴホン...

    Go Programming [Paperback]
    Go Programming [Paperback]
    John P. Baugh (Author)
    No customer reviews yet. Be the first.
    Price: $19.99 & eligible for FREE Super Saver Shipping on orders over $25. Details
    In Stock.
    Ships from and sold by Amazon.com. Gift-wrap available.
    Want it delivered Tuesday, July 6? Order it in the next 0 hours and 37 minutes, and choose One-Day Shipping at checkout. Details
    3 new from $19.24


    サイトã¯ã“ã“。
    Go Programming

    Welcome to the official website accompanying the book, Go Programming . The book can be purchased fr...

    http://www.goprogrammingbook.com/
    twitterアカウントã¯ã“ã“。ã•ã£ãfollowã•ã‚Œã¦æ°—ã¥ã„ãŸã€‚

  • 07/10/10--07:15: Windowsã§ç©ºæ–‡å­—ã‚’echoã™ã‚‹ã€‚ (chan 1718684)
  • echo/ > touch.txt

  • 07/13/10--08:38: JScript.NETã§ã‚¹ãƒ¬ãƒƒãƒ‰ (chan 1718684)
  • JScript.NETã¯MicrosoftãŒ.NET Frameworkå‘ã‘ã«æ‹¡å¼µã—ãŸJavasSriptã§ã€Common Language Runtime(CLR)上ã§å‹•作ã™ã‚‹JavaScript実装ã§ã™ã€‚
    CLR上ã§ã¯C#ã€VB.NETç­‰ãŒå‹•作ã—ã¾ã™ãŒã€JScript.NETã¯è¨€èªžãŒJavaScriptã¨ã„ã†äº‹ã‚‚ã‚ã£ã¦å®Ÿã¯C#ã‚„VB.NETç­‰ã¨åŒç­‰ã«ä½¿ãˆãªã„機能ãŒã„ãらã‹ã‚りã¾ã™ã€‚
    JavaScriptã¯å‹•的言語ã§ã™ã€‚オブジェクトã«ãƒ—ロパティを生やã—ã¦ãƒ¡ã‚½ãƒƒãƒ‰ã«ã—ãŸã‚Šã€prototypeを弄ã£ãŸã‚Šã€eval()ã§é–¢æ•°ã‚’生æˆã—ãŸã‚Šã‚‚出æ¥ã¾ã™ã€‚ã¤ã¾ã‚Šã‚³ãƒ³ãƒ‘イルã™ã‚‹ã¨ã¯è¨€ãˆã©ã€åž‹ãŒå‹•çš„ã«å¤‰ãˆã‚‰ã‚Œã‚‹è¨€èªžã§ã™ã€‚
    ãã®ç‚ºã€.NET Frameworkã®æ©Ÿèƒ½ã®ä¸€ã¤ã§ã‚ã‚‹DelegateãŒä½¿ãˆã¾ã›ã‚“。.NET Frameworkã®Threadã¯Delegateã¨ã„ã†é–¢æ•°åž‹æ‹˜æŸã«ã‚ˆã‚Šã‚¹ãƒ¬ãƒƒãƒ‰ã‚’安全ã«å‘¼ã³å‡ºã›ã‚‹æ§˜ã«ãªã£ã¦ã„ã¾ã™ã€‚ã“ã®é–¢æ•°åž‹æ‹˜æŸã«ç·©ã„拘æŸãªJavaScript(JScript)ã®é–¢æ•°ã‚’渡ã™äº‹ã¯å‡ºæ¥ãªã„ã®ã§ã™ã€‚
    MSDNã§ã‚‚JScriptã®Delegate利用制é™ãŒæ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚

    ThreadStart デリゲート

    [JScript] JScript ã§ã¯ã€.NET Framework ã®ãƒ‡ãƒªã‚²ãƒ¼ãƒˆã‚’利用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€ç‹¬è‡ªã«å®šç¾©ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。

    http://msdn.microsoft.com/ja-jp/library/system.threading.threadstart(VS.71).aspx
    Delegate.CreateDelegate()ã¨ã„ã†ãƒ¡ã‚½ãƒƒãƒ‰ã‚‚存在ã—ã¾ã™ãŒã€ã“ã¡ã‚‰ã‚‚JScriptã‹ã‚‰ã¯åˆ©ç”¨å‡ºæ¥ã¾ã›ã‚“。
    ã˜ã‚ƒãDelegateを引数ã«å–ã‚‹Threadã¯JScriptã‹ã‚‰ä½œã‚Œãªã„ã˜ã‚ƒãªã„ã‹ï¼ãã†æ€ã£ã¦ãŠã‚‰ã‚Œã‚‹æ–¹ãŒæ®†ã©ã ã¨æ€ã„ã¾ã™ã€‚

    ã„ãˆã€å‡ºæ¥ã¾ã™ã€‚

    import System
    import System.Reflection
    import System.CodeDom.Compiler
    import System.Threading
    import Microsoft.CSharp

    /**
     * createThread()
     * @param   f   thread function
     * @param   a   argument passing to function
     * @return  thread object
     */
    var createThread = (function() {
        var source = [
            "using System.Threading;",
            "public class ThreadInvoker {",
            "  private Microsoft.JScript.Closure func;",
            "  private object arg = null;",
            "  public ThreadInvoker(Microsoft.JScript.Closure func, object arg) { this.func = func; this.arg = arg; }",
            "  private void invokerThread() { func.Invoke(null, new object[]{this.arg}); }",
            "  public Thread createInvoker() { return new Thread(invokerThread); }",
            "}",
        ].join("\n");

        var cp = CodeDomProvider.CreateProvider("CSharp");
        var cps = new CompilerParameters();
        cps.ReferencedAssemblies.Add("Microsoft.JScript.dll");
        cps.GenerateInMemory = true;
        var cr = cp.CompileAssemblyFromSource(cps, source);
        var asm = cr.CompiledAssembly;
        return function(f, a) {
            var tt : Type = asm.GetType("ThreadInvoker");
            var args = new System.Object[2];
            args[0] = f;
            args[1] = a;
            return tt.InvokeMember(
                "createInvoker",
                BindingFlags.InvokeMethod,
                null,
                Activator.CreateInstance(tt, args),
                null);
        };
    })();
    C#ä¸Šã§æ›¸ã‹ã‚ŒãŸã‚¹ãƒ¬ãƒƒãƒ‰ã‚¤ãƒ³ãƒœãƒ¼ã‚«ã‚’メモリ内ã§ã‚³ãƒ³ãƒ‘イルã—ã¦ã€ãれã«JScriptã®é–¢æ•°ã€æ­£ã—ãã¯ã‚¯ãƒ­ãƒ¼ã‚¸ãƒ£ã‚’渡ã—ã¾ã™ã€‚
    ã“ã“ã‹ã‚‰å…ˆã¯CLRãªã®ã§ã€ã©ã†ã¨ã§ã‚‚出æ¥ã‚‹ã¯ãšã§C#ã‹ã‚‰Microsoft.JScript.Closureã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’å©ã事も出æ¥ã¾ã™ã€‚
    ã“れを使ãˆã°
    var th = createThread(function(v) {
        for (var n = 1; n <= 6; n++) {
            Thread.Sleep(200);
            print("thread" + n + " " + v);
        }
    }, "foo");

    th.Start();

    Thread.Sleep(200);
    print("main1");
    th.Suspend();
    Thread.Sleep(200);
    print("main2");
    Thread.Sleep(200);
    print("main3");
    th.Resume();
    ã“ã‚“ãªã‚³ãƒ¼ãƒ‰ã§
    thread1 foo
    main1
    main2
    main3
    thread2 foo
    thread3 foo
    thread4 foo
    thread5 foo
    thread6 foo
    ã“ã‚“ãªå‹•作をã•ã›ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚JavaScript(JScript)ã§ã‚¹ãƒ¬ãƒƒãƒ‰ãŒä½¿ãˆã‚‹ã¨è‰²ã€…ã¨ã‚„りãŸããªã£ã¦ãã¾ã™ã€‚JScriptã§ã‚µãƒ¼ãƒã‚¢ãƒ—リãªã‚“ã¦äº‹ã‚‚ç°¡å˜ã«å‡ºæ¥ãã†ã§ã™ã­ã€‚
    ã¡ãªã¿ã«ã€ã“ã®createThread()を使ã†ã¨ã€ã‚¦ã‚§ãƒ–サーãƒãªã‚“ã‹ã‚‚書ã‘ãŸã‚Šã—ã¾ã™ã€‚試ã—ã«æ›¸ã„ã¦ã¿ãŸã‚‰ã‚³ãƒ¼ãƒ‰ã®å°‘ãªã•(createThreadã¯é™¤ã„ã¦)ã«å°‘ã—驚ãã¾ã—ãŸã€‚JScript.NET & C# ã°ã‚“ã–ã„ï¼
    import System
    import System.Reflection
    import System.CodeDom.Compiler
    import System.Threading
    import Microsoft.CSharp

    /**
     * createThread()
     * @param   f   thread function
     * @param   a   argument passing to function
     * @return  thread object
     */
    var createThread = (function() {
        var source = [
            "using System.Threading;",
            "public class ThreadInvoker {",
            "  private Microsoft.JScript.Closure func;",
            "  private object arg = null;",
            "  public ThreadInvoker(Microsoft.JScript.Closure func, object arg) { this.func = func; this.arg = arg; }",
            "  private void invokerThread() { func.Invoke(null, new object[]{this.arg}); }",
            "  public Thread createInvoker() { return new Thread(invokerThread); }",
            "}",
        ].join("\n");

        var cp = CodeDomProvider.CreateProvider("CSharp");
        var cps = new CompilerParameters();
        cps.ReferencedAssemblies.Add("Microsoft.JScript.dll");
        cps.GenerateInMemory = true;
        var cr = cp.CompileAssemblyFromSource(cps, source);
        var asm = cr.CompiledAssembly;
        return function(f, a) {
            var tt : Type = asm.GetType("ThreadInvoker");
            var args = new System.Object[2];
            args[0] = f;
            args[1] = a;
            return tt.InvokeMember(
                "createInvoker",
                BindingFlags.InvokeMethod,
                null,
                Activator.CreateInstance(tt, args),
                null);
        };
    })();

    import System.Net
    import System.Net.Sockets

    var listener = new System.Net.Sockets.TcpListener(IPAddress.Parse("127.0.0.1"), 8080);
    listener.Start();

    while (true) {
        createThread(function(client) {
            var stream = client.GetStream();
            var buf = new System.Byte[client.ReceiveBufferSize];
            var bytesRead = stream.Read(buf, 0, buf.length);
            var str = [
                "HTTP/1.0 200 OK",
                "Content-Type: text/html",
                "",
                "<html><body>",
                "<b>hello world</b>: " + (new Date).toString(),
                "</body></html>",
            ].join("\r\n");
            var bytes = System.Text.Encoding.Default.GetBytes(str);
            stream.Write(bytes, 0, bytes.length);
            stream.Close();
            client.Close();
        }, listener.AcceptTcpClient()).Start();
    }
    マルãƒã‚¹ãƒ¬ãƒƒãƒ‰ã‚¦ã‚§ãƒ–サーãƒã§ã™ã€‚カッコイーï¼

  • 07/28/10--09:13: Vimã§GoãŒautocomplete出æ¥ã‚‹gocodeãŒã„ã„æ„Ÿã˜ (chan 1718684)
  • Goã¯åž‹å®£è¨€ç„¡ã—ã«å€¤ãŒä»£å…¥å‡ºæ¥ã¦ã—ã¾ã†ã®ã§ã€ã‚«ãƒ¼ã‚½ãƒ«ä¸Šã®å¤‰æ•°ã‹ã‚‰åž‹æŽ¨æ¸¬ã™ã‚‹å¿…è¦ãŒã‚る補完ã¯é›£ã—ã„ã‚“ã˜ã‚ƒãªã„ã‹ãªãƒ¼ã¨æ€ã£ã¦ãŸã‚‰ã€ãªã‚“ã¨ä½œã£ãŸäººãŒã„ã¾ã—ãŸã€‚
    ã™ã’ー。

    nsf's gocode at master - GitHub

    Autocompletion/refactoring daemon for Go language.Work in progress..Currently available things: - .a...

    http://github.com/nsf/gocode
    仕組ã¿ã¯vimスクリプト内ã§ãƒ‡ãƒ¼ãƒ¢ãƒ³èµ·ã“ã—ã¦ã‚³ãƒ¼ãƒ‰ã¨ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã¨å…±ã«ã‚µãƒ¼ãƒå´ã§ã‚³ãƒ³ãƒ‘イルã—ã€è§£æžã—ã¦è¿”ã™ã¨ã„ã†ã‚‚ã®ã€‚通信ã«ã¯RPCãŒä½¿ã‚れã¦ã„る。
    補完ã¯omniãªã®ã§<c-x><c-o>ã§é–‹å§‹ã€‚ã¡ã‚ƒã‚“ã¨
    • インスタンスメソッド一覧
    • 構造体ã®ãƒ¡ãƒ³ãƒ
    • パッケージ内ã®å®šæ•°ã‚„åž‹ã€é–¢æ•°
    gocode1

    ã‚‚ã‚ã‚‚ã‚補完ã—ã¦ãれる。ç§ãŒç„¡ç†ã‹ã‚‚ã­ã¨æ€ã£ã¦ãŸä»¥ä¸‹ã®æ§˜ãªã‚³ãƒ¼ãƒ‰ã§ã‚‚ã—ã£ã‹ã‚Šè£œå®Œã—ã¦ãれã¦ã„る。ã™ã°ã‚‰ã—ã„。

    gocode2

    Go書ã人ã¯ã„れるã¹ã—。ã¡ãªã¿ã«ã“ã®gocodeã€å‡ºåЛ形å¼ã¨ã—ã¦emacsもサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹(未確èª)ã®ã§ã€ãœã²è©¦ã—ã¦æ¬²ã—ã„。

    追記
    ã•ã™ãŒã«ã“ã†ã„ã†ã‚³ãƒ¼ãƒ‰ã¯é›£ã—ã„ã¿ãŸã„。ãªã‚“ã‹PANICã£ã¦è£œå®Œã•れã¦ã¾ã™ã€‚

    package main

    type Foo struct {
        Boo func();
        Baz string;
    }

    func foo() *Foo {
        return &Foo {}
    }

    func main() {
        foo().PANIC
    }


  • 07/31/10--06:48: Goã§Google翻訳出æ¥ã‚‹ãƒ©ã‚¤ãƒ–ラリ書ã„ãŸã€‚ (chan 1718684)
  • ã¾ããƒã‚¿ã§ã™ãŒ...

    mattn's go-translate at master - GitHub

    google language translate library

    http://github.com/mattn/go-translate
    ã“れ使ã†ã¨
    println(translate.Translate("en", "ja", "i'm zakarite what is emperor in cosmic"))
    ã“ã‚“ãªã‚³ãƒ¼ãƒ‰ã§
    ç§ã¯å®‡å®™ã®çš‡å¸zakariteよ
    ã“ã‚“ãªçµæžœãŒå¾—られã¾ã™ã€‚
    便利ã§ã™ã­ï¼

    ã‚ã£æ­³ã°ã‚Œã‚‹ã€‚
    ã¡ãªã¿ã«ã©ã†ã‚„ã£ã¦ã‚‚å¸çŽ‹ã£ã¦å‡ºã›ãªã„ã‚“ã§ã™ã‘ã©...

  • 08/09/10--09:04: 「「new å¼ã€ ã§ã€å¤‰æ•°ã‚’ å¼ ã¨ã—ã¦æŒ‡å®šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã‹ï¼Ÿã€ (chan 1718684)
  • 「new å¼ã€ ã§ã€å¤‰æ•°ã‚’ å¼ ã¨ã—ã¦æŒ‡å®šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã‹ï¼Ÿ | OKWave
    via: ã¨ãã©ãã®é›‘記帳
    ã¨ã“ã‚ã§permalinkãŒãŠã‹ã—ã„æ°—ãŒã™ã‚‹ã€‚ã‚ã¨æœ€è¿‘ã®ã¨ãã©ãã®é›‘記帳ã¯ã¨ãã©ãã©ã“ã‚ã§ãªã„æ°—ãŒã™ã‚‹w

    「new å¼ã€ ã§ã€å¤‰æ•°ã‚’ å¼ ã¨ã—ã¦æŒ‡å®šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã‹ï¼Ÿ

    例ãˆã°æ¬¡ã®ã‚ˆã†ãªæ„Ÿã˜ã§ã€å¤‰æ•°clã®å†…容ã«ã‚ˆã‚ŠclassAã‚ã‚‹ã„ã¯classBã‚’new
    ã™ã‚‹ã‚ˆã†ãªã“ã¨ãŒã—ãŸã„ã§ã™ã€‚
    class base [ ... };
    class classA : public base { .... };
    class classB : public base { .... };
    classA* ca;
    classB* cb;
    base* cl;
    cl = classA;
    ca = new cl;
    cl = classB;
    ca = new cl;

    ã“れã«ã‚ˆã‚Šã€å¤šç¨®ã®classã‚’newã™ã‚‹éš›ã«ã„ã¡ã„ã¡
    pa = new classA;
    pb = new classB;
    pc = new classC;
    pd = new classD;
    ............
    ã¨ã—ãªã„ã§ã€
    for (n=0; n<xxx; n++)
    p[n] = new cl[n];
    …ã¿ãŸã„ã«ç°¡æ½”ã«æ›¸ã‘ãªã„ã‹ãªã¨è€ƒãˆã¦ã¾ã™ã€‚
    よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚
    ã“ã‚“ãªï¼Ÿ
    #include <iostream>

    using namespace std;

    class base {
    public:
        virtual void hello() const =0;
    };

    class classA : public base { void hello() const { cout << "classA\n"; }};
    class classB : public base { void hello() const { cout << "classB\n"; }};
    class classC : public base { void hello() const { cout << "classC\n"; }};
    class classD : public base { void hello() const { cout << "classD\n"; }};

    template<typename T> base* create() {
        return new T;
    }

    int main(){
        typedef base* (*factory)();
        factory p[] = {
            create<classA>,
            create<classB>,
            create<classC>,
            create<classD>
        };
        for (int n = 0; n < 4; n++)
            p[n]()->hello();
    }

  • 08/09/10--09:09: 勿‰‹ã«ã‚³ãƒŸãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’作ã£ã¦ãれるvimscript書ã„ãŸã€‚ (chan 1718684)
  • 便利

    " copy this 'git.vim' to ~/.vim/after/ftplugin/git.vim
    "
    let content = system('curl -s http://whatthecommit.com/')
    let content = substitute(content, '[\r\n]', '', 'g')
    let content = substitute(content, '^.*<p>\(.*\)</p>.*$', '\1', '')
    call setline('.', content)
    ãªè¨³ãªã„。

    ã¡ãªã¿ã«ã€ã“ã®ã€ŒWhat The Commitã€ã£ã¦ã‚µã‚¤ãƒˆã€ã€ŒUseful Textã€ã¨ã‹ã€Œclarify further the brokenness of C++. why the fuck are we using C++?ã€ã¨ã‹ã€ŒSpinning up the hamster...ã€ã¨ã‹ã‚ªãƒ¢ãƒ­ã„メッセージã„ã£ã±ã„å…¥ã£ã¦ã‚‹ã€‚

  • 08/09/10--09:38: bashã®aliasã£ã¦ãƒžãƒ«ãƒãƒã‚¤ãƒˆä½¿ãˆãŸã‚“ã ã€‚ (chan 1718684)
  • ã—らんã‹ã£ãŸã€‚

    $ alias ゔむ。=vim
    $ ゔむ。 ~/.vimrc

  • 08/13/10--07:32: Devel::CheckLibã®ã‚³ãƒ¡ãƒ³ãƒ†ãƒŠã«ãªã‚Šã¾ã—ãŸã€‚ (chan 1718684)
  • MSVCã‚„MinGW32ã€Cygwinã€BorlandC++ãªã©Windowsã®Cコンパイラã«ã¤ã„ã¦ä¸€èˆ¬çš„ã«å—œã‚€ç¨‹åº¦ã®çŸ¥è­˜ã¯æŒã£ã¦ã„ã¦ã€UNIXã‚‚ã‚る程度ã•ã‚れã¦ã€Perlã‚‚å°‘ã—触れるã‹ãªãã¨ã„ã†(我ãªãŒã‚‰æµ…ã¯ã‹ãª)「ã¤ã‚‚りã€ã§ã„ãŸã®ã§ã€ã€ŒCPANモジュールDevel::CheckLibã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã‚’誰ã‹å¼•ãå—ã‘ã¦æ¬²ã—ã„ã€ã¨ä»°ã‚‹David Cantrellã•ã‚“ã®æ„æ€ã‚’å—ã‘ã€Devel::CheckLibã®ã‚³ãƒ¡ãƒ³ãƒ†ãƒŠã‚’引ãå—ã‘ã¾ã—ãŸã€‚

    至らãªã„ã‹ã¨æ€ã„ã¾ã™ãŒã€ã©ã†ãžã‚ˆã‚ã—ã。


  • 08/13/10--09:35: Zimbuã§FizzBuzz (chan 1718684)
  • ZimbuVimã®ä½œè€…ã§ã‚ã‚‹Bram Moolenaaræ°ãŒé–‹ç™ºã—ã¦ã„るプログラミング言語「Zimbuã€ã‚’触ã£ã¦ã¿ãŸã€‚

    the Zimbu programming language

    Suppose you want to write a new program, something like a text editor. What language would you write it in?

    • It has to be as fast as possible, so interpreted languages are out.
    • You don't want to micro manage memory, so C is out.
    • You don't want to require programmers to have a degree, so C++ is out.
    • You want fast startup and not depend on a big runtime, so Java is out.
    • It has to run on most systems, anything with a C compiler, so D is out.
    • You want to have fun making something new.

    No existing language really meets these demands, so let's create a new one that does!

    Zimbu is an experimental programming language. It is a very practical, no-nonsense kind of language. It mixes the good things of many existing languages and avoids their deficiencies. And then throws in a few brand new ideas.

    http://www.zimbu.org/
    実ã¯ã€å­˜åœ¨ã¯å‡ºãŸå½“åˆã‹ã‚‰çŸ¥ã£ã¦ã¯ã„ãŸã‚“ã ã‘ã©
    制御命令ãŒå…¨éƒ¨å¤§æ–‡å­—ã¨ã‹ã€æµè¡Œã‚‰ãªã„よã­
    ã¨ã‹
    ソースコード中ã«ã‚¿ãƒ–ãŒã‚ã‚‹ã¨ãƒ“ルド出æ¥ãªã„ã¨ã‹ã€ã©ã‚“ã ã‘?
    ã¨ã‹
    ブロックãŒã€Œ{ã€ç„¡ã—ã«å§‹ã¾ã‚‹ã®ã«çµ‚ã‚りã«ã€Œ}ã€ãŒè¦ã‚‹ã®æ°—æŒã¡æ‚ªã„よã­
    ã¨ã‹ã€ãŠã‚‚ã„ã£ãりkazuhâ—ã•ã‚“ã‚ãŸã‚Šã«DISられãã†ã ã£ãŸã®ã§ã€è§¦ã£ã¦ç„¡ã‹ã£ãŸã€‚
    ã“れã§ã¯ã„ã‹ã‚“ãªï¼ã¨æ€ã£ã¦FizzBuzz書ã„ã¦ã¿ãŸã€‚
    FUNC int MAIN()
      FOR i IN 1 TO 100
        IF i % 15 == 0
          IO.write("FizzBuzz\n")
        ELSEIF i % 3 == 0
          IO.write("Fizz\n")
        ELSEIF i % 5 == 0
          IO.write("Buzz\n")
        ELSE
          IO.write(i)
          IO.write("\n")
        }
      }
      RETURN 0
    }
    「}ã€ã ã‘ã¨ã‹ã€ãã‚‚ã¡ã‚ã‚‹ï¼

    zimbuã§ã¯zuファイルを一度Cã®ã‚³ãƒ¼ãƒ‰ã«å¤‰æ›ã—ã€ã‚³ãƒ³ãƒ‘イラã§ãƒ“ルドã—ã¾ã™ã€‚ãªã®ã§å®Ÿè¡Œé€Ÿåº¦ã¯çµæ§‹é€Ÿã„(ã‹ã‚‚ã—れãªã„)。ã¡ãªã¿ã«C言語ã«å‡ºåŠ›ã•れãŸã‚³ãƒ¼ãƒ‰ã¯ã€804行もã‚ã£ã¦ãƒ–ログã«è¼‰ã›ã‚‰ã‚Œãªã„ã®ã§ã€Gistã«è²¼ã‚Šä»˜ã‘ã¦ãŠã„ãŸã€‚
    ãŸã‹ã ã‹15行ã®ã‚½ãƒ¼ã‚¹ãªã®ã«804行も出力ã™ã‚‹ãªã‚“ã¦å‡„ã„ï¼

    ãŸã æ€ã„ã¨ã¯è£è…¹ã«ã€å®Ÿã¯çµæ§‹è‰²ã‚“ãªäº‹ãŒå‡ºæ¥ã‚‹äºˆå®šã®æ§˜ã§ã€GUIã®è¨­è¨ˆãªã‚“ã‹ã‚‚ã‚„ã£ã¦ã‚‹ã¿ãŸã„ã§ã™ã€‚ã¡ãªã¿ã«GTK/Qtã®ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã¯æ§‹æƒ³ä¸­ã§ã™ãŒã€ãƒ–ラウザを使ã£ãŸGUIコードã®ç”Ÿæˆã¯ã‚ã‚‹ç¨‹åº¦å‹•ãæ§˜ã§ã™ã€‚
    zwt-demo1
    zwt-demo2
    ãªãŠã€ã“ã®ã‚µãƒ³ãƒ—ルã§ä½¿ã‚れã¦ã„る部å“ã®ä¸€ã¤ã¨ã—ã¦Google Protocol Bufferを使ã£ã¦ãŠã‚Šã€javaã®ã‚½ãƒ¼ã‚¹ã‚’åã„ã¦ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ã‚ªãƒ–ジェクトã¨ã—ã¦æ‰±ã£ã¦ã„る様ã§ã™ã€‚

    ãªã‚“ã‹å‡„ã„よã†ãªã€å‡„ããªã„よã†ãª...

    明日ã«ã¯ãã£ã¨è¨€èªžä»•様忘れã¦ã‚‹ã¨æ€ã„ã¾ã™ã€‚

  • 08/30/10--06:51: quickrun.vimをパクã£ã¦quickdan.vimã¨ã„ã†ã®ã‚’書ã„ãŸã€‚ (chan 1718684)
  • RubyKaigiã®ä¸€éƒ¨ã¨ã—ã¦é–‹å‚¬ã•れã¦VimKaigiã€ãªã‹ãªã‹é¢ç™½ãã†ã§ã—ãŸã€‚
    Vimmerã‚‚ã ã‚“ã ã‚“増ãˆã¦ãã¾ã—ãŸã€‚plugin使ã£ã¦ã‚‹äººã‚‚å¤šã„æ§˜ã§ã™ã€‚実ã¯ç§ã¯ã‚ã¾ã‚Špluginã®ä½¿ç”¨ã«ä¾å­˜ã—ãªã„様ã«å¿ƒãŒã‘ã¦ã„ãŸã‚Šã™ã‚‹ã‚“ã§ã™ãŒã€ä¸­ã«ã©ã†ã—ã¦ã‚‚手放ã›ãªã„物ãŒã‚りã€ãã®ä¸­ã®ä¸€ã¤ãŒquickrun.vimã ã£ãŸã‚Šã—ã¾ã™ã€‚

    thinca's vim-quickrun at master - GitHub

    Run commands quickly.

    http://github.com/thinca/vim-quickrun

    ç¶šãを読む...


  • 09/01/10--08:15: VimmerãªPerl開発環境 (chan 1718684)
  • ãˆãƒ¼ã£ã¨ã€IDE使ã£ã¦ã¾ã›ã‚“。ã”ã‚ã‚“ãªã•ã„。
    Perlã‚’IDEã§æ›¸ã„ã¦ã‚‹äººã€ã©ã‚Œãらã„ã„ã‚‹ã‚“ã ã‚ã†ã€‚何使ã£ã¦ã‚‹ã‚“ã ã‚。
    ç§ã¯Linuxã§ã‚‚Windowsã§ã‚‚Vimを使ã£ã¦ã¾ã™ã€‚Perlã£ã¦ã‚µãƒ¼ãƒã§ä½¿ã‚れる事ãŒå¤šã„ã—ã€ã‚µãƒ¼ãƒã ã¨sshã§å…¥ã‚‹äº‹ãŒå¤šã„ã ã‚ã†ã—ã€ã¾ãXã®è»¢é€ã‚„VNCã‚„ãれã£ã½ã„ã®ã§ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ã«æ“作ã—ã¦ã‚‚良ã„ã‘ã©ã€æ­£ç›´Perlã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚‚テキストベースã ã—Perlã§å…¥åŠ›è£œå®Œå‡ºæ¥ã‚‹ã‚°ãƒ©ãƒ•ィカルエディタもã¾ãšç„¡ã„ã¨æ€ã£ã¦ã‚‹ã€‚

    ã§ã€ç§ãŒVim上ã§ä½¿ã£ã¦ã‚‹Perlã®é–‹ç™ºã‚’「200å€ä¾¿åˆ©ã«ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トã€ã‚’紹介。

    perldoc.vim

    perldocã¯Perlã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã‚“ã ã‘ã©ã€ã“ã‚Œã‚’ä¸€ã€…ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã«æˆ»ã£ãŸã‚Šã—ã¦å¼•ã„ã¦ã‚‹ã¨æ™‚é–“ã®ãƒ­ã‚¹ã€‚screenã§åˆ†å‰²ã—ã¦é–‹ã„ã¦ã‚‚ã„ã„ã‚“ã ã‘ã©screenã®ç”»é¢é–“移動よりもVim内ã§ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦é–“ç§»å‹•ã®æ–¹ãŒæ“作感ãŒçµ±ä¸€å‡ºæ¥ã¦ã¦è‰¯ã„。
    ãã“ã§ä½¿ã£ã¦ã‚‹ã®ãŒid:secondlifeã•ã‚“ãŒæ›¸ã„ãŸperldoc.vim

    hotchpotch's perldoc-vim at master - GitHub

    Perldoc plugin for vim

    http://github.com/hotchpotch/perldoc-vim
    ドキュメントを引ãã«ã¯Perldocコマンドを使ã„ã¾ã™ã€‚関数openã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’引ãã«ã¯
    :Perldoc -f open
    ã¨ã—ã¾ã™ã€‚ã¾ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«Acme::Oppaiã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’引ãã«ã¯
    :Perldoc Acme::Oppai
    ã¨å®Ÿè¡Œã—ã¾ã™ã€‚ ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã®è‰¯ã„ã¨æ€ã†ç‚¹ã¯ã€è£œå®ŒãŒåйãã“ã¨ã§ã™ã€‚「:Perldoc Acmã€ãらã„ã¾ã§ã‚¿ã‚¤ãƒ—ã—ã¦tabを押ã™ã¨ã€ã€ŒAcme::Oppaiã€ã‚„「Acme::Hidekã€ãŒè£œå®Œã•れã¾ã™ã€‚

    ref.vim

    ã‚‚ã†ä¸€ã¤ã€åŒã˜æ§˜ã«perldocãŒå¼•ã‘るプラグインã¨ã—ã¦thincaã•ã‚“ãŒæ›¸ã„ãŸrefãŒã‚りã¾ã™ã€‚
    thinca's vim-ref at master - GitHub

    Integrated reference viewer.

    http://github.com/thinca/vim-ref
    ã“ã¡ã‚‰ã¯perldocã«é™ã‚‰ãš
    • alc
    • erlang
    • man
    • perldoc
    • phpmanual
    • pydoc
    • refe
    ã¨ã„ã£ãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’é–‹ã事ãŒå‡ºæ¥ã¾ã™ã€‚ドキュメントを引ãã«ã¯
    :Ref perldoc -f open
    ã‚„
    :Ref perldoc Acme::Oppai
    ç­‰ã¨å®Ÿè¡Œã—ã¾ã™ã€‚
    perldoc-vim
    ã“ã¡ã‚‰ã‚‚補完ãŒåйãã¾ã™ãŒã€refã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«æ¤œç´¢ã®éš›ã€ã‚り得るモジュール全ã¦ãŒè£œå®Œã•れã¦ã—ã¾ã†ç‚ºã€ãƒãƒ¼ãƒ ã‚¹ãƒšãƒ¼ã‚¹ã«ã‚ã‚“ã•ã‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚ã‚‹ã¨å°‘ã—モタã¤ãã¾ã™ã€‚ãªã®ã§ç§ã¯perldoc.vimを使ã£ã¦ã¾ã™ã€‚

    追記
    thincaã•ã‚“ã‹ã‚‰æŸæ‰€ã§ã‚³ãƒ¡ãƒ³ãƒˆè²°ã£ãŸã€‚
    let g:ref_perldoc_complete_head = 1
    ã§ãれã£ã½ã„事出æ¥ã‚‹ã‚‰ã—ã„。

    perlomni.vim

    Perlã¯çµæ§‹ï¼ˆã‹ãªã‚Šï¼Ÿï¼‰æ–‡æ³•制é™ã®ç·©ã„言語ã ã¨æ€ã£ã¦ã¾ã™ãŒã€ã“れãŒç½ã„ã—ã¦ã‹IDEç­‰ã§Perlã®å…¥åŠ›è£œå®ŒãŒå‡ºæ¥ã‚‹ç‰©ã¯æ®†ã©ã‚りã¾ã›ã‚“。ãã‚“ãªä¸­c9sã•ã‚“ãŒVimã®omni補完ã§Perlã®å…¥åŠ›è£œå®Œã‚’ã—ã¦ãれるスクリプトを書ã„ã¦ãれã¦ã„ã¾ã™ã€‚
    c9s's perlomni.vim at master - GitHub

    perl omnicompletion for vim (including base class function compleltions .. etc)

    http://github.com/c9s/perlomni.vim
    ã“れã€ãœã²å®Ÿéš›ã«è©¦ã—ã¦æ¬²ã—ã„ã®ã§ã™ãŒ
    use Acme::O
    ã¾ã§ã‚¿ã‚¤ãƒ—ã—ã¦<c-x><c-o>(CTRL-x CTRL-o)をタイプã™ã‚‹ã¨
    perl-completion-vim1
    ã©ã©ãƒ¼ãƒ¼ãƒ¼ã‚“ï¼
    ã•らã«
    perl-completion-vim2
    Moooooooooooooooooooseãªè£œå®Œã‚„
    perl-completion-vim3
    変数ã®è£œå®Œã€‚ãã—ã¦
    perl-completion-vim4
    モジュールã®ãƒ¡ãƒ³ãƒã¾ã§è£œå®Œã—ã¦ãれã¾ã™ã€‚キャーã™ã¦ãーï¼
    ã™ã°ã‚‰ã—éŽãŽã¾ã™ã€‚ã¡ãªã¿ã«ã“ã®perlomni.vimã®win32対応ã¨ã€ä¸Šã§ç´¹ä»‹ã—ãŸperldoc.vimã®è£œå®Œéƒ¨åˆ†ã‚’担当ã•ã›ã¦é ‚ãã¾ã—ãŸã€‚

    2010å¹´ã¯PerlãŒç†±ã„ï¼ãã†æ€ã£ã¦ã¾ã™ã€‚ãœã²ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦æ´»ç”¨ã—ã¦è¦‹ã¦ãã ã•ã„。200å€ã¨ã¯è¨€ã„éŽãŽã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€é–“é•ã„ãªã2å€ã«ã¯ãªã‚Šã¾ã™ã‚ˆã€‚

    åˆã‚ã¦ã®Perl 第5版 åˆã‚ã¦ã®Perl 第5版
    Randal L. Schwartz
    オライリージャパン / ¥ 3,780 (2009-10-26)
     
    発é€å¯èƒ½æ™‚間:在庫ã‚り。


    モダンPerl入門 (CodeZine BOOKS) モダンPerl入門 (CodeZine BOOKS)
    牧 大輔
    翔泳社 / ¥ 2,940 (2009-02-10)
     
    発é€å¯èƒ½æ™‚間:在庫ã‚り。


  • 09/08/10--01:00: Twitterã®Basicèªè¨¼å»ƒæ­¢ã¯ç´„åŠåˆ†ã®ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—クライアントを殺ã—ãŸã€‚ (chan 1718684)
  • ã•ã¦ã€TwitterãŒBasicèªè¨¼ã‚’廃止ã—ã¦1ヶ月ãŒçµŒã¨ã†ã¨ã—ã¦ã„ã¾ã™ã€‚
    皆ã•んクライアントをOAuth対応ã—ãŸã‚Šã€ä¹—りæ›ãˆãŸã‚Šã—ãŸã§ã—ょã†ã‹ï¼Ÿ
    今ã¾ã§Basicèªè¨¼ã§å‹•ã„ã¦ã„ãŸã€ã¡ã‚‡ã£ã¨ã—ãŸæ¨ã¦ã‚³ãƒ¼ãƒ‰ã€ã©ã†ãªã£ã¦ã‚‹ã§ã—ょã†ã‹ï¼Ÿ
    TwitterãŒå§‹ã¾ã£ãŸå½“åˆã€gtktwitterã¨ã„ã†ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—GUIã§å‹•ãTwitterクライアントを作りã¾ã—ãŸã€‚ã¾ã作りã¯ãれ程優れãŸç‰©ã˜ã‚ƒãªãã¦ã€RTãªã‚“ã‹ç„¡ã„é ƒã§friends_timelineãŒè¦‹ã‚Œã¦ã€ç™ºè¨€å‡ºæ¥ã¦ã€@ã«ã‚ˆã‚‹ãƒªãƒ—ライãŒå‡ºæ¥ã‚‹ç¨‹åº¦ã®ç‰©ã§ã—ãŸã€‚
    ãŸã ç´”粋ãªC言語ã ã‘ã§GTKãŠã‚ˆã³curlを使ã£ãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã„ã†äº‹ã‚‚ã‚りã€ä¸€éƒ¨ã®geekã‹ã‚‰ã¯äººæ°—ãŒã‚ã£ãŸã¿ãŸã„ã§ã™ã€‚
    ã•ã¦ã“ã®gtktwitterを今回ã€Basicèªè¨¼ãŒæ¶ˆãˆåŽ»ã£ãŸç¾çжã§ã‚‚å‹•ãよã†ã«ã—ã¦ã‚ã’よã†ã¨æ€ã„ã€ä»Šå›žæ”¹é€ ã‚’å§‹ã‚ãŸè¨³ã§ã™ã€‚
    ã¾ãšå¤§ããªå£ã«ã¶ã¡å½“ãŸã‚Šã¾ã—ãŸã€‚

    Twitterクライアントã«ã€Œtwitterã€ã¨ã„ã†æ–‡å­—ã‚’å«ã‚られãªããªã£ãŸ

    今ã¾ã§ä½œã£ãŸç‰©ã‚’ã©ã†ã—ã¦ãれるã®ï¼Ÿã¨ã‚‚æ€ã„ã¾ã—ãŸãŒã€ã¾ããれã¯Twitterã®ã‚„り方ã§ã‚‚ã‚ã‚‹ã®ã§å¾“ã‚ãªãã¦ã¯ãªã‚Šã¾ã›ã‚“。「gtktwitterã€ã‚’「gtktweeterã€ã¨ãƒªãƒãƒ¼ãƒ ã™ã‚‹äº‹ã«ã—ã¾ã—ãŸã€‚ç°¡å˜ãªãŠä»•事ã§ã™ã€‚
    ãŸã ã—今ã¾ã§gtktwitterã¨ã—ã¦æ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ã§å¼•ã£ã‹ã‹ã£ã¦ã„ãŸç‰©ãŒæ—¢ã«ä½¿ã„物ã«ãªã‚‰ãªã„物ã«ãªã‚‹ã®ã¯å¯‚ã—ã„ã§ã™ãŒã€‚

    デスクトップã§èªè¨¼å‡ºæ¥ã‚‹ä»•組ã¿ãŒxAuthã—ã‹ãªã„

    TwitterãŒãã†ã—ã‚ã¨è¨€ã†ãªã‚‰ã°å¾“ã‚ãªã„ã¨ã„ã‘ãªã„ã®ã§ã™ã€‚以å‰mixi APIãŒWSSEを採用ã—ãŸæ™‚も「AtomPP/WSSEãªã‚“ã‹ã‚„ã‚ã¡ã‚ƒãˆ...ã€ã¨è¨€ã£ãŸã‚Šã‚‚ã—ã¾ã—ãŸãŒã€TwitterやりãŸã„ãªã‚‰å¾“ã†ã—ã‹ãªã„ã®ã§ã™ã€‚


    ã“ã“ã¾ã§ã¯é †èª¿ã ã¨æ€ã£ã¦ã¾ã—ãŸã€‚
    pythonã§xAuthを使ã†ã‚µãƒ³ãƒ—ル書ã„ãŸã®ã‚‚ã€ã“れã®å¸ƒçŸ³ã ã£ãŸã‚Šã—ã¾ã™ã€‚
    ã‚ã®æ™‚ã¯COMSUMER_KEYã‚„CONSUMER_SECRETã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã«åŸ‹ã‚è¾¼ã‚ã‚‹ç‰©ã¨æ€ã£ã¦ãŸã‚“ã§ã™ã€‚

    ã ãŒã—ã‹ã—ã€å®Ÿéš›ã«ã¯CONSUMER_KEYã‚„CONSUMER_SECRETをソースコードã«åŸ‹ã‚込むã¨ã„ã†äº‹ã¯ã€APIãƒã‚¤ã‚¸ãƒ£ãƒƒã‚¯ã•れるå¯èƒ½æ€§ãŒã‚る事をæ„味ã—ã¦ã„ã¾ã™ã€‚
    確ã‹ã«ã‚¢ãƒ—リケーションåã¨ã—ã¦ã€ã‚ªãƒ¼ãƒ—ンソースã§å…¬é–‹ã•れã¦ã„るアプリケーションã®CONSUMER_KEY/CONSUMER_SECRETを使ã„ã€é€£æŠ•ã—オフィシャルã‹ã‚‰banã•ã›ã‚‹ãªã‚“ã¦äº‹ã‚‚å¯èƒ½ã§ã™ã€‚
    ã˜ã‚ƒãxAuth/OAuthã—ã‹èªè¨¼æ–¹æ³•ãŒç„¡ã„ç¾çжã®Twitterã§ã€ã‚ªãƒ¼ãƒ—ンソースアプリケーションã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã«ä½•ã‚’æŒã£ã¦è­˜åˆ¥IDã‚’æ ¼ç´å‡ºæ¥ã‚‹ã®ã‹ã€‚

    オフィシャルサãƒãƒ¼ãƒˆã«èžã„ã¦ã¿ã¾ã—ãŸã€‚以下ãã®ä¼šè©±

    mattn:

    I'm author of gtktweeter that is GUI application working on unix and windows. I want to use xauth. please


    ã“ã‚“ã«ã¡ã‚。unixã¨windowsã§å‹•ãGUIアプリケーション"gtktweeter"ã®ä½œè€…ã§ã™ã€‚xauthを使ã„ãŸã„ã§ã™ã€‚ãŠé¡˜ã„ã—ã¾ã™ã€‚
    Twitter Support:

    Thank you for your interest in xAuth. As your code is publicly available, your application's keys are posted publicly and external parties could hijack your API access. This presents an abuse risk, and you can understand our concern. Before we can proceed with granting xAuth access, you must remove the keys from your public source. Developers that want to use your code will have to register their own Twitter application and apply for it to have xAuth as well. Once you have made this change, please let us know and include a link to a screenshot of your application in action on either platform. Thanks


    xAuthã«èˆˆå‘³ã‚’示ã—ã¦ãれã¦ã‚りãŒã¨ã†ã€‚å›ã®ã‚³ãƒ¼ãƒ‰ã¯å…¬é–‹çŠ¶æ…‹ãªã®ã§ã€ã‚¢ãƒ—リケーションã®ã‚­ãƒ¼ãŒå…¬ã«é–‹ç¤ºã•れã¦ã—ã¾ã£ã¦ã„る。部外者ãŒAPIã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ä¹—ã£å–ã‚‹ã“ã¨ãŒå‡ºæ¥ã¦ã—ã¾ã†ã€‚ã“ã‚Œã¯æ‚ªç”¨ä¹±ç”¨ã‚’æ‹›ãã‹ã­ãªã„ã¨æ‡¸å¿µã—ã¦ãŠã‚Šã€ã‚ãªãŸã‚‚ãれをç†è§£é ‚ã‘ã‚‹ã¨æ€ã„ã¾ã™ã€‚ç§é”ãŒxAuthアクセスã¸ã®è¨±å¯ã‚’与ãˆã‚‹å‰ã«ã€å…¬é–‹ã•れã¦ãŠã‚‰ã‚Œã‚‹ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã‚­ãƒ¼ã‚’削除ã™ã¹ãã§ã™ã€‚ã‚ãªãŸã®ã‚³ãƒ¼ãƒ‰ã‚’使ã†é–‹ç™ºè€…ã¯è‡ªã‚‰ã®Twitterアプリケーションを登録ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã—ã€ãã®ä¸Šã§ãã®ã‚¢ãƒ—リケーションã«å¯¾ã—ã¦ã‚‚xAuthã®ç”³è«‹ã‚’行ã†å¿…è¦ãŒã‚ã‚‹ã®ã§ã™ã€‚ã“ã®å¤‰æ›´ã‚’終ãˆãŸå¾Œã«ã€å„プラットフォーム上ã§ã‚¢ãƒ—リケーションãŒå‹•作ã—ã¦ã„るスクリーンショットã¸ã®ãƒªãƒ³ã‚¯ã‚’å«ã‚ã¦çŸ¥ã‚‰ã›ã¦ä¸‹ã•ã„。ã‚りãŒã¨ã†ã‚りãŒã¨ã†ã€‚
    ç§ã¯ç›®ã‚’ç–‘ã£ãŸã€‚ãŸã ã§ã•ãˆã“ã®è¿”事を貰ã†ã¾ã§ã«2æ—¥åŠæŽ›ã‹ã£ãŸã¨ã„ã†ã®ã«ã€ã“ã®ã‚¢ãƒ—リケーションを使ã„ãŸã„ユーザãŒã€ã„ã¡ã„ã¡ã‚¢ãƒ—リケーション登録をã—ã€ãã®IDをソースコードã«åŸ‹ã‚込むã€ã‚‚ã—ãã¯ã‚¢ãƒ—リケーション上ã§è¨­å®šã—ã€ãã®CONSUMER_KEY/CONSUMER_SECRETã‚’twitter supportã«é€£çµ¡ã—ã€xAuthã«è¨±å¯ãŒä¸‹ã‚Šã¦åˆã‚ã¦ãã®ã‚¢ãƒ—リケーションを使ãˆã‚‹æ§˜ã«ãªã‚‹ã€‚
    ãªã‚“ã ãれ。

    ç§ã¯ç¶šã‘ã¦è³ªå•ã—ãŸã€‚ãã†ã€åŠåˆ†ã‚­ãƒ¬ãªãŒã‚‰ã€‚
    mattn:

    Hi. What the best way to contain the key or sign into my application?


    ã“ã‚“ã«ã¡ã‚。アプリケーションã«ã‚­ãƒ¼ã‚„サインをå«ã‚る一番ã„ã„æ–¹æ³•ã£ã¦ãªã‚“ãªã®ï¼Ÿ
    ã¡ãªã¿ã«ã€twitter supportã«ãƒã‚±ãƒƒãƒˆã‚’登録ã™ã‚‹éš›ã«ã€ŒDo you feelã€ã¨ã„ã†é …ç›®ãŒã‚ã‚‹ã®ã ã‘ã©ã€ã‚ãˆã¦ç§ã¯ã“ã†æ›¸ã„ãŸã€‚
    ã“ã®ä»¶ã«é–¢ã—ã¦ã¾ã¨ã‚‚ãªå›žç­”ãŒå¾—られã¦ã„ãªã„ã®ã§too badã 
    ã“ã®è³ªå•ã«å¯¾ã—ã¦ã®è¿”事も2æ—¥ã‹ã‹ã£ãŸã€‚イライラã™ã‚‹ã€‚
    Twitter Support:

    We recommend that you do not distribute the keys with your source at all. If you want to provide a compiled binary of your application to download, this may of course contain the keys necessary to function. Let me know how you would like to proceed. Thank


    キーをå«ã‚€å…¨ã¦ã®ã‚½ãƒ¼ã‚¹ã‚’公開ã—ãªã„事をã€ç§é”ã¯æŽ¨å¥¨ã—ã¦ã„ã¾ã™ã€‚ã‚‚ã—コンパイルã•れãŸãƒã‚¤ãƒŠãƒªã®ã‚¢ãƒ—リケーションをダウンロードã¨ã—ã¦æä¾›ã™ã‚‹ãªã‚‰ã°ã€å‹•作ã®ç‚ºã«å¿…è¦ãªã‚­ãƒ¼ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã®ã‹ã‚‚ã—れã¾ã›ã‚“。ã©ã®æ§˜ã«ã•れãŸã„ã‹æ•™ãˆã¦ãã ã•ã„。ã‚りãŒã¨ã†ã‚りãŒã¨ã†ã€‚
    ã‚„ã£ã±ã‚Š...

    Twitterã®xAuthã£ã¦å…¨ç„¶ã ã‚ã˜ã‚ƒã‚“。使ãˆãªã„ã˜ã‚ƒã‚“。ãƒã‚¤ãƒŠãƒªã«ãªã£ãŸã¨ã—ã¦ã‚‚スニファã§ç¢ºèªã™ã‚Œã°CONSUMER_KEYãらã„読ã¿å–れるよ。ã—ã‹ã‚‚x_auth_passwordãªã‚“ã‹ç”Ÿã ã—。
    ã¾ã•ã‹ã“ã‚“ãªãƒ¬ãƒ™ãƒ«ã®é‹ç”¨ã‚’考ãˆã¦ã„ãŸã¨ã¯æ€ã£ã¦ãªã‹ã£ãŸã€‚

    åŠåˆ†ã‚ãらã‚ãªãŒã‚‰ã€ä»¥ä¸‹ã®(イヤミをå«ã‚“ã )æ–‡é¢ã‚’残ã—ãŸ
    mattn:
    Open source.
    I want to hear the best way that is possible to ...
    * working at all
    * publish source code

    BTW) I believe that twitter revoke basic auth killed 50% of desktop application posting to twitter.
    Best Regards, Thanks.

    オープンソースã ã€‚
    ç§ã¯ä»¥ä¸‹ã‚’満ãŸã™ä¸€ç•ªã®æ–¹æ³•ã‚’èžããŸã„ã‚“ã ã€‚
    * å…¨ã¦ã§å‹•作ã™ã‚‹
    * ソースコードãŒå…¬é–‹ã•れã¦ã„ã‚‹

    ã¨ã“ã‚ã§ã€Basicèªè¨¼ã‚’廃止ã—ãŸäº‹ã§Twitterã¯ãƒã‚¹ãƒˆå‡ºæ¥ã¦ã‚‹ã‚¢ãƒ—リケーションã®50%を殺ã—ãŸã‚“ã ã¨ã€ç§ã¯ä¿¡ã˜ã¦ã„るよ。
    よã‚ã—ã。ã‚りãŒã¨ã†ã€‚
    ã¡ãªã¿ã«ã€xAuthを使ã‚ãšOAuthを使ã£ãŸæ–¹æ³•ã‚‚ãªãã¯ãªã„。ã“ã®æ–¹æ³•ã¯request tokenã‚’è¦æ±‚ã—ã€ãã®request token secretã‚’å…ƒã«access tokenã‚’å–å¾—ã™ã‚‹ã€‚ãã®access token secretã‚’æŒã£ã¦Twitter APIã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ç‰©ã€‚ãŸã ã—access tokenã‚’å¾—ã‚‹éš›ã«ã¯ãƒ–ラウザã§è¨±å¯ã™ã‚‹å¿…è¦ãŒã‚りã€ã‹ã¤ãƒ–ラウザã«è¡¨ç¤ºã•ã‚ŒãŸæ•°æ¡ã®ç•ªå·ã‚’アプリケーションå´ã«çŸ¥ã‚‰ã›ã¦ã‚ã’ãªã‘れã°ãªã‚‰ãªã„。
    ブラウザãŒã©ã®è£½å“ã‹ã‚‚分ã‹ã‚‰ãªã„ã—ã€ç”»é¢ã«ä½•ãŒè¡¨ç¤ºã•れã¦ã„ã‚‹ã‹ãªã‚“ã¦ã‚¢ãƒ—リケーションã¯çŸ¥ã‚‹è¡“ã‚‚ãªã„。完全手作業ã§ã“ã®PINã¨å‘¼ã°ã‚Œã‚‹ã‚³ãƒ¼ãƒ‰ã‚’コピペã™ã‚‹ã—ã‹ç„¡ã„ã®ã ã€‚
    ãã®ç‚¹ã€Flickrèªè¨¼ã¯ã“ã®PINã‚’åŒç­‰(flobã¨å‘¼ã°ã‚Œã‚‹)ã‚’API経由ã§è²°ã„ã€ã‚¢ã‚¯ã‚»ã‚¹è¨±å¯æ™‚ã«å¼•ãæ¸¡ã™ã¨ã„ã†æ–¹å¼ã‚’å–ã£ã¦ã„る為ã€ãƒ¦ãƒ¼ã‚¶ã¯åˆã‚ã¦ã®èµ·å‹•時ã«ç«‹ã¡ä¸ŠãŒã£ãŸãƒ–ラウザã§ã€Œè¨±å¯ã€ã¨ã™ã‚Œã°è‰¯ã„ã ã‘ãªã®ã§ã‚る。ã¡ãªã¿ã«ã€Œéžè¨±å¯ã€ã¨ã—ãŸå ´åˆã®å‹•作ã¯Twitterã‚‚Flickrも対ã—ã¦å¤‰ã‚らãªã„。
    本当ã«ã“れã§è‰¯ã‹ã£ãŸã®ã‹ï¼ŸTwitter。Basic Auth over SSLã ã‘ã§ã‚‚残ã—ã¦ãŠã„ãŸæ–¹ãŒè‰¯ã‹ã£ãŸã‚“ã˜ã‚ƒãªã„ã®ï¼Ÿã¨ã‹æ€ã£ã¦ã—ã¾ã†ã€‚クライアントã®èªè¨¼ã«HMAC-SHA1ã‚„SSLã®å¯¾å¿œãŒå¿…é ˆã§ã€ãƒ–ラウザ起動ã®ä»•組ã¿ãŒå¿…è¦ã§ã€è¨­å®šãƒ•ァイルã«ä¿å­˜ã™ã‚‹é …目もCONSUMER_KEY/CONSUMER_SECRET/ACCESS_TOKEN/ACCESS_TOKEN_SECRETã¨4ã¤å¢—ãˆãŸã€‚ã„ã¾ã¾ã§æ°—軽ã«Perlã‚„Pythonã€Rubyã§ã‚¹ã‚¯ãƒªãƒ—トを書ã„ã¦ãŸæ§˜ãªäº‹ã¯å‡ºæ¥ãªã„ã®ã ã€‚
    APIã§é–‹ç™ºè€…を引ã込んã Twitterã«ã¨ã£ã¦ã€ã“ã®æå®³ã¯å°ã•ããªã„ã¨æ€ã£ã¦ã„る。

    ã¡ãªã¿ã«ã€ã“ã®ä»¶ã§ã¤ã„カッã£ã¨ãªã£ã¦ä¸€æ°—ã«ãƒ–ラウザ起動をå«ã‚ãŸOAuthã®ã‚³ãƒ¼ãƒ‰ã‚’書ã„ãŸã€‚
    何もåçœã—ã¦ã„ãªã„。

    Twitter API プログラミング Twitter API プログラミング
    è¾»æ‘ æµ©
    ワークスコーãƒãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ / ï¿¥ 2,730 (2010-04-21)
     
    発é€å¯èƒ½æ™‚間:在庫ã‚り。


  • 09/09/10--20:17: TwitterãŒè€ƒãˆã‚‹APIèªè¨¼ã¨ã¯ (chan 1718684)
  • よã†ã‚„ãTwitterã®ã‚„りãŸã„事ãŒåˆ†ã‹ã£ãŸæ°—ãŒã™ã‚‹ã€‚

    æ•°æ—¥å‰ã€Twitterã®xAuth/OAuthã®æ‰±ã„ã«ã¤ã„ã¦ã®è¨˜äº‹ã‚’書ã„ãŸã€‚
    レスãƒãƒ³ã‚¹ã®æ‚ªã•や開発者ã«è¶³ã‚’å‘ã‘ã¦ã„ã‚‹ã¨ã‚‚æ€ãˆã‚‹å¯¾å¿œã«ã€ã‚¤ãƒ¤ãƒŸãŸã£ã·ã‚Šã®æ–‡é¢ã‚’残ã—ãŸã®ã ãŒ...

    mattn:

    ã¨ã“ã‚ã§ã€Basicèªè¨¼ã‚’廃止ã—ãŸäº‹ã§Twitterã¯ãƒã‚¹ãƒˆå‡ºæ¥ã¦ã‚‹ã‚¢ãƒ—リケーションã®50%を殺ã—ãŸã‚“ã ã¨ã€ç§ã¯ä¿¡ã˜ã¦ã„るよ。

    ãã®ãŠè¿”äº‹ãŒæ¥ã¾ã—ãŸã€‚ãŒã€ã„ããªã‚Šå‡ºå£ã‚’塞ãŒã‚Œã¦ã—ã¾ã„ã¾ã—ãŸã€‚

    Twitter Support:

    Hi,

    Again, we ask that you do not distribute your application's keys and secrets with its source. We are happy to review your application for xAuth once you provide the requested information about it (such as an overview of its functionality and a screenshot of it in action on a Unix-based system or Windows). If xAuth is granted, it will only apply to your application keys and developers who want to compile your source will need to register their own application, apply for it to have xAuth as well, and plug their own keys into the source.

    I apologize for the inconvenience that this causes. Please let me know how you would like to proceed.

    Thanks

    ã“ã‚“ã«ã¡ã‚

    繰り返ã—ã¾ã™ãŒã€ã‚¢ãƒ—リケーション㮠key ãŠã‚ˆã³ secret ã¯ã‚½ãƒ¼ã‚¹ã§é…布ã—ãªã„様ã€ç§é”ã¯ãŠé¡˜ã„ã—ã¦ãŠãã¾ã™ã€‚ ãŠé¡˜ã„ã—ãŠã‚Šã¾ã™ã‚¢ãƒ—リケーションã«ã¤ã„ã¦ã®æƒ…å ±(UNIX ベースã®ã‚·ã‚¹ãƒ†ãƒ ã‚‚ã—ã㯠Windows ã§ã®å‹•作スクリーンショットã€ãŠã‚ˆã³æ©Ÿèƒ½æ¦‚è¦ãªã©)ã‚’æä¾›é ‚ã„ãŸå¾Œã«ã€è²´æ–¹ã®ã‚¢ãƒ—リケーションã«ã¤ã„㦠xAuth ã®å¯©æŸ»ã‚’ã™ã‚‹ã®ãŒæ¥½ã—ã¿ã§ã™ã€‚ xAuth ãŒæ¨©é™ä»˜ä¸Žã•れる場åˆã€ãれã¯è²´æ–¹ã®ã‚¢ãƒ—リケーションキーã«å¯¾ã—ã¦ã®ã¿é©ç”¨ã•れã€è²´æ–¹ã®ã‚½ãƒ¼ã‚¹ã‚’コンパイルã—ãŸã„開発者ã¯å„々ã®ã‚¢ãƒ—リケーションを登録ã—ã€ãã®ä¸Šã§ xAuth を使ãˆã‚‹æ§˜ã«å映ã€ãã—ã¦è‡ªä¿¡ã®ã‚­ãƒ¼ã‚’ソースã«å·®ã—込む事ã«ãªã‚Šã¾ã™ã€‚

    ã“れã«èµ·å› ã™ã‚‹ã”ä¸ä¾¿ã‚’ãŠè©«ã³è‡´ã—ã¾ã™ã€‚ã©ã®æ§˜ã«ã•れãŸã„ã‹æ•™ãˆã¦ä¸‹ã•ã„。

    ã‚りãŒã¨ã†ã‚りãŒã¨ã†
    ã‚„ã£ã±ã‚Šã‚ªãƒ•ã‚£ã‚·ãƒ£ãƒ«ã®æ„å‘ã¨ã—ã¦ã¯CONSUMER_KEYã¨CONSUMER_SECRETã¯å…¬é–‹ã™ã‚‹ãªã¨ã„ã†ã®ãŒæŒ‡é‡ã‚‰ã—ã„。
    ãれã§ã¯ã¨ã„ã†äº‹ã§ã¾ã¨ã‚ã¦è³ªå•ã—ã¦ã¿ãŸã€‚
    mattn:

    I have few question.

    1. How dangerous publishing the key can be possible?
      If I put the key in the source code, what can be happen?
    2. How worse is the hyjack as your said?
      Juggle of timeline of users of my application?
      Speaking ill of my application?
      Spam?
    3. How many times we get approval to xAuth?
      I got replies of this issue for 1 or 2 days.
      user of my application will also looking for?

    I'm finding the best way or best solution of following problem.

    1. All users can use my application immediately.
    2. The source code is open source completely.
    3. Easy to use, no using browser, no copy and paste of pin code.

    Do you have any idea?

    I created UI. maybe possible to compile on unix.
    screenshot is here:
      http://mattn.tumblr.com/post/1090305624/gtktweeter-on-win32-oauth

    Currently, I pushed source code to repository without key.

    Thanks. Thanks.

    幾らã‹è³ªå•ãŒã‚りã¾ã™ã€‚

    1. キーを公開ã™ã‚‹ã¨ã„ã†äº‹ã¯ã©ã‚“ãªå±é™ºãŒã‚りãˆã‚‹ã®ã‹ï¼Ÿ
      ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã«ã‚­ãƒ¼ã‚’ç½®ãå ´åˆã€ä½•ãŒèµ·ãå¾—ã‚‹ã®ã‹ï¼Ÿ
    2. è²´æ–¹ã®ä»°ã‚‹ãƒã‚¤ã‚¸ãƒ£ãƒƒã‚¯ã¯ã©ã‚“ãªã«æ‚ªã„物ã‹ï¼Ÿ
      ç§ã®ã‚¢ãƒ—リケーションを使ã†ãƒ¦ãƒ¼ã‚¶ã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ã‚’改ã–ん?
      ç§ã®ã‚¢ãƒ—リケーションã«å¯¾ã™ã‚‹ä¸­å‚·ï¼Ÿ
      è‚‰è©°ã‚?
    3. xAuth ã®è¨±å¯ã‚’å¾—ã‚‹ã®ã«ã©ã‚Œã ã‘æ™‚é–“ãŒæŽ›ã‹ã‚‹ã®ã‹ï¼Ÿ
      ç§ã®ã“ã®ä»¶ã®è¿”事を貰ã†ã®ã«1日もã—ãã¯2日掛ã‹ã£ã¦ã„る。
      ç§ã®ã‚¢ãƒ—リケーションã®ä½¿ç”¨è€…ã‚‚å¾…ãŸã•れるã ã‚ã†ã‹ï¼Ÿ

    ç§ã¯ä»¥ä¸‹ã®å•題を解決ã—得る一番ã®è§£æ±ºã‚„方法を探ã—ã¦ã„る。

    1. å…¨ã¦ã®ãƒ¦ãƒ¼ã‚¶ãŒå³åº§ã«ç§ã®ã‚¢ãƒ—リケーションを使ã†äº‹ãŒå‡ºæ¥ã‚‹ã€‚
    2. ソースコードã¯å®Œå…¨ã«ã‚ªãƒ¼ãƒ—ンソースã§ã‚る。
    3. ç°¡å˜ã«ä½¿ãˆã‚‹ã€‚ブラウザã¯ä½¿ã‚ãªã„。PINコードをコピペã—ãªã„。

    何ã‹ã‚¢ã‚¤ãƒ‡ã‚¢ã¯ã‚りã¾ã™ã‹ï¼Ÿ

    UIを作りã¾ã—ãŸã€‚ãŠãらãUNIXã§ã‚³ãƒ³ãƒ‘イル出æ¥ã¾ã™ã€‚
    スクリーンショットã¯ã“ã¡ã‚‰:
      http://mattn.tumblr.com/post/1090305624/gtktweeter-on-win32-oauth

    ç¾åœ¨ã€ç§ã¯ã‚­ãƒ¼ã‚’å«ã¾ãšã«ãƒªãƒã‚¸ãƒˆãƒªã¸ã‚½ãƒ¼ã‚¹ã‚’プッシュã—ã¾ã—ãŸã€‚

    ã‚りãŒã¨ã†ã‚りãŒã¨ã†
    å•題視ã—ã¦ãれãŸã®ã‹ã€1日以内ã«è¿”事æ¥ãŸã€‚

    Twitter Support:

    Hi Yasuhiro,
    To answer your first two questions, if your application keys are public, your application may be compromised and have unintended API calls executed on its behalf. With xAuth, this also means that a compromised application can solicit usernames and passwords and take actions on their behalf that they may not intend. One of our API engineers Raffi Krikorian recently wrote about this, and to quote from his post:

    Distributing an application with secrets built into it is equivalent to distributing the secrets themselves. I don't believe that there yet exists a viable platform to store secrets in widely distributed software in such a way that they cannot be eventually extracted.
    ...
    This client identifier can never be the sole security mechanism on a platform. Instead, it is only one part of a puzzle used to maintain security on the network. What this does not mean, is that Twitter will allow applications to distribute their keys in the open. Instead, what the Platform team is trying to create is an ecosystem where getting a new key (in Twitter's case from dev.twitter.com) is significantly easier than re-using a key from another application.

    You may read the rest at http://mehack.com/oauth-and-the-twitter-api .

    As for your particular application, if you offer a compiled binary with its consumer key and secret made as inaccessible as possible, this should satisfy your first and third qualifications. I have granted your application, client ID 80630, xAuth access. Note that if its keys are compromised, they may be reset and your application's xAuth access may be expired for security reasons. Let me know if you have any other questions.

    Thanks


    ã“ã‚“ã«ã¡ã‚ヤスヒーロ
    最åˆã®ï¼’ã¤ã®è³ªå•ã«ã¤ã„ã¦...ã‚‚ã—アプリケーションキーを公開ã™ã‚‹å ´åˆã€è²´æ–¹ã®ã‚¢ãƒ— リケーションãŒä¾µå®³ã•れるå¯èƒ½æ€§ãŒã‚ã‚Šã€æ„図ã—ãªã„API呼ã³å‡ºã—を肩代ã‚りã™ã‚‹äº‹ã«ãªã‚Šã¾ã™ã€‚ xAuth ã§ã¯ã€ã“ã®ä¾µå®³ã•れãŸã‚¢ãƒ—リケーションãŒãƒ¦ãƒ¼ã‚¶åã¨ãƒ‘スワードを求ã‚ã€æ„図ã—ãªã„ã§ã‚ã‚ã†è‚©ä»£ã‚りã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹äº‹ã‚‚出æ¥ã¦ã—ã¾ã†ã®ã§ã™ã€‚
    我々㮠API エンジニアã®ä¸€äººã§ã‚ã‚‹ã€Raffi Krikorian ã¯æœ€è¿‘ã“れã«ã¤ã„ã¦è¨˜ã—ã¦ãŠã‚Šã€å½¼ã®è¨˜äº‹ã‹ã‚‰å¼•用ã™ã‚‹ã¨:

    広ã知られãŸé…布ソフトウェアã®ä¸­ã«ãŠã„ã¦ã€éžå…¬é–‹æƒ…å ±ãŒçµæžœã¨ã—ã¦æŠ½å‡ºã•れãªã„ ã¨ã„ã†æ‰‹æ³•ã§ã€ãれを格ç´å‡ºæ¥ã‚‹å®Ÿç”¨çš„ãªãƒ—ラットフォームãŒå­˜åœ¨ã™ã‚‹ã ãªã‚“ã¦æœªã  ã«ä¿¡ã˜ã‚‹äº‹ãŒå‡ºæ¥ãªã„。
    ...
    ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆè­˜åˆ¥å­ã¯ã€ãƒ—ラットホーム上ã®å”¯ä¸€ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼å¯¾ç­–ã«ã¯ãªã‚Šå¾—ã¾ã›ã‚“。 ãれã©ã“ã‚ã‹ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚’ç¶­æŒã™ã‚‹ã®ã«ä½¿ç”¨ã•れるパズルã®ä¸€éƒ¨ã«ã™ãŽã¾ã›ã‚“。 ã“ã‚ŒãŒæ„図ã—ã¦ã„ãªã„ã®ã¯ã€å„々ã®ã‚­ãƒ¼ã‚’オープンã«é…布ã™ã‚‹ã‚¢ãƒ—リケーションをTwitterã¯è¨±ã™äº‹ã«ãªã‚‹ã§ã‚ã‚ã†ã€ã¨ã„ã†äº‹ã§ã™ã€‚ 代ã‚りã«ã€Platformãƒãƒ¼ãƒ ãŒä½œæˆã—よã†ã¨ã—ã¦ã„ã‚‹ã®ã¯ã€ä»–ã®ã‚¢ãƒ—リケーションã‹ã‚‰ã‚­ãƒ¼ã‚’å†åˆ©ç”¨ã™ã‚‹ã‚ˆã‚Šã‚‚ã€æ¥µã‚ã¦ç°¡å˜ã«æ–°ã—ã„キー(Twitterã®å ´åˆdev.twitter.comã‹ã‚‰)を入手ã™ã‚‹ç‚ºã®ã€Œã‚¨ã‚³ã‚·ã‚¹ãƒ†ãƒ ã€ã§ã™ã€‚

    ã“ã®æ®‹ã‚Šã¯ã“ã“ã§èª­ã‚€äº‹ãŒå‡ºæ¥ã¾ã™: http://mehack.com/oauth-and-the-twitter-api

    貴方特定ã®ã‚¢ãƒ—リケーションã¨ã—ã¦ã€å‡ºæ¥ã‚‹ã ã‘アクセスã—難ã„å½¢ã«ã—㟠consumer key 㨠consumer secret ã‚’å«ã‚“ã ã€ã‚³ãƒ³ãƒ‘イル済ã¿ãƒã‚¤ãƒŠãƒªã‚’計画ã—ã¦ã„ã‚‹ã®ã§ã‚れã°ã€ã¾ãšè²´æ–¹è‡ªä¿¡ã¨ã€ç¬¬ä¸‰ã®è³‡æ ¼è€…を満足ã•ã›ã‚‹äº‹ãŒå‡ºæ¥ã‚‹ã§ã—ょã†ã€‚
    我々ã¯è²´æ–¹ã®ã‚¢ãƒ—リケーション㫠xAuth アクセスã®è¨±å¯ã‚’与ãˆã¾ã—ãŸã€‚クライアントID㯠80630 ã§ã™ã€‚ キーãŒä¾µå®³ã•れã€ã‚­ãƒ¼ã‚’リセットã—ãŸå ´åˆã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚’ç†ç”±ã«è²´æ–¹ã®ã‚¢ãƒ—リケーション㮠xAuth アクセスã¯åœæ­¢ã•ã›ã‚‰ã‚Œã‚‹ã§ã—ょã†ã€‚
    何ã‹ä»–ã®è³ªå•ãŒã‚れã°ã€æ•™ãˆã¦ä¸‹ã•ã„。

    ã‚りãŒã¨ã†ã‚りãŒã¨ã†
    んー...。è¦ã™ã‚‹ã«ãƒ¦ãƒ¼ã‚¶IDã¨ãƒ‘スワードã«ã‚ˆã‚‹èªè¨¼æ–¹å¼ã¨ã¯åˆ¥ã«ã€ã„ãらã§ã‚‚åãæ¨ã¦å¯èƒ½ãªèªè¨¼ID公布方å¼ã‚’å–りãŸã„ã‚“ã ã¨ã€‚ã¾ã確ã‹ã«ãれãªã‚‰ãƒ‘スワードã¨ã„ã†ã€ä¸‹æ‰‹ã™ã‚Šã‚ƒãƒ‘ンツã®ä¸­èº«ã‚’見られるよりもダメージã®å¤§ãã„物をæ›ã‘出ã•れるよりã¯ã€å¹¾åˆ†ãƒ€ãƒ¡ãƒ¼ã‚¸ãŒå°ã•ããªã‚‹ã®ã‹ã‚‚ã—れãªã„。
    ãŸã ã—ãã®ç‚ºã«ã¯ã€ã‚¢ãƒ—リケーションã«ä»˜ä¸Žã•れる権é™ã«ã‚ˆã£ã¦ãƒ‘スワードã¨ã„ã†ç§˜å¯†ã®åœ’ã«åˆ°é”出æ¥ãªã„仕組ã¿ãŒå¿…è¦ã§ã‚りã€ã‹ã¤ç”³è«‹æ–¹å¼ç­‰ã¨ã„ã£ãŸã¨ã¦ã‚‚ãƒã‚«ã’ãŸç‰©ã‚’廃止ã™ã‚‹å¿…è¦ãŒã‚りã€å…¨ã¦ã‚ªãƒ¼ãƒˆãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã«ã‹ã¤Machine Readableã«é‚行出æ¥ã‚‹æ§˜ã«ã‚‚ã™ã¹ãã ã¨æ€ã†ã€‚
    ã•らã«ã¯æ—¢ã«ã‚るアプリケーションã€ä¾‹ãˆã°ç§ã®ã€Œgtktweeterã€ã«ã¤ã„ã¦ã®ãƒšãƒ¼ã‚¸ãŒã‚りã€ãã“ã‹ã‚‰ãƒœã‚¿ãƒ³ä¸€ç™º(例ãˆã°forkボタン?)ã§å…¥åŠ›æƒ…å ±ãŒã‚³ãƒ”ーã•れ新ãŸãª consumer key 㨠consumer secret ãŒä»˜ä¸Žã•れã¦ã„ã‚‹...ã¨ã„ã†ä½ã®è‡ªå‹•åŒ–ãŒæˆã•れãªã„é™ã‚Šã¯ã€Twitterã®ç›®è«–見ã¯å¤±æ•—ã¸ã¨å¤‰ã‚ã‚‹ã ã‚ã†ã€‚

    ã‚ã¨ã€cheebowã•ã‚“ã‹ã‚‰ã®ã‚³ãƒ¡ãƒ³ãƒˆ
    cheebow cheebow

    「連投ã—オフィシャルã‹ã‚‰banã•ã›ã‚‹ãªã‚“ã¦äº‹ã‚‚å¯èƒ½ã§ã™ã€‚ã€ã£ã¦ã‚ã‚‹ã‘ã©ã€ã“ã®å ´åˆbanã•れるã®ã¯ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’使ã£ãŸã€Œãƒ¦ãƒ¼ã‚¶ã€ã ã‚ˆã­ï¼Ÿã€€http://mattn.kaoriya.net/web/twitter/20100908165946.htm #Tw

    http://twitter.com/cheebow/statuses/23966546230
    上ã®Twitterã®å›žç­”を見るã¨ã€ã©ã†ã‚„らbanã•れるã®ã¯ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æ§˜ã§ã™ã€‚実際ã©ã®æ§˜ã«ãªã‚‹ã‹ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“ãŒã€‚

    ãªãŠã€gtktweeterã«ã¤ã„ã¦ã¯ãƒ–ラウザを起動ã—ã¦PINを入力ã•ã›ã‚‹ã¨ã„ã†ã€æ¥µã‚ã¦ã‚¦ãƒ³ã‚³ãªå®Ÿè£…ã¨ã—ã¦githubã«pushã—ã¦ãŠã„ãŸã€‚ソースコード㮠CONSUMER_KEY 㨠CONSUMER_SECRET ã‚’æ›¸ãæ›ãˆã¦ã‚³ãƒ³ãƒ‘イルã—ã¦ä½¿ã£ã¦ä¸‹ã•ã„。ãˆã£ãƒ¡ãƒ³ãƒ‰ã‚¯ã‚µã‚¤ï¼Ÿã ã£ã¦TwitterãŒãã†ã—ã‚ã¨è¨€ã£ãŸã‚“ã ã‚‚ん。

    ã¨ã“ã‚ã§Twitterã•ã‚“ã€æœ€å¾Œã®è³ªå•「xAuth ã®è¨±å¯ã‚’å¾—ã‚‹ã®ã«ã©ã‚Œã ã‘æ™‚é–“ãŒæŽ›ã‹ã‚‹ã®ã‹ï¼Ÿã€ã¯ã©ã†ãªã£ãŸï¼Ÿ

  • 09/11/10--04:43: Vimscriptã ã‘ã§OAuthライブラリ書ã„ãŸã€‚ (chan 1718684)
  • 先日emacsã‹ã‚‰twitter出æ¥ã‚‹ã€twittering-modeã¨ã„ã†ã®ã‚’試ã—ã¦ã¿ãŸã‚“ã§ã™ãŒã€ã¡ã‚ƒã‚“ã¨OAuth出æ¥ã¦ã¦ä¾¿åˆ©ã§ã—ãŸã€‚lispã§ã‚‚色々出æ¥ã‚‹ãªãƒ¼ã¨æ„Ÿå¿ƒã—ã¾ã—ãŸã€‚

    EmacsWiki: Twittering Mode

    twittering-mode.el is a Twitter client

    http://www.emacswiki.org/emacs/TwitteringMode
    ãれã¨åŒæ™‚ã«ã€ã„ã¤ã‚‚ã®å¦–ç²¾ãŒè€³å…ƒã§ã•ã•ã‚„ã„ãŸã€‚
    「vimスクリプトã§ã‚‚ãã£ã¨æ›¸ã‘ã‚‹ã•ã€
    ã§ã€æ›¸ãã¾ã—ãŸã€‚
    mattn's vim-oauth at master - GitHub

    oauth access library for vim

    http://github.com/mattn/vim-oauth
    sha1, hmac, base64 ã®å‡¦ç†ã«ã¯ã€Nakadairaã•ã‚“ã®ç‰©ã‚’使ã‚ã›ã¦é ‚ãã¾ã—ãŸã€‚
    vimã§twitter出æ¥ã‚‹vimscriptã¨ã—ã¦twitvimãŒã‚りã¾ã™ãŒã€ã“ã¡ã‚‰ã¯OAuthãªå‡¦ç†ã‚’python/perl/rubyæ‹¡å¼µã§ã‚„ã£ã¦ã¾ã™(ã©ã‚Œã‹æœ‰åйãªå¥´ã‚’使ã†)。
    vim-oauthãŒã‚れã°ã€pure vimscriptã§OAuth対応ã®twitterãŒå¯èƒ½ã§ã™ã€‚添付ã®twitter.vimã®CONSUMER_KEYã¨CONSUMER_SECRETã‚’æ›¸ãæ›ãˆã¦ã”試ã—ã¦ä¸‹ã•ã„。最終引数ã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªã«ã—ã¦ã‚ã‚‹ã®ã§ã€è‡ªåˆ†ã§ãƒ‘ラメータを変ãˆã‚Œã°xAuthã«ã‚‚対応å¯èƒ½ã‹ã¨æ€ã„ã¾ã™ã€‚
    ã¡ãªã¿ã«twitvimã€nr2charã®ä½¿ã„æ–¹ãŒé–“é•ã£ã¦ã‚‹ã®ã§windowsã§å®Ÿè¡Œã™ã‚‹ã¨æ–‡å­—化ã‘ã—ã¦ã¾ã—ãŸã€‚patchを書ã„ã¦ä½œè€…ã¨é€£çµ¡ä¸­ã§ã™ã€‚

  • 09/11/10--06:38: CLX C++ Libraryã§xAuthã—ã¦ã¿ãŸã€‚ (chan 1718684)
  • 以å‰ã€twitter上ã§ã€ŒSTL以上ã€Boost未満ãªä½¿ã„心地ã®ãƒ©ã‚¤ãƒ–ãƒ©ãƒªãŒæ¬²ã—ã„。ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£è¾¼ã¿ã®ã€‚ã€ã¨ã¤ã¶ã‚„ã„ãŸæ‰€ã€id:faith_and_braveã•ã‚“ã‹ã‚‰è¿”事貰ã£ãŸã€‚

    Faith and Brave Twitter / Faith and Brave

    CLX or Message-Pack or Pocoã‚ãŸã‚Šã§ã—ょã†ã‹ RT @mattn_jp: STL以上ã€Boost未満ãªä½¿ã„心地ã®ãƒ©ã‚¤ãƒ–ãƒ©ãƒªãŒæ¬²ã—ã„。ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£è¾¼ã¿ã®ã€‚

    http://twitter.com/cpp_akira/status/21234425525
    CLXã¯å®Ÿã¯å‰ã‹ã‚‰çŸ¥ã£ã¦ã„ã¦ä½•åº¦ã‹æ¨ã¦ã‚³ãƒ¼ãƒ‰ã«ä½¿ã‚ã›ã¦é ‚ã„ã¦ã„ãŸã®ã§ã™ãŒã€SSLè¶Šã—ã«proxyãŒä½¿ãˆãªã‹ã£ãŸã®ã§ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£ã®ã‚³ãƒ¼ãƒ‰ã«ã¯ä½¿ã£ã¦ã¾ã›ã‚“ã§ã—ãŸã€‚
    ã¾ãã§ã‚‚一応書ã„ã¦åˆ¤æ–­ã™ã¹ãã‹ãªã¨æ€ã£ã¦ã€åƒ•çš„ãªç­”ãˆã¨ã—ã¦ã€ã•らーーーã£ã¨æ›¸ã„ãŸã€‚
    CONSUMER_KEY 㨠CONSUMER_SECRET ã‚’æ›¸ãæ›ãˆã¦å®Ÿè¡Œã—ã¦ä¸‹ã•ã„。xAuthèªè¨¼ã‚’使ã£ã¦twitterã«ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’ãƒã‚¹ãƒˆã—ã¾ã™ã€‚

    #include <iostream>
    #include <sstream>
    #include <clx/base64.h>
    #include <clx/hexdump.h>
    #include <clx/date_time.h>
    #include <clx/format.h>
    #include <clx/hmac.h>
    #include <clx/https.h>
    #include <clx/random.h>
    #include <clx/salgorithm.h>
    #include <clx/sha1.h>
    #include <clx/uri.h>

    std::string url_encode(const std::string& url) {
        std::ostringstream rets;
        for(size_t n = 0; n < url.size(); n++) {
            unsigned char c = (unsigned char)url[n];
            if (isalnum(c) || c == '_' || c == '.' || c == '-')
                rets << c;
            else {
                char buf[8];
                sprintf(buf, "%02X", (int)c);
                rets << '%' << buf[0] << buf[1];
            }
        }
        return rets.str();
    }


    int main(int argc, char* argv[]) {

        if (argc != 4) {
            std::cerr << "usage: " << argv[0]
                << " [username] [password] [message]" << std::endl;
            return -1;
        }

        clx::date_time now;
        clx::random<unsigned int> randgen;
        randgen.engine().seed(time(0));

        std::string consumer_key = "CONSUMER_KEY";
        std::string consumer_secret = "CONSUMER_SECRET";
        std::string username = argv[1];
        std::string password = argv[2];
        std::string message = argv[3];

        std::stringstream ss;
        std::string times = clx::str(clx::format("%s") % now.c_time());
        std::string nonce = clx::hexdump(times);

        ss << "oauth_consumer_key=" << consumer_key
           << "&oauth_nonce=" << nonce
           << "&oauth_signature_method=" << "HMAC-SHA1"
           << "&oauth_timestamp=" << times
           << "&oauth_version=" << "1.0"
           << "&x_auth_mode=" << "client_auth"
           << "&x_auth_password=" << password
           << "&x_auth_username=" << username;

        std::string key = consumer_secret + "&";
        std::string val = "POST&";

        val += url_encode("https://api.twitter.com/oauth/access_token");
        val += "&";
        val += url_encode(ss.str());
        char* hmac = (char*)clx::hmac<clx::sha1>(
                key.c_str(), key.size(), val.c_str(), val.size()).code();
        std::string hm = clx::base64::encode(hmac, 20);

        ss << "&oauth_signature=" << url_encode(hm);

        clx::https session(clx::uri::encode("api.twitter.com"), 443);
        session.post(clx::uri::encode("/oauth/access_token"), ss.str());

        std::vector<std::string> item;
        std::map<std::string, std::string> params;
        clx::split_if(session.body(), item, clx::is_any_of(LITERAL("&")));
        for (unsigned int i = 0; i < item.size(); i++) {
            std::string tok = item.at(i);
            size_t pos = tok.find_first_of("=");
            params[tok.substr(0, pos)] = clx::uri::decode(tok.substr(pos+1));
        }


        ss.str("");
        ss.clear(std::stringstream::goodbit);

        ss << "oauth_consumer_key=" << consumer_key
           << "&oauth_nonce=" << nonce
           << "&oauth_signature_method=" << "HMAC-SHA1"
           << "&oauth_timestamp=" << times
           << "&oauth_token=" << params["oauth_token"]
           << "&oauth_version=" << "1.0"
           << "&status=" << url_encode(message);

        key = consumer_secret + "&" + params["oauth_token_secret"];
        val = "POST&";

        val += url_encode("https://api.twitter.com/1/statuses/update.json");
        val += "&";
        val += url_encode(ss.str());
        hmac = (char*)clx::hmac<clx::sha1>(
                key.c_str(), key.size(), val.c_str(), val.size()).code();
        hm= clx::base64::encode(hmac, 20);

        ss << "&oauth_signature=" << url_encode(hm);

        session.post(clx::uri::encode("/1/statuses/update.json"), ss.str());
        std::cout << session.body() << std::endl;

        return 0;
    }

    /* vim:set et sw=4: */
    URLã¾ã‚りã¨ã€POSTパラメータ構築ã«ä¾¿åˆ©ãªã®ãŒã‚ã£ã¦ã‚‚良ã„ã‹ãªã¨æ€ã£ãŸã€‚ã‚ーãれboost::asioã§ã‚‚言ãˆã‚‹ã‹ã€‚

  • 09/15/10--23:54: Vimã§å‡ºæ¥ã‚‹é™ç•Œã‹ï¼ŸVimscriptã§ã‚µã‚¤ãƒœã‚¦ã‚ºLiveã®APIã‚’å©ã„ã¦ã¿ãŸã€‚ (chan 1718684)
  • サイボウズLiveã«APIãŒè¿½åŠ ã•れã¾ã—ãŸã­ã€‚

    機能追加ã®ãŠçŸ¥ã‚‰ã›ï¼ˆAPI公開ã€Googleカレンダーã¨ã®åŒæœŸã€ãƒ‡ã‚¶ã‚¤ãƒ³å¤‰æ›´ï¼‰ | サイボウズLiveマガジン
    9月15æ—¥ã®ã‚µã‚¤ãƒˆãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã«ã‚ˆã‚Šã€æ–°æ©Ÿèƒ½ã‚’追加ã—ã¾ã—ãŸã€‚
    â– APIã®å…¬é–‹
    外部アプリケーションã‹ã‚‰ã‚µã‚¤ãƒœã‚¦ã‚ºLiveã®æƒ…報をå–得・æ“作ã§ãã‚‹APIを公開ã—ã¾ã—ãŸã€‚通信方å¼ã¯RESTã€èªè¨¼æ–¹å¼ã¯OAuthã§ã™ã€‚ç¾åœ¨ã¯æœ€æ–°æƒ…å ±ã®å–å¾—ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«æƒ…å ±ã®å–å¾—ã«é™å®šã—ã¦ã„ã¾ã™ãŒã€é †æ¬¡APIã§å–得・æ“作å¯èƒ½ãªæƒ…報を拡充ã—ã¦ã„ãã¾ã™ã€‚
    APIã®å…¬é–‹ã«ã‚ã‚ã›ã¦ã€ã‚µã‚¤ãƒœã‚¦ã‚ºLive Developer Centerを公開ã—ã¾ã—ãŸã€‚
    http://magazine.cybozulive.com/2010/09/system_update10.html
    API好ãã¨ã—ã¦ã¯ã€ã“れを放ã£ã¦ãŠã訳ã«ã¯ã„ãã¾ã›ã‚“。
    ã‚‚ã¡ã‚ã‚“Vimã§è¡Œãã¾ã™ï¼

    APIã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã‚ˆã‚‹ã¨Atomを使ã„ã¾ã™ã€‚ã¾ãŸèªè¨¼ã«ã¯Twitterã¨åŒã˜ãOAuthãŒæŽ¡ç”¨ã•れã¦ã„ã¾ã™ã€‚
    Vimscriptã§ã‚„ã‚‹ã«ã¯å°‘ã—æ•·å±…ãŒé«˜ã„ã‚“ã˜ã‚ƒãªã„ã®ï¼Ÿã¨æ€ã£ã¦ã„ã‚‹è²´æ–¹ï¼å‡ºæ¥ã‚‹ã‚“ã§ã™ï¼ã‚„ã‚‹ã‚“ã§ã™ï¼

    ã¾ãšå…ˆæ—¥ä½œã£ãŸã€vim-oauthを使ã£ã¦èªè¨¼ã‚’行ã„ã¾ã—ãŸã€‚
    "https://api.cybozulive.com/oauth/initiate" ã«å¯¾ã—ã¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒˆãƒ¼ã‚¯ãƒ³ã‚’è¦æ±‚ã—ã€ãã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒˆãƒ¼ã‚¯ãƒ³ã‚’元㫠"https://api.cybozulive.com/oauth/authorize" ã§ãƒ–ラウザèªè¨¼ã‚’行ã„ã¾ã™ã€‚ã™ã‚‹ã¨æ•°æ–‡å­—ã®ãƒ™ãƒªãƒ•ァイアãŒè²°ãˆã‚‹ã®ã§ã€"https://api.cybozulive.com/oauth/token" ã¸ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’è¦æ±‚ã—ã¾ã™ã€‚
    ã“れã§èªè¨¼å¿…è¦ãªç‰©ã¯æƒã„ã¾ã—ãŸã€‚ã“ã“ã¾ã§ã‚’コードã«ã™ã‚‹ã¨ä»¥ä¸‹ã®æ§˜ãªæ„Ÿã˜ã€‚
    set rtp+=webapi-vim

    let config = {}
    let configfile = expand('~/.cybozulive')
    if filereadable(configfile)
      let config = eval(join(readfile(configfile)""))
    else
      let config.consumer_key = input("consumer_key:")
      let config.consumer_secret = input("consumer_secret:")
      
      let request_token_url = "https://api.cybozulive.com/oauth/initiate"
      let auth_url =  "https://api.cybozulive.com/oauth/authorize"
      let access_token_url = "https://api.cybozulive.com/oauth/token"
      
      let [request_token, request_token_secret] = oauth#requestToken(request_token_url, config.consumer_key, config.consumer_secret)
      if has("win32") || has("win64")
        exe "!start rundll32 url.dll,FileProtocolHandler ".auth_url."?oauth_token=".request_token
      else
        call system("xdg-open '".auth_url."?oauth_token=".request_token."'")
      endif
      let verifier = input("PIN:")
      let [access_token, access_token_secret] = oauth#accessToken(access_token_url, config.consumer_key, config.consumer_secret, request_token, request_token_secret, {"oauth_verifier": verifier})
      let config.access_token = access_token
      let config.access_token_secret = access_token_secret
      call writefile([string(config)], configfile)
    endif
    ã“れã§ã€ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã¨ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãŒè²°ãˆã¾ã™ã€‚ç°¡å˜ã§ã™ã­ï¼
    ã•ã¦ã€è‚心ã®Atomã§ã™ã€‚ã“ã®ãƒ–ログã§ã¯ç´¹ä»‹ã—ãŸäº‹ãªã‹ã£ãŸã¨æ€ã„ã¾ã™ãŒã€Vimã§ã®XMLパーサを実ã¯ä»¥å‰æ›¸ã„ãŸæš–ã‚ã¦ãŠã‚Šã¾ã—ãŸã€‚
    mattn's xmlparser-vim at master - GitHub

    XML Parser for Vim

    http://github.com/mattn/xmlparser-vim
    ã“れを使ã£ã¦ãƒ‘ースã—ã¾ã—ãŸã€‚パースã™ã‚‹ã¨DOMãŒè¿”りã¾ã™ã€‚
    let notification_url = "https://api.cybozulive.com/api/notification/V2"
    let ret = oauth#get(notification_url, config.consumer_key, config.consumer_secret, config.access_token, config.access_token_secret, {})
    let dom = xml#parse(ret.content)
    for elem in dom.findAll("entry")
      echo elem.find("updated").value() . " " .  elem.find("title").value()
      echo "  " . elem.find("author").find("name").value()
      let summary = elem.find("summary")
      if !empty(summary)
        echo "  " . substitute(summary.value(), "\n""\n  ""g")
      endif
      echo "\n"
    endfor
    ã“ã‚“ãªæ„Ÿã˜ã«XMLを処ç†å‡ºæ¥ã¾ã™ã€‚ã“れã€å…¨ã¦Pure Vimscriptã§ã™ã€‚ä¿¡ã˜ã‚Œãªã„人や変態ãªäººã¯ã€ã‚½ãƒ¼ã‚¹è¦—ã„ã¦ä¸‹ã•ã„。
    å‹•ã物を置ã„ã¦ãŠãã¾ã™ã€‚
    mattn's cybozulive-vim at master - GitHub

    vim interface to cybozulive

    http://github.com/mattn/cybozulive-vim
    http 関連ã€XML関連をçºã‚㦠webapi-vim ã¨ã„ã†ãƒªãƒã‚¸ãƒˆãƒªã«å…¥ã‚Œã€cybozulive-vim ã‹ã‚‰ã¯ submodule ã¨ã—ã¦ã„ã¾ã™ã€‚
    mattn's webapi-vim at master - GitHub

    vim interface to Web API

    http://github.com/mattn/webapi-vim
    # git submodule init
    # git submodule update
    ã¨ã—ã¦ä¸‹ã•ã„。
    以下ã€cybozulive.vim ã®å…¨ä½“ã®ã‚½ãƒ¼ã‚¹ã§ã™ã€‚
    set rtp+=webapi-vim

    let config = {}
    let configfile = expand('~/.cybozulive')
    if filereadable(configfile)
      let config = eval(join(readfile(configfile)""))
    else
      let config.consumer_key = input("consumer_key:")
      let config.consumer_secret = input("consumer_secret:")
      
      let request_token_url = "https://api.cybozulive.com/oauth/initiate"
      let auth_url =  "https://api.cybozulive.com/oauth/authorize"
      let access_token_url = "https://api.cybozulive.com/oauth/token"
      
      let [request_token, request_token_secret] = oauth#requestToken(request_token_url, config.consumer_key, config.consumer_secret)
      if has("win32") || has("win64")
        exe "!start rundll32 url.dll,FileProtocolHandler ".auth_url."?oauth_token=".request_token
      else
        call system("xdg-open '".auth_url."?oauth_token=".request_token."'")
      endif
      let verifier = input("PIN:")
      let [access_token, access_token_secret] = oauth#accessToken(access_token_url, config.consumer_key, config.consumer_secret, request_token, request_token_secret, {"oauth_verifier": verifier})
      let config.access_token = access_token
      let config.access_token_secret = access_token_secret
      call writefile([string(config)], configfile)
    endif

    let notification_url = "https://api.cybozulive.com/api/notification/V2"
    let ret = oauth#get(notification_url, config.consumer_key, config.consumer_secret, config.access_token, config.access_token_secret, {})
    let dom = xml#parse(ret.content)
    for elem in dom.findAll("entry")
      echo elem.find("updated").value() . " " .  elem.find("title").value()
      echo "  " . elem.find("author").find("name").value()
      let summary = elem.find("summary")
      if !empty(summary)
        echo "  " . substitute(summary.value(), "\n""\n  ""g")
      endif
      echo "\n"
    endfor
    å®Ÿè¡Œçµæžœè²¼ã£ã¦ãŠãã¾ã™ã­ã€‚
    2010-09-16T03:33:00Z サイボウズLiveアプリを作るï¼
      æ¾æœ¬ 泰弘
      [登録] 2010å¹´9月16æ—¥(木)

    2010-06-30T14:42:20Z tw.pptx
      ç«¹è¿« 良範

    2010-09-15T02:40:58Z mattnã•ã‚“ã¨ã‚ªãƒ•ã™ã‚‹
      æ¾æœ¬ 泰弘
      å¤§é˜ªã«å‡ºå¼µã«é€ã£ãŸã¨ãã¨ã‹

    2010-06-18T01:27:21Z 竹迫 良範 ã•ã‚“ãŒå‚加ã—ã¾ã—ãŸ
      ç«¹è¿« 良範

    2010-02-26T03:59:58Z test
      hasegawa yosuke
      EF BB BF C0 AF 2F
      ï¼ˆæ·»ä»˜ãƒ•ァイルãŒã‚りã¾ã™ã€‚)

    mattn the pure vimscripter.

  • 10/07/10--07:29: Google日本語入力APIを使ã£ã¦vimã§migemo検索 (chan 1718684)
  • 先日「Google 日本語入力 - CGI APIã€ãŒå…¬é–‹ã•れã¾ã—ãŸã­ã€‚

    Google 日本語入力 - CGI API
    Google 日本語入力 - CGI API デベロッパーガイド

    Google CGI API for Japanese Input Google CGI API for Japanese Input ã¯ã€æ—¥æœ¬èªžå¤‰æ›ã‚’インターãƒãƒƒãƒˆä¸Šã§å®Ÿç¾ã™ã‚‹ãŸã‚ã®ã€CGI サービ...

    http://www.google.com/intl/ja/ime/cgiapi.html
    ã“ã‚“ãªã® migemo ã®ç‚ºã«ã‚ã‚‹ã¿ãŸã„ãªã‚‚ã‚“ã˜ã‚ƒãªã„ã§ã™ã‹ï¼

    ã•ã£ãã作りã¾ã—ãŸã€‚
    "=============================================================================
    " File: gmigemo.vim
    " Author: Yasuhiro Matsumoto <mattn.jp@gmail.com>
    " Last Change:08-Oct-2010.
    " Version: 0.1
    " WebPage: http://github.com/mattn/gmigemo-vim
    " Usage:
    "
    "   :GoogleMigemo ã“ã“ã§ã¯ãã‚‚ã®ã‚’ã¬ã
    "     match: "ココã§ã¯ç€ç‰©ã‚’脱ã"
    "
    "   :GoogleMigemo ã“ã“ã§ ã¯ãã‚‚ã®ã‚’ ã¬ã
    "     match: "此処ã§å±¥ç‰©ã‚’脱ã"
    "
    " Require:
    "   webapi-vim: http://github.com/mattn/webapi-vim

    if exists("loaded_gmigemo") || v:version < 700
      finish
    endif
    let loaded_gmigemo = 1

    function! s:nr2byte(nr)
      if a:nr < 0x80
        return nr2char(a:nr)
      elseif a:nr < 0x800
        return nr2char(a:nr/64+192).nr2char(a:nr%64+128)
      else
        return nr2char(a:nr/4096%16+224).nr2char(a:nr/64%64+128).nr2char(a:nr%64+128)
      endif
    endfunction

    function! s:nr2enc_char(charcode)
      if &encoding == 'utf-8'
        return nr2char(a:charcode)
      endif
      let char = s:nr2byte(a:charcode)
      if strlen(char) > 1
        let char = strtrans(iconv(char, 'utf-8', &encoding))
      endif
      return char
    endfunction

    function! g:GoogleMigemo(word)
      let word = substitute(a:word, '\s', ',', 'g')
      let url = "http://www.google.com/transliterate"
      let res = http#get(url, { "langpair": "ja-Hira|ja", "text": word }, {})
      let str = iconv(res.content, "utf-8", &encoding)
      let str = substitute(str, '\\u\(\x\x\x\x\)', '\=s:nr2enc_char("0x".submatch(1))', 'g')
      let str = substitute(str, "\n", "", "g")
      let g:hoge = str
      let arr = eval(str)
      let mx = ''
      for m in arr
        call map(m[1], 'substitute(v:val,"\\\\", "\\\\\\\\", "g")')
        let mx .= '\('.join(m[1], '\|').'\)'
      endfor
      return mx
    endfunction

    function! s:GoogleMigemo(word)
      if executable('curl') == ''
        echohl ErrorMsg
        echo 'GoogleMigemo: curl is not installed'
        echohl None
        return
      endif

      let word = a:word != '' ? a:word : input('GoogleMigemo:')
      if word == ''
        return
      endif
      let mx = g:GoogleMigemo(word)
      let @/ = mx
      let v:errmsg = ''
      silent! normal n
      if v:errmsg != ''
        echohl ErrorMsg
        echo v:errmsg
        echohl None
      endif
    endfunction

    command! -nargs=* GoogleMigemo :call <SID>GoogleMigemo(<q-args>)
    nnoremap <silent> <leader>mg :call <SID>GoogleMigemo('')<cr>

    " vi:set ts=8 sts=2 sw=2 tw=0:
    ã„ã¤ã‚‚1ファイルã§å‹•ãã‚‚ã®ã‚’æä¾›ã—ã¦ãã¾ã—ãŸãŒã€ãã‚ãã‚vimもライブラリã¨ã‚¢ãƒ—リケーションを分ã‘ãªã„ã¨vimã®ä»Šå¾ŒãŒã‚ã‚„ã¶ã¾ã‚Œã‚‹ãª...(vimjoltsã£ã¦ãªã‚“ã ã£ã‘æ±—)...ã¨æ€ã£ãŸã®ã§ã€ä»Šå›žã¯æ‰‹å‰å‘³å™Œã§ã™ãŒã€Œwebapi-vimã€ã¨ã„ã†ã®ã‚’使ã£ã¦ã„ã¾ã™ã€‚
    mattn's webapi-vim at master - GitHub

    webapi-vim: vim interface to Web APIDescription:Require: curl command : http://curl.haxx.se/Thanks T...

    http://github.com/mattn/webapi-vim
    先日 vim-oauth ã§ä½¿ã£ãŸå¥´ã§ã™ã­ã€‚
    ã¾ãå˜ä½“ã«ã—ãŸã„äººã¯æ›¸ãæ›ãˆã¦ä¸‹ã•ã„。

    ä½¿ã„æ–¹ã¯ç°¡å˜ã€‚
    :GogoleMigemo ã“ã“ã§ã¯ãã‚‚ã®ã‚’ã¬ã
    ã¨ã™ã‚‹ã¨ã€ã€Œã‚³ã‚³ã§ã¯ç€ç‰©ã‚’脱ãã€ãŒãƒžãƒƒãƒã—ã¾ã™ã€‚ãªãŠã€ã€Œã“ã“ã§ã¯ç€ç‰©ã‚’脱ãã€ãŒæ¤œç´¢ã—ãŸã‹ã£ãŸã‚ˆ...ã¨ã„ã†å…¨å›½2000万人ã®ã‚¨ãƒ­ã„オッサンé”。慌ã¦ãªã„ã§ã€‚
    :GogoleMigemo ã“ã“ã§ã¯ ãã‚‚ã®ã‚’ ã¬ã
    ã¨ã‚¹ãƒšãƒ¼ã‚¹ã‚’入れるã¨èªè­˜ã—ã¦ãれã€ã¡ã‚ƒã‚“ã¨ã€Œæ­¤å‡¦ã§ã¯ç€ç‰©ã‚’脱ãã€ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ã‚‚ã¡ã‚ん「ã“ã“ã§ ã¯ãã‚‚ã®ã‚’ ã¬ãã€ã¨ã™ã‚Œã°ã€Œæ­¤å‡¦ã§å±¥ç‰©ã‚’脱ãã€ã‚„「個々ã§å±¥ç‰©ã‚’脱ãã€ã«ãƒžãƒƒãƒã—ãŸã‚Šã‚‚ã—ã¾ã™ã€‚
    <leader>mg ã«ã‚­ãƒ¼ãƒžãƒƒãƒ—ã—ã¦ã‚りã¾ã™ã€‚ã‚ã¨ã€ã‚°ãƒ­ãƒ¼ãƒãƒ«é–¢æ•°ã€ŒGoogleMigemoã€ã‚‚æä¾›ã—ã¦ã‚ã‚‹ã®ã§ã€Œlet foo = GoogleMigemo(xxx)ã€ãªä½¿ã„方も出æ¥ã¾ã™ã€‚
    ãれãªã‚Šã«ä¾¿åˆ©ã‹ã‚‚ã—れã¾ã›ã‚“。もã¡ã‚ã‚“ãƒãƒƒãƒˆã«ç¹‹ãŒã£ã¦ãªã„ã¨ä½¿ãˆã¾ã›ã‚“ã—ã€ã‚¨ãƒ­ã„語å¥ã‚’検索ã™ã‚‹ã¨ã€Google先生ã«ãƒã‚¿ã‚’é€ã£ã¦ã—ã¾ã„ã¾ã™ã€‚
    ã”利用ã¯è¨ˆç”»çš„ã«ã€‚

Page 1 | 2 | 3 | 4 | 5 | newer | newest