Articles on this Page
- 06/24/10--09:30:_Goã§JSDeferred書ã„ã¦ã...
- 06/26/10--07:25:_modeline内ã§fileencodin...
- 07/03/10--05:48:_Go本ãŒå‡ºã‚‹ã‚‰ã—ã„。
- 07/10/10--07:15:_Windowsã§ç©ºæ–‡å—ã‚’ech...
- 07/13/10--08:38:_JScript.NETã§ã‚¹ãƒ¬ãƒƒãƒ‰
- 07/28/10--09:13:_Vimã§GoãŒautocompleteå‡...
- 07/31/10--06:48:_Goã§Google翻訳出æ¥ã‚...
- 08/09/10--09:04:_「「new å¼ã€...
- 08/09/10--09:09:_勿‰‹ã«ã‚³ãƒŸãƒƒãƒˆãƒ¡ã...
- 08/09/10--09:38:_bashã®aliasã£ã¦ãƒžãƒ«ã...
- 08/13/10--07:32:_Devel::CheckLibã®ã‚³ãƒ¡ã...
- 08/13/10--09:35:_Zimbuã§FizzBuzz
- 08/30/10--06:51:_quickrun.vimをパクã£ã...
- 09/01/10--08:15:_VimmerãªPerl開発環境
- 09/08/10--01:00:_Twitterã®Basicèªè¨¼å»ƒæ...
- 09/09/10--20:17:_TwitterãŒè€ƒãˆã‚‹APIèª...
- 09/11/10--04:43:_Vimscriptã ã‘ã§OAuthãƒ...
- 09/11/10--06:38:_CLX C++...
- 09/15/10--23:54:_Vimã§å‡ºæ¥ã‚‹é™ç•Œã‹ï...
- 10/07/10--07:29:_Google日本語入力APIã...
More Channels
- Feb 23: IHE Knowledge Network
- Feb 23: Twitter / Favorites from...
- Nov 24: atomz501
- Feb 22: 肥満人ã®...
- Nov 27: EiffelArt
- Nov 24: ...
- Nov 29: Ethel. » Uncategorized
- Nov 29: Stiri Scurte - prevenimente
- Feb 22: Yahoo!天気・ç½å®³ -...
- Nov 27: Navigating Monogamy in a Sea of...
- Nov 27: benzodiazepine | Keyword Feed
- Nov 27: taking ones own lif | Keyword Feed
- Jan 18: Last 25 matches for busch
- Jan 30: Forex in Romania » Forex...
- Nov 21: AOL News
- Nov 21: 有希ã®ã‚¬ãƒ³ãƒ—ラé‡ç”£å·¥å ...
- Nov 21: åŠå¿ƒï¼Žå›žæ†¶
- Nov 18: Recent Videos for KickingJON
- Jan 30: Davis Arinaitwe news from ESPN...
- Nov 27: WoW Insider
- Nov 27: Keeping is power!!
- Feb 9: Awaiting the Flood
- Nov 27: A love like that... - Pisces -...
- Feb 21: starry sky
- Nov 27: Italy Vacations Guide
- Nov 27: Comentarios para Ubuntuxeando al...
- Feb 17: Cafe ONE OR EIGHT
- Nov 27: shinbohã®ãƒ€ãƒ©ãƒ€ãƒ©ãªã²ã¨ã...
- Nov 24: Asti Warmel
- Nov 24: Atelier 2-42
- Jan 12: part 2 we may loose | Keyword Feed
- Nov 21: cinemax - cannes-2008
- Nov 21: n2nation
- Nov 28: Podnikové vzdělávánà v...
- Feb 20: Hawaii 発 カサブランã‚...
- Dec 17: Twitter / Favorites from fchimero
- Feb 22: This is my story.
- Feb 13: Kommentare für Fee Feuer.
- Feb 3: Pro-digital...
- Nov 29: Personajes Predeterminados
- Dec 17: Présentations
- Dec 9: things happen for a reason^^
- Nov 27: Water Flame...
- Nov 27: "Désormais, quand il y a...
- Nov 27: Flying Fantasmagorie
- Nov 27: Raging Rancor Cantina
- Feb 22: YLE Uutiset | Tiede ja tekniikka...
- Feb 9: The Devil is alive I feel him...
- Feb 6: Topsy -...
- Nov 27: Chris
|
|
Are you the publisher? Claim this channel |
|
Channel Description:
Latest Articles in this Channel:
- 06/24/10--09:30: Goã§JSDeferred書ã„ã¦ã¿ãŸã€‚ (chan 1718684)
- 06/26/10--07:25: modeline内ã§fileencodingを指定出æ¥ã‚‹Vimプラグイン書ã„ãŸã€‚ (chan 1718684)
- 07/03/10--05:48: Go本ãŒå‡ºã‚‹ã‚‰ã—ã„。 (chan 1718684)
- 07/10/10--07:15: Windowsã§ç©ºæ–‡å—ã‚’echoã™ã‚‹ã€‚ (chan 1718684)
- 07/13/10--08:38: JScript.NETã§ã‚¹ãƒ¬ãƒƒãƒ‰ (chan 1718684)
- 07/28/10--09:13: Vimã§GoãŒautocomplete出æ¥ã‚‹gocodeãŒã„ã„æ„Ÿã˜ (chan 1718684)
- インスタンスメソッド一覧
- æ§‹é€ ä½“ã®ãƒ¡ãƒ³ãƒ
- パッケージ内ã®å®šæ•°ã‚„åž‹ã€é–¢æ•°
- 07/31/10--06:48: Goã§Google翻訳出æ¥ã‚‹ãƒ©ã‚¤ãƒ–ラリ書ã„ãŸã€‚ (chan 1718684)
- 08/09/10--09:04: 「「new å¼ã€ ã§ã€å¤‰æ•°ã‚’ å¼ ã¨ã—ã¦æŒ‡å®šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã‹ï¼Ÿã€ (chan 1718684)
- 08/09/10--09:09: 勿‰‹ã«ã‚³ãƒŸãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’作ã£ã¦ãれるvimscript書ã„ãŸã€‚ (chan 1718684)
- 08/09/10--09:38: bashã®aliasã£ã¦ãƒžãƒ«ãƒãƒã‚¤ãƒˆä½¿ãˆãŸã‚“ã 。 (chan 1718684)
- 08/13/10--07:32: Devel::CheckLibã®ã‚³ãƒ¡ãƒ³ãƒ†ãƒŠã«ãªã‚Šã¾ã—ãŸã€‚ (chan 1718684)
- 08/13/10--09:35: Zimbuã§FizzBuzz (chan 1718684)
- 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.
- 08/30/10--06:51: quickrun.vimをパクã£ã¦quickdan.vimã¨ã„ã†ã®ã‚’書ã„ãŸã€‚ (chan 1718684)
- 09/01/10--08:15: VimmerãªPerl開発環境 (chan 1718684)
- alc
- erlang
- man
- perldoc
- phpmanual
- pydoc
- refe
- 09/08/10--01:00: Twitterã®Basicèªè¨¼å»ƒæ¢ã¯ç´„åŠåˆ†ã®ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—クライアントを殺ã—ãŸã€‚ (chan 1718684)
- 09/09/10--20:17: TwitterãŒè€ƒãˆã‚‹APIèªè¨¼ã¨ã¯ (chan 1718684)
- 09/11/10--04:43: Vimscriptã ã‘ã§OAuthライブラリ書ã„ãŸã€‚ (chan 1718684)
- 09/11/10--06:38: CLX C++ Libraryã§xAuthã—ã¦ã¿ãŸã€‚ (chan 1718684)
- 09/15/10--23:54: Vimã§å‡ºæ¥ã‚‹é™ç•Œã‹ï¼ŸVimscriptã§ã‚µã‚¤ãƒœã‚¦ã‚ºLiveã®APIã‚’å©ã„ã¦ã¿ãŸã€‚ (chan 1718684)
- 10/07/10--07:29: Google日本語入力APIを使ã£ã¦vimã§migemo検索 (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 mainGoã§ã¯ä¾‹å¤–ãŒcatch出æ¥ãªã„(ãã‚‚ãã‚‚throwãŒãªã„)ã®ã ã‘ã©ã€Goã®é¢¨ç¿’ã§æˆ»ã‚Šå€¤ã®æœ€å¾Œã«
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("ã“れã¯ã²ã©ã„");
})
}
os.Errorã‚’è¿”ã™é¢¨ç¿’ãŒã‚ã‚‹ã®ã§ã€ãã®å ´åˆã¯Errorã«é£›ã°ã™æ§˜ã«ã—ã¦ã‚る。mattn's godeferred at master - GitHub使ã„é“ã‚ã‚‹ã‹åˆ†ã‹ã‚“ãªã„ã‘ã©ã€ã¨ã‚Šã‚ãˆãš...
port of jsdeferred: http://cho45.stfuawsc.com/jsdeferred
http://github.com/mattn/godeferred
※ã‚ã‚“ã¾ã—JSDeferredã®ä»•様詳ã—ãç„¡ã„ã®ã§æ£ã—ã„å‹•ãã˜ã‚ƒãªã„ã‹ã‚‚苦笑
ã¾ãšã€ã¡ã‚‡ã£ã¨ã‚¿ã‚¤ãƒˆãƒ«ãŒãŠã‹ã—ã„ã®ã§ã€æœ€å¾Œã¾ã§èªã‚“ã§ä¸‹ã•ã„。
Windowsã®Vimを使ã£ã¦ã„ã‚‹æ–¹ãªã‚‰ã°ã€KaoriYaã®Vimを使ã£ã¦ãŠã‚‰ã‚Œã‚‹æ–¹ãŒå¤šã„ã¨æ€ã„ã¾ã™ã€‚
KaoriYa.netKaoriYaãŒé…布ã—ã¦ã„ã‚‹Vimã«ã¯è¤‡æ•°ã®patchãŒå½“ãŸã£ã¦ã„ã¦ã€migemo検索やフルスクリーンã¨ã„ã£ãŸä¾¿åˆ©ãªæ©Ÿèƒ½ãŒå…¥ã£ã¦ã„ã¾ã™ã€‚
Vim 7.2 Vim 7.2を公開ã—ã¾ã™ã€‚vim.orgç‰ã§é…布ã•れるオリジナルã«ã€æ—¥æœ¬èªžã‚’扱ã†ä¸Šã§ä¾¿åˆ©ãªè¨å®šã‚„スクリプトãŒè¿½åŠ ã•れã¦ã„ã¾ã™ã€‚Vimã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ–¹ã€…ã‹ã‚‰ã®æ„見ãªã©ã®æ”¯æ´ã«ã‚ˆã£ã¦è‚²ã¦ã‚‰...
http://www.kaoriya.net/
ãã®ä¸ã®ä¸€ã¤ã«ã€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ã“れをpluginフォルダã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã¨ã€KaoriYa仕様ã®Vimã¨åŒã˜ã‚ˆã†ã«(modeline内fencã«é–¢ã—ã¦ã ã‘)動作ã—ã¾ã™ã€‚ファイルを書ã„ãŸäººãŒmodelineã«æŒ‡å®šã—ãŸã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã®é€šã‚Šãƒ•ァイルãŒè¡¨ç¤ºã•れã¾ã™ã€‚
enable to specify 'fenc' in modeline.
http://github.com/mattn/modelinefenc-vim
KaoriYa仕様ã§ãªã„Vimmerã«ã¯ä¾¿åˆ©ã‹ãªã¨æ€ã„ã¾ã™ã€‚ãŸã ã—ã€ï¼‘点守ã£ã¦ä¸‹ã•ã„。
ã“ã®ãƒ—ラグインã§modeline内ã«fencを指定出æ¥ã‚‹æ§˜ã«ãªã£ãŸã¯ã„ã„ã®ã§ã™ãŒã€ãã‚ŒãŒæŒ‡å®šã•れã¦ã„るファイルã¯ãƒãƒ©ã¾ã‹ãªã„ã§ä¸‹ã•ã„。Vimã¯ä¸–界ä¸ã§ä½¿ã‚れã¦ã„るテã‚ストエディタã§ã™ã€‚KaoriYa版ã§ãªã„人ã€modelinefenc-vimを入れã¦ãªã„äººã¯æ˜Ÿã®æ•°ã»ã©ã„ã¾ã™ã€‚
ã‚ãã¾ã§ã€ãã‚“ãªãƒ•ァイルを開ã„ãŸæ™‚ã«æ°—æŒã¡æ‚ªããªã‚ŠãŸããªã„...ã¨ã„ã†äººå‘ã‘ã®æ©Ÿèƒ½ã§ã™ã€‚
ã§ã™ã®ã§ã‚¿ã‚¤ãƒˆãƒ«ã¯ã€Œmodeline内ã§fencを指定ã•れãŸãƒ•ァイルを開ã„ã¦ã‚¤ãƒ¤ãƒ¼ãƒ³ã¨ãªã‚‰ãªã„Vimプラグイン書ã„ãŸã€‚ã€ãŒæ£è§£ã§ã™ã€‚
ゴッ...ゴホンゴホン...
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 Programmingtwitterアカウントã¯ã“ã“。ã•ã£ãfollowã•ã‚Œã¦æ°—ã¥ã„ãŸã€‚
Welcome to the official website accompanying the book, Go Programming . The book can be purchased fr...
http://www.goprogrammingbook.com/
echo/ > touch.txt
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 デリゲートDelegate.CreateDelegate()ã¨ã„ã†ãƒ¡ã‚½ãƒƒãƒ‰ã‚‚å˜åœ¨ã—ã¾ã™ãŒã€ã“ã¡ã‚‰ã‚‚JScriptã‹ã‚‰ã¯åˆ©ç”¨å‡ºæ¥ã¾ã›ã‚“。[JScript] JScript ã§ã¯ã€.NET Framework ã®ãƒ‡ãƒªã‚²ãƒ¼ãƒˆã‚’利用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€ç‹¬è‡ªã«å®šç¾©ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
http://msdn.microsoft.com/ja-jp/library/system.threading.threadstart(VS.71).aspx
ã˜ã‚ƒãDelegateを引数ã«å–ã‚‹Threadã¯JScriptã‹ã‚‰ä½œã‚Œãªã„ã˜ã‚ƒãªã„ã‹ï¼ãã†æ€ã£ã¦ãŠã‚‰ã‚Œã‚‹æ–¹ãŒæ®†ã©ã ã¨æ€ã„ã¾ã™ã€‚
ã„ãˆã€å‡ºæ¥ã¾ã™ã€‚
import SystemC#ä¸Šã§æ›¸ã‹ã‚ŒãŸã‚¹ãƒ¬ãƒƒãƒ‰ã‚¤ãƒ³ãƒœãƒ¼ã‚«ã‚’メモリ内ã§ã‚³ãƒ³ãƒ‘イルã—ã¦ã€ãれã«JScriptã®é–¢æ•°ã€æ£ã—ãã¯ã‚¯ãƒãƒ¼ã‚¸ãƒ£ã‚’渡ã—ã¾ã™ã€‚
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);
};
})();
ã“ã“ã‹ã‚‰å…ˆã¯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ã“ã‚“ãªå‹•作をã•ã›ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚JavaScript(JScript)ã§ã‚¹ãƒ¬ãƒƒãƒ‰ãŒä½¿ãˆã‚‹ã¨è‰²ã€…ã¨ã‚„りãŸããªã£ã¦ãã¾ã™ã€‚JScriptã§ã‚µãƒ¼ãƒã‚¢ãƒ—リãªã‚“ã¦äº‹ã‚‚ç°¡å˜ã«å‡ºæ¥ãã†ã§ã™ã。
main1
main2
main3
thread2 foo
thread3 foo
thread4 foo
thread5 foo
thread6 foo
ã¡ãªã¿ã«ã€ã“ã®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();
}
Goã¯åž‹å®£è¨€ç„¡ã—ã«å€¤ãŒä»£å…¥å‡ºæ¥ã¦ã—ã¾ã†ã®ã§ã€ã‚«ãƒ¼ã‚½ãƒ«ä¸Šã®å¤‰æ•°ã‹ã‚‰åž‹æŽ¨æ¸¬ã™ã‚‹å¿…è¦ãŒã‚る補完ã¯é›£ã—ã„ã‚“ã˜ã‚ƒãªã„ã‹ãªãƒ¼ã¨æ€ã£ã¦ãŸã‚‰ã€ãªã‚“ã¨ä½œã£ãŸäººãŒã„ã¾ã—ãŸã€‚
ã™ã’ー。
nsf's gocode at master - GitHub仕組ã¿ã¯vimスクリプト内ã§ãƒ‡ãƒ¼ãƒ¢ãƒ³èµ·ã“ã—ã¦ã‚³ãƒ¼ãƒ‰ã¨ã‚ーワードã¨å…±ã«ã‚µãƒ¼ãƒå´ã§ã‚³ãƒ³ãƒ‘イルã—ã€è§£æžã—ã¦è¿”ã™ã¨ã„ã†ã‚‚ã®ã€‚通信ã«ã¯RPCãŒä½¿ã‚れã¦ã„る。
Autocompletion/refactoring daemon for Go language.Work in progress..Currently available things: - .a...
http://github.com/nsf/gocode
補完ã¯omniãªã®ã§<c-x><c-o>ã§é–‹å§‹ã€‚ã¡ã‚ƒã‚“ã¨
ã‚‚ã‚ã‚‚ã‚補完ã—ã¦ãれる。ç§ãŒç„¡ç†ã‹ã‚‚ãã¨æ€ã£ã¦ãŸä»¥ä¸‹ã®æ§˜ãªã‚³ãƒ¼ãƒ‰ã§ã‚‚ã—ã£ã‹ã‚Šè£œå®Œã—ã¦ãれã¦ã„る。ã™ã°ã‚‰ã—ã„。
Go書ã人ã¯ã„れるã¹ã—。ã¡ãªã¿ã«ã“ã®gocodeã€å‡ºåЛ形å¼ã¨ã—ã¦emacsもサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹(未確èª)ã®ã§ã€ãœã²è©¦ã—ã¦æ¬²ã—ã„。
追記
ã•ã™ãŒã«ã“ã†ã„ã†ã‚³ãƒ¼ãƒ‰ã¯é›£ã—ã„ã¿ãŸã„。ãªã‚“ã‹PANICã£ã¦è£œå®Œã•れã¦ã¾ã™ã€‚
package main
type Foo struct {
Boo func();
Baz string;
}
func foo() *Foo {
return &Foo {}
}
func main() {
foo().PANIC
}
ã¾ããƒã‚¿ã§ã™ãŒ...
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よã“ã‚“ãªçµæžœãŒå¾—られã¾ã™ã€‚
便利ã§ã™ãï¼
ã‚ã£æ³ã°ã‚Œã‚‹ã€‚
ã¡ãªã¿ã«ã©ã†ã‚„ã£ã¦ã‚‚å¸çŽ‹ã£ã¦å‡ºã›ãªã„ã‚“ã§ã™ã‘ã©...
「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();
}
便利
" 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...ã€ã¨ã‹ã‚ªãƒ¢ãƒã„メッセージã„ã£ã±ã„å…¥ã£ã¦ã‚‹ã€‚
ã—らんã‹ã£ãŸã€‚
$ alias ゔむ。=vim
$ ゔむ。 ~/.vimrc
MSVCã‚„MinGW32ã€Cygwinã€BorlandC++ãªã©Windowsã®Cコンパイラã«ã¤ã„ã¦ä¸€èˆ¬çš„ã«å—œã‚€ç¨‹åº¦ã®çŸ¥è˜ã¯æŒã£ã¦ã„ã¦ã€UNIXã‚‚ã‚る程度ã•ã‚れã¦ã€Perlã‚‚å°‘ã—触れるã‹ãªãã¨ã„ã†(我ãªãŒã‚‰æµ…ã¯ã‹ãª)「ã¤ã‚‚りã€ã§ã„ãŸã®ã§ã€ã€ŒCPANモジュールDevel::CheckLibã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã‚’誰ã‹å¼•ãå—ã‘ã¦æ¬²ã—ã„ã€ã¨ä»°ã‚‹David Cantrellã•ã‚“ã®æ„æ€ã‚’å—ã‘ã€Devel::CheckLibã®ã‚³ãƒ¡ãƒ³ãƒ†ãƒŠã‚’引ãå—ã‘ã¾ã—ãŸã€‚
至らãªã„ã‹ã¨æ€ã„ã¾ã™ãŒã€ã©ã†ãžã‚ˆã‚ã—ã。
Vimã®ä½œè€…ã§ã‚ã‚‹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?
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コードã®ç”Ÿæˆã¯ã‚ã‚‹ç¨‹åº¦å‹•ãæ§˜ã§ã™ã€‚
ãªãŠã€ã“ã®ã‚µãƒ³ãƒ—ルã§ä½¿ã‚れã¦ã„る部å“ã®ä¸€ã¤ã¨ã—ã¦Google Protocol Bufferを使ã£ã¦ãŠã‚Šã€javaã®ã‚½ãƒ¼ã‚¹ã‚’åã„ã¦ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ã‚ªãƒ–ジェクトã¨ã—ã¦æ‰±ã£ã¦ã„る様ã§ã™ã€‚![]()
ãªã‚“ã‹å‡„ã„よã†ãªã€å‡„ããªã„よã†ãª...
明日ã«ã¯ãã£ã¨è¨€èªžä»•様忘れã¦ã‚‹ã¨æ€ã„ã¾ã™ã€‚
RubyKaigiã®ä¸€éƒ¨ã¨ã—ã¦é–‹å‚¬ã•れã¦VimKaigiã€ãªã‹ãªã‹é¢ç™½ãã†ã§ã—ãŸã€‚
Vimmerã‚‚ã ã‚“ã ん増ãˆã¦ãã¾ã—ãŸã€‚plugin使ã£ã¦ã‚‹äººã‚‚å¤šã„æ§˜ã§ã™ã€‚実ã¯ç§ã¯ã‚ã¾ã‚Špluginã®ä½¿ç”¨ã«ä¾å˜ã—ãªã„様ã«å¿ƒãŒã‘ã¦ã„ãŸã‚Šã™ã‚‹ã‚“ã§ã™ãŒã€ä¸ã«ã©ã†ã—ã¦ã‚‚手放ã›ãªã„物ãŒã‚りã€ãã®ä¸ã®ä¸€ã¤ãŒquickrun.vimã ã£ãŸã‚Šã—ã¾ã™ã€‚
thinca's vim-quickrun at master - GitHub
Run commands quickly.
http://github.com/thinca/vim-quickrun
ãˆãƒ¼ã£ã¨ã€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コマンドを使ã„ã¾ã™ã€‚関数openã®ãƒ‰ã‚ュメントを引ãã«ã¯
Perldoc plugin for vim
http://github.com/hotchpotch/perldoc-vim
: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ã“ã¡ã‚‰ã¯perldocã«é™ã‚‰ãš
Integrated reference viewer.
http://github.com/thinca/vim-ref
:Ref perldoc -f openã‚„
:Ref perldoc Acme::Oppaiç‰ã¨å®Ÿè¡Œã—ã¾ã™ã€‚
ã“ã¡ã‚‰ã‚‚補完ãŒåйãã¾ã™ãŒã€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)をタイプã™ã‚‹ã¨
ã©ã©ãƒ¼ãƒ¼ãƒ¼ã‚“ï¼![]()
ã•らã«
Moooooooooooooooooooseãªè£œå®Œã‚„![]()
変数ã®è£œå®Œã€‚ãã—ã¦![]()
モジュールã®ãƒ¡ãƒ³ãƒã¾ã§è£œå®Œã—ã¦ãれã¾ã™ã€‚ã‚ャーã™ã¦ãーï¼![]()
ã™ã°ã‚‰ã—éŽãŽã¾ã™ã€‚ã¡ãªã¿ã«ã“ã®perlomni.vimã®win32対応ã¨ã€ä¸Šã§ç´¹ä»‹ã—ãŸperldoc.vimã®è£œå®Œéƒ¨åˆ†ã‚’担当ã•ã›ã¦é ‚ãã¾ã—ãŸã€‚
2010å¹´ã¯PerlãŒç†±ã„ï¼ãã†æ€ã£ã¦ã¾ã™ã€‚ãœã²ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦æ´»ç”¨ã—ã¦è¦‹ã¦ãã ã•ã„。200å€ã¨ã¯è¨€ã„éŽãŽã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€é–“é•ã„ãªã2å€ã«ã¯ãªã‚Šã¾ã™ã‚ˆã€‚
åˆã‚ã¦ã®Perl 第5版Randal L. Schwartz
オライリージャパン / ¥ 3,780 (2009-10-26)
発é€å¯èƒ½æ™‚間:在庫ã‚り。
モダンPerl入門 (CodeZine BOOKS)牧 大輔
翔泳社 / ¥ 2,940 (2009-02-10)
発é€å¯èƒ½æ™‚間:在庫ã‚り。
ã•ã¦ã€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:ç§ã¯ç›®ã‚’ç–‘ã£ãŸã€‚ãŸã ã§ã•ãˆã“ã®è¿”事を貰ã†ã¾ã§ã«2æ—¥åŠæŽ›ã‹ã£ãŸã¨ã„ã†ã®ã«ã€ã“ã®ã‚¢ãƒ—リケーションを使ã„ãŸã„ユーザãŒã€ã„ã¡ã„ã¡ã‚¢ãƒ—リケーション登録をã—ã€ãã®IDをソースコードã«åŸ‹ã‚込むã€ã‚‚ã—ãã¯ã‚¢ãƒ—リケーション上ã§è¨å®šã—ã€ãã®CONSUMER_KEY/CONSUMER_SECRETã‚’twitter supportã«é€£çµ¡ã—ã€xAuthã«è¨±å¯ãŒä¸‹ã‚Šã¦åˆã‚ã¦ãã®ã‚¢ãƒ—リケーションを使ãˆã‚‹æ§˜ã«ãªã‚‹ã€‚
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ã®ç”³è«‹ã‚’行ã†å¿…è¦ãŒã‚ã‚‹ã®ã§ã™ã€‚ã“ã®å¤‰æ›´ã‚’終ãˆãŸå¾Œã«ã€å„プラットフォーム上ã§ã‚¢ãƒ—リケーションãŒå‹•作ã—ã¦ã„るスクリーンショットã¸ã®ãƒªãƒ³ã‚¯ã‚’å«ã‚ã¦çŸ¥ã‚‰ã›ã¦ä¸‹ã•ã„。ã‚りãŒã¨ã†ã‚りãŒã¨ã†ã€‚
ãªã‚“ã ãれ。
ç§ã¯ç¶šã‘ã¦è³ªå•ã—ãŸã€‚ãã†ã€åŠåˆ†ã‚レãªãŒã‚‰ã€‚
mattn:ã¡ãªã¿ã«ã€twitter supportã«ãƒã‚±ãƒƒãƒˆã‚’登録ã™ã‚‹éš›ã«ã€ŒDo you feelã€ã¨ã„ã†é …ç›®ãŒã‚ã‚‹ã®ã ã‘ã©ã€ã‚ãˆã¦ç§ã¯ã“ã†æ›¸ã„ãŸã€‚
Hi. What the best way to contain the key or sign into my application?
ã“ã‚“ã«ã¡ã‚。アプリケーションã«ã‚ーやサインをå«ã‚る一番ã„ã„æ–¹æ³•ã£ã¦ãªã‚“ãªã®ï¼Ÿ
ã“ã®ä»¶ã«é–¢ã—ã¦ã¾ã¨ã‚‚ãªå›žç”ãŒå¾—られã¦ã„ãªã„ã®ã§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:ã¡ãªã¿ã«ã€xAuthを使ã‚ãšOAuthを使ã£ãŸæ–¹æ³•ã‚‚ãªãã¯ãªã„。ã“ã®æ–¹æ³•ã¯request tokenã‚’è¦æ±‚ã—ã€ãã®request token secretã‚’å…ƒã«access tokenã‚’å–å¾—ã™ã‚‹ã€‚ãã®access token secretã‚’æŒã£ã¦Twitter APIã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ç‰©ã€‚ãŸã ã—access tokenã‚’å¾—ã‚‹éš›ã«ã¯ãƒ–ラウザã§è¨±å¯ã™ã‚‹å¿…è¦ãŒã‚りã€ã‹ã¤ãƒ–ラウザã«è¡¨ç¤ºã•ã‚ŒãŸæ•°æ¡ã®ç•ªå·ã‚’アプリケーションå´ã«çŸ¥ã‚‰ã›ã¦ã‚ã’ãªã‘れã°ãªã‚‰ãªã„。
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%を殺ã—ãŸã‚“ã ã¨ã€ç§ã¯ä¿¡ã˜ã¦ã„るよ。
よã‚ã—ã。ã‚りãŒã¨ã†ã€‚
ブラウザãŒã©ã®è£½å“ã‹ã‚‚分ã‹ã‚‰ãªã„ã—ã€ç”»é¢ã«ä½•ãŒè¡¨ç¤ºã•れã¦ã„ã‚‹ã‹ãªã‚“ã¦ã‚¢ãƒ—リケーションã¯çŸ¥ã‚‹è¡“ã‚‚ãªã„。完全手作æ¥ã§ã“ã®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 プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°è¾»æ‘ 浩
ワークスコーãƒãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ / ï¿¥ 2,730 (2010-04-21)
発é€å¯èƒ½æ™‚間:在庫ã‚り。
よã†ã‚„ãTwitterã®ã‚„りãŸã„事ãŒåˆ†ã‹ã£ãŸæ°—ãŒã™ã‚‹ã€‚
æ•°æ—¥å‰ã€Twitterã®xAuth/OAuthã®æ‰±ã„ã«ã¤ã„ã¦ã®è¨˜äº‹ã‚’書ã„ãŸã€‚
レスãƒãƒ³ã‚¹ã®æ‚ªã•や開発者ã«è¶³ã‚’å‘ã‘ã¦ã„ã‚‹ã¨ã‚‚æ€ãˆã‚‹å¯¾å¿œã«ã€ã‚¤ãƒ¤ãƒŸãŸã£ã·ã‚Šã®æ–‡é¢ã‚’残ã—ãŸã®ã ãŒ...
mattn:ãã®ãŠè¿”äº‹ãŒæ¥ã¾ã—ãŸã€‚ãŒã€ã„ããªã‚Šå‡ºå£ã‚’塞ãŒã‚Œã¦ã—ã¾ã„ã¾ã—ãŸã€‚
ã¨ã“ã‚ã§ã€Basicèªè¨¼ã‚’廃æ¢ã—ãŸäº‹ã§Twitterã¯ãƒã‚¹ãƒˆå‡ºæ¥ã¦ã‚‹ã‚¢ãƒ—リケーションã®50%を殺ã—ãŸã‚“ã ã¨ã€ç§ã¯ä¿¡ã˜ã¦ã„るよ。
Twitter Support:ã‚„ã£ã±ã‚Šã‚ªãƒ•ã‚£ã‚·ãƒ£ãƒ«ã®æ„å‘ã¨ã—ã¦ã¯CONSUMER_KEYã¨CONSUMER_SECRETã¯å…¬é–‹ã™ã‚‹ãªã¨ã„ã†ã®ãŒæŒ‡é‡ã‚‰ã—ã„。
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 を使ãˆã‚‹æ§˜ã«åæ˜ ã€ãã—ã¦è‡ªä¿¡ã®ã‚ーをソースã«å·®ã—込む事ã«ãªã‚Šã¾ã™ã€‚
ã“れã«èµ·å› ã™ã‚‹ã”ä¸ä¾¿ã‚’ãŠè©«ã³è‡´ã—ã¾ã™ã€‚ã©ã®æ§˜ã«ã•れãŸã„ã‹æ•™ãˆã¦ä¸‹ã•ã„。
ã‚りãŒã¨ã†ã‚りãŒã¨ã†
ãれã§ã¯ã¨ã„ã†äº‹ã§ã¾ã¨ã‚ã¦è³ªå•ã—ã¦ã¿ãŸã€‚
mattn:å•題視ã—ã¦ãれãŸã®ã‹ã€1日以内ã«è¿”事æ¥ãŸã€‚
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
ç¾åœ¨ã€ç§ã¯ã‚ーをå«ã¾ãšã«ãƒªãƒã‚¸ãƒˆãƒªã¸ã‚½ãƒ¼ã‚¹ã‚’プッシュã—ã¾ã—ãŸã€‚
ã‚りãŒã¨ã†ã‚りãŒã¨ã†
んー...。è¦ã™ã‚‹ã«ãƒ¦ãƒ¼ã‚¶IDã¨ãƒ‘スワードã«ã‚ˆã‚‹èªè¨¼æ–¹å¼ã¨ã¯åˆ¥ã«ã€ã„ãらã§ã‚‚åãæ¨ã¦å¯èƒ½ãªèªè¨¼ID公布方å¼ã‚’å–りãŸã„ã‚“ã ã¨ã€‚ã¾ã確ã‹ã«ãれãªã‚‰ãƒ‘スワードã¨ã„ã†ã€ä¸‹æ‰‹ã™ã‚Šã‚ƒãƒ‘ンツã®ä¸èº«ã‚’見られるよりもダメージã®å¤§ãã„物をæ›ã‘出ã•れるよりã¯ã€å¹¾åˆ†ãƒ€ãƒ¡ãƒ¼ã‚¸ãŒå°ã•ããªã‚‹ã®ã‹ã‚‚ã—れãªã„。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 アクセスã¯åœæ¢ã•ã›ã‚‰ã‚Œã‚‹ã§ã—ょã†ã€‚
何ã‹ä»–ã®è³ªå•ãŒã‚れã°ã€æ•™ãˆã¦ä¸‹ã•ã„。
ã‚りãŒã¨ã†ã‚りãŒã¨ã†
ãŸã ã—ãã®ç‚ºã«ã¯ã€ã‚¢ãƒ—リケーションã«ä»˜ä¸Žã•れる権é™ã«ã‚ˆã£ã¦ãƒ‘スワードã¨ã„ã†ç§˜å¯†ã®åœ’ã«åˆ°é”出æ¥ãªã„仕組ã¿ãŒå¿…è¦ã§ã‚りã€ã‹ã¤ç”³è«‹æ–¹å¼ç‰ã¨ã„ã£ãŸã¨ã¦ã‚‚ãƒã‚«ã’ãŸç‰©ã‚’廃æ¢ã™ã‚‹å¿…è¦ãŒã‚りã€å…¨ã¦ã‚ªãƒ¼ãƒˆãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã«ã‹ã¤Machine Readableã«é‚行出æ¥ã‚‹æ§˜ã«ã‚‚ã™ã¹ãã ã¨æ€ã†ã€‚
ã•らã«ã¯æ—¢ã«ã‚るアプリケーションã€ä¾‹ãˆã°ç§ã®ã€Œgtktweeterã€ã«ã¤ã„ã¦ã®ãƒšãƒ¼ã‚¸ãŒã‚りã€ãã“ã‹ã‚‰ãƒœã‚¿ãƒ³ä¸€ç™º(例ãˆã°forkボタン?)ã§å…¥åŠ›æƒ…å ±ãŒã‚³ãƒ”ーã•れ新ãŸãª consumer key 㨠consumer secret ãŒä»˜ä¸Žã•れã¦ã„ã‚‹...ã¨ã„ã†ä½ã®è‡ªå‹•åŒ–ãŒæˆã•れãªã„é™ã‚Šã¯ã€Twitterã®ç›®è«–見ã¯å¤±æ•—ã¸ã¨å¤‰ã‚ã‚‹ã ã‚ã†ã€‚
ã‚ã¨ã€cheebowã•ã‚“ã‹ã‚‰ã®ã‚³ãƒ¡ãƒ³ãƒˆ
上ã®Twitterã®å›žç”を見るã¨ã€ã©ã†ã‚„らbanã•れるã®ã¯ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æ§˜ã§ã™ã€‚実際ã©ã®æ§˜ã«ãªã‚‹ã‹ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“ãŒã€‚cheebow
「連投ã—オフィシャルã‹ã‚‰banã•ã›ã‚‹ãªã‚“ã¦äº‹ã‚‚å¯èƒ½ã§ã™ã€‚ã€ã£ã¦ã‚ã‚‹ã‘ã©ã€ã“ã®å ´åˆbanã•れるã®ã¯ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’使ã£ãŸã€Œãƒ¦ãƒ¼ã‚¶ã€ã よã? http://mattn.kaoriya.net/web/twitter/20100908165946.htm #Tw
http://twitter.com/cheebow/statuses/23966546230
ãªãŠã€gtktweeterã«ã¤ã„ã¦ã¯ãƒ–ラウザを起動ã—ã¦PINを入力ã•ã›ã‚‹ã¨ã„ã†ã€æ¥µã‚ã¦ã‚¦ãƒ³ã‚³ãªå®Ÿè£…ã¨ã—ã¦githubã«pushã—ã¦ãŠã„ãŸã€‚ソースコード㮠CONSUMER_KEY 㨠CONSUMER_SECRET ã‚’æ›¸ãæ›ãˆã¦ã‚³ãƒ³ãƒ‘イルã—ã¦ä½¿ã£ã¦ä¸‹ã•ã„。ãˆã£ãƒ¡ãƒ³ãƒ‰ã‚¯ã‚µã‚¤ï¼Ÿã ã£ã¦TwitterãŒãã†ã—ã‚ã¨è¨€ã£ãŸã‚“ã もん。
ã¨ã“ã‚ã§Twitterã•ã‚“ã€æœ€å¾Œã®è³ªå•「xAuth ã®è¨±å¯ã‚’å¾—ã‚‹ã®ã«ã©ã‚Œã ã‘æ™‚é–“ãŒæŽ›ã‹ã‚‹ã®ã‹ï¼Ÿã€ã¯ã©ã†ãªã£ãŸï¼Ÿ
先日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 - GitHubsha1, hmac, base64 ã®å‡¦ç†ã«ã¯ã€Nakadairaã•ã‚“ã®ç‰©ã‚’使ã‚ã›ã¦é ‚ãã¾ã—ãŸã€‚
oauth access library for vim
http://github.com/mattn/vim-oauth
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を書ã„ã¦ä½œè€…ã¨é€£çµ¡ä¸ã§ã™ã€‚
以å‰ã€twitter上ã§ã€ŒSTL以上ã€Boost未満ãªä½¿ã„心地ã®ãƒ©ã‚¤ãƒ–ãƒ©ãƒªãŒæ¬²ã—ã„。ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£è¾¼ã¿ã®ã€‚ã€ã¨ã¤ã¶ã‚„ã„ãŸæ‰€ã€id:faith_and_braveã•ã‚“ã‹ã‚‰è¿”事貰ã£ãŸã€‚
CLXã¯å®Ÿã¯å‰ã‹ã‚‰çŸ¥ã£ã¦ã„ã¦ä½•åº¦ã‹æ¨ã¦ã‚³ãƒ¼ãƒ‰ã«ä½¿ã‚ã›ã¦é ‚ã„ã¦ã„ãŸã®ã§ã™ãŒã€SSLè¶Šã—ã«proxyãŒä½¿ãˆãªã‹ã£ãŸã®ã§ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£ã®ã‚³ãƒ¼ãƒ‰ã«ã¯ä½¿ã£ã¦ã¾ã›ã‚“ã§ã—ãŸã€‚Twitter / Faith and Brave
CLX or Message-Pack or Pocoã‚ãŸã‚Šã§ã—ょã†ã‹ RT @mattn_jp: STL以上ã€Boost未満ãªä½¿ã„心地ã®ãƒ©ã‚¤ãƒ–ãƒ©ãƒªãŒæ¬²ã—ã„。ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£è¾¼ã¿ã®ã€‚
http://twitter.com/cpp_akira/status/21234425525
ã¾ãã§ã‚‚一応書ã„ã¦åˆ¤æ–ã™ã¹ãã‹ãªã¨æ€ã£ã¦ã€åƒ•çš„ãªç”ãˆã¨ã—ã¦ã€ã•らーーーã£ã¨æ›¸ã„ãŸã€‚
CONSUMER_KEY 㨠CONSUMER_SECRET ã‚’æ›¸ãæ›ãˆã¦å®Ÿè¡Œã—ã¦ä¸‹ã•ã„。xAuthèªè¨¼ã‚’使ã£ã¦twitterã«ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’ãƒã‚¹ãƒˆã—ã¾ã™ã€‚
#include <iostream>URLã¾ã‚りã¨ã€POSTパラメータ構築ã«ä¾¿åˆ©ãªã®ãŒã‚ã£ã¦ã‚‚良ã„ã‹ãªã¨æ€ã£ãŸã€‚ã‚ーãれboost::asioã§ã‚‚言ãˆã‚‹ã‹ã€‚
#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: */
サイボウズLiveã«APIãŒè¿½åŠ ã•れã¾ã—ãŸã。
æ©Ÿèƒ½è¿½åŠ ã®ãŠçŸ¥ã‚‰ã›ï¼ˆAPI公開ã€Googleカレンダーã¨ã®åŒæœŸã€ãƒ‡ã‚¶ã‚¤ãƒ³å¤‰æ›´ï¼‰ | サイボウズLiveマガジンAPI好ãã¨ã—ã¦ã¯ã€ã“れを放ã£ã¦ãŠã訳ã«ã¯ã„ãã¾ã›ã‚“。
9月15æ—¥ã®ã‚µã‚¤ãƒˆãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã«ã‚ˆã‚Šã€æ–°æ©Ÿèƒ½ã‚’è¿½åŠ ã—ã¾ã—ãŸã€‚
â– APIã®å…¬é–‹
外部アプリケーションã‹ã‚‰ã‚µã‚¤ãƒœã‚¦ã‚ºLiveã®æƒ…å ±ã‚’å–得・æ“作ã§ãã‚‹APIを公開ã—ã¾ã—ãŸã€‚通信方å¼ã¯RESTã€èªè¨¼æ–¹å¼ã¯OAuthã§ã™ã€‚ç¾åœ¨ã¯æœ€æ–°æƒ…å ±ã®å–å¾—ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«æƒ…å ±ã®å–å¾—ã«é™å®šã—ã¦ã„ã¾ã™ãŒã€é †æ¬¡APIã§å–得・æ“作å¯èƒ½ãªæƒ…å ±ã‚’æ‹¡å……ã—ã¦ã„ãã¾ã™ã€‚
APIã®å…¬é–‹ã«ã‚ã‚ã›ã¦ã€ã‚µã‚¤ãƒœã‚¦ã‚ºLive Developer Centerを公開ã—ã¾ã—ãŸã€‚
http://magazine.cybozulive.com/2010/09/system_update10.html
ã‚‚ã¡ã‚ã‚“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ã“れを使ã£ã¦ãƒ‘ースã—ã¾ã—ãŸã€‚パースã™ã‚‹ã¨DOMãŒè¿”りã¾ã™ã€‚
XML Parser for Vim
http://github.com/mattn/xmlparser-vim
let notification_url = "https://api.cybozulive.com/api/notification/V2"ã“ã‚“ãªæ„Ÿã˜ã«XMLを処ç†å‡ºæ¥ã¾ã™ã€‚ã“れã€å…¨ã¦Pure Vimscriptã§ã™ã€‚ä¿¡ã˜ã‚Œãªã„人や変態ãªäººã¯ã€ã‚½ãƒ¼ã‚¹è¦—ã„ã¦ä¸‹ã•ã„。
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
å‹•ã物を置ã„ã¦ãŠãã¾ã™ã€‚
mattn's cybozulive-vim at master - GitHubhttp 関連ã€XML関連をçºã‚㦠webapi-vim ã¨ã„ã†ãƒªãƒã‚¸ãƒˆãƒªã«å…¥ã‚Œã€cybozulive-vim ã‹ã‚‰ã¯ submodule ã¨ã—ã¦ã„ã¾ã™ã€‚
vim interface to cybozulive
http://github.com/mattn/cybozulive-vim
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アプリを作るï¼mattn the pure vimscripter.
æ¾æœ¬ 泰弘
[登録] 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
(添付ファイルãŒã‚りã¾ã™ã€‚)
先日「Google 日本語入力 - CGI APIã€ãŒå…¬é–‹ã•れã¾ã—ãŸã。
ã“ã‚“ãªã® migemo ã®ç‚ºã«ã‚ã‚‹ã¿ãŸã„ãªã‚‚ã‚“ã˜ã‚ƒãªã„ã§ã™ã‹ï¼
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
ã•ã£ãã作りã¾ã—ãŸã€‚
"=============================================================================ã„ã¤ã‚‚1ファイルã§å‹•ãã‚‚ã®ã‚’æä¾›ã—ã¦ãã¾ã—ãŸãŒã€ãã‚ãã‚vimもライブラリã¨ã‚¢ãƒ—リケーションを分ã‘ãªã„ã¨vimã®ä»Šå¾ŒãŒã‚ã‚„ã¶ã¾ã‚Œã‚‹ãª...(vimjoltsã£ã¦ãªã‚“ã ã£ã‘æ±—)...ã¨æ€ã£ãŸã®ã§ã€ä»Šå›žã¯æ‰‹å‰å‘³å™Œã§ã™ãŒã€Œwebapi-vimã€ã¨ã„ã†ã®ã‚’使ã£ã¦ã„ã¾ã™ã€‚
" 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:
mattn's webapi-vim at master - GitHub先日 vim-oauth ã§ä½¿ã£ãŸå¥´ã§ã™ã。
webapi-vim: vim interface to Web APIDescription:Require: curl command : http://curl.haxx.se/Thanks T...
http://github.com/mattn/webapi-vim
ã¾ãå˜ä½“ã«ã—ãŸã„äººã¯æ›¸ãæ›ãˆã¦ä¸‹ã•ã„。
ä½¿ã„æ–¹ã¯ç°¡å˜ã€‚
:GogoleMigemo ã“ã“ã§ã¯ãã‚‚ã®ã‚’ã¬ãã¨ã™ã‚‹ã¨ã€ã€Œã‚³ã‚³ã§ã¯ç€ç‰©ã‚’脱ãã€ãŒãƒžãƒƒãƒã—ã¾ã™ã€‚ãªãŠã€ã€Œã“ã“ã§ã¯ç€ç‰©ã‚’脱ãã€ãŒæ¤œç´¢ã—ãŸã‹ã£ãŸã‚ˆ...ã¨ã„ã†å…¨å›½2000万人ã®ã‚¨ãƒã„オッサンé”。慌ã¦ãªã„ã§ã€‚
:GogoleMigemo ã“ã“ã§ã¯ ãã‚‚ã®ã‚’ ã¬ãã¨ã‚¹ãƒšãƒ¼ã‚¹ã‚’入れるã¨èªè˜ã—ã¦ãれã€ã¡ã‚ƒã‚“ã¨ã€Œæ¤å‡¦ã§ã¯ç€ç‰©ã‚’脱ãã€ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚ã‚‚ã¡ã‚ん「ã“ã“ã§ ã¯ãã‚‚ã®ã‚’ ã¬ãã€ã¨ã™ã‚Œã°ã€Œæ¤å‡¦ã§å±¥ç‰©ã‚’脱ãã€ã‚„「個々ã§å±¥ç‰©ã‚’脱ãã€ã«ãƒžãƒƒãƒã—ãŸã‚Šã‚‚ã—ã¾ã™ã€‚
<leader>mg ã«ã‚ーマップã—ã¦ã‚りã¾ã™ã€‚ã‚ã¨ã€ã‚°ãƒãƒ¼ãƒãƒ«é–¢æ•°ã€ŒGoogleMigemoã€ã‚‚æä¾›ã—ã¦ã‚ã‚‹ã®ã§ã€Œlet foo = GoogleMigemo(xxx)ã€ãªä½¿ã„方も出æ¥ã¾ã™ã€‚
ãれãªã‚Šã«ä¾¿åˆ©ã‹ã‚‚ã—れã¾ã›ã‚“。もã¡ã‚ã‚“ãƒãƒƒãƒˆã«ç¹‹ãŒã£ã¦ãªã„ã¨ä½¿ãˆã¾ã›ã‚“ã—ã€ã‚¨ãƒã„語å¥ã‚’検索ã™ã‚‹ã¨ã€Google先生ã«ãƒã‚¿ã‚’é€ã£ã¦ã—ã¾ã„ã¾ã™ã€‚
ã”利用ã¯è¨ˆç”»çš„ã«ã€‚
