Shogo's Blog

Jul 30, 2012 - 1 minute read - Git

Gitでプロキシを使う

背景・目的 なぜだか研究室のWiFi経由でSSHが通らないので、 GithubがBitbucketに繋がらない><。 有線LAN経由なら通るので、ネットワークの問題だと思うのですが、 よくわからないのでとりあえずHTTPS経由で頑張ることにしました。 うちの学校ではHTTPSで外部に出るにはプロキシの設定が必要です。 そういうわけで、Gitでプロキシを使う方法を調べて見ました。 方法 .ssh/config に以下の設定をしました。 Host github.com User git Port 22 # or 443 Hostname github.com # or ssh.github.com IdentityFile /path/to/ssh.key TCPKeepAlive yes IdentitiesOnly yes ProxyCommand nc -X connect -x proxy.example.com:8080 %h %p 参考文献 git pull/push to github.com in proxy environment http proxy 越えの ssh SSHでプロキシ経由でアクセス

Jul 29, 2012 - 1 minute read - NDS

NDS27に参加してきた

第27回NDS(長岡技術者勉強会)に参加してきました。 Gitハンズオン 今回はNiigata.scmとのコラボで GitハンズオンといつものLTの二本立てでした。 @masaru_b_clさんのGitの歴史や利点についての解説の後、 @dictavさんによる解説・演習。 addしてcommitする logやreflogでログ確認 reset –hard で元に戻す merge rebaseでコミットログを一本道に あたりをやりました。 一つのファイルの同じ行を20人でいじるという怖いこともしました。 凄まじいコンフリクト発生頻度と、すごい勢いで分岐していくログ。 実際の現場であったら恐ろしいですね。 gitはプラグインが使えるので、いろんなプラグインが出てます。 今回紹介があったのはgit-nowとgit-master。名前だけは聞いたことあるんだけど、使ってみますかね。 git-now masuru_b_clさんバージョン git-master あと、コミットログ英文の書き方とか Changelogのための英文テンプレート集 ust Gitの説明 ust 午前の演習その1 ust 午前の演習その2 ust 午後の部 push戦争 いつものLT 電子国土と地形図(その後) (@yu_hori)[http://twitter.com/yu_hori]さん NDS23での電子国土地図の発表の続き。 利用者にとって価値ある使いやすい電子国土基本図を目指して(中間提言) 電子国土ポータル 長岡にギークハウスを @geek_niigataさん やったーPICで作曲できたよー\(^o^)/ @aokcub うおおおおおおおおおお!!!! 期待の21世紀枠最後の昭和枠 NDS27に参加してきたよ!よ! git-svn @masaru_c_blさん svnのリポジトリをgitにしてしまう奴。 ソフトウェアメトリクス調査2012を読み解く @hiro55bsさん ソフトウェアメトリックス調査2012 COBOL… 品質が低いと顧客満足度も低いけど、逆に品質が高すぎても顧客満足度は低い お客さんの要望に十分に答えられないのが原因? やったーPerlでにゃん読化ツールできたよー\(^o^)/ @neko_gata_sさん Niigata.pm 遊びに来てね NDSから大切なお知らせ @civicさん プロジェクトアンブレラ Niigata.pmはNDSの傘下 SRNDS(それNDSでできるよ) PSO aokcubさんの使ってたPSO面白そうだったので現実逃避に実装。 実際の効果はよくわからない。 初期値の時点でミニマムの近辺から外れると、ローカルミニマムに落ちることもしばしば。 それなら最急降下法でも・・・という気もしないでもない。 問題設定が悪いのか、パラメータが悪いのか。

Jun 26, 2012 - 1 minute read - C C++

CやC++でのincludeの優先順位

こんにちは、gccのオプションを十個も言えない、非人のshogoです。 工藤氏作のTinySVMで遊ぼうとしていたところ、 ヘッダファイルの読み込み順序ではまったのでメモ。 2つのinclude文 皆さんご存知の通り、Cプリプロセッサの#include文ではファイルの指定方法が2種類あります。 #include <somefile> // システムにインストールされたライブラリを使う場合 #include "somefile" // 自作のヘッダファイルなどを読み込む場合 大抵はコメントで書いたような使い分けをするんじゃないかと思います。 両者の違いはファイルの検索対象となるディレクトリの違いにあります。 前者はコンパイラが知っているディレクトリのみを検索するのに対して、 後者はカレントディレクトリを検索したのち、<>と同じディレクトリを検索します。 コンパイラが知っているディレクトリは具体的に書くと次のようになっています。 -I オプションで指定されたディレクトリ 環境変数 C_INCLUDE_PATH や CPLUS_INCLUDE_PATH で指定されたディレクトリ システムによって予め決められたディレクトリ(/usr/local/includeとか) 上にあるものほど優先順位高く、同名のファイルがあった場合、優先順位の高いディレクトリにあるものが読み込まれます。 標準のヘッダを使いたい 次のようなCのプログラムを考えてみます。 /* sample.c */ #include <stdio.h> // 標準ヘッダのstdio.hを取り込んでほしい! #include "stdio.h" // ../userheaderディレクトリ内のstdio.hを取り込んでほしい! 最初のincludeではシステムに用意された標準ヘッダのstdio.hを、 2つ目のincludeでは自前で用意したstdio.hを読み込もうとしています。 しかし、自前で用意したstdio.hはuserheaderという別ディレクトリにあるので このままでは参照できません。 別ディレクトリにあるヘッダファイルを参照する場合、一般的には-Iオプションを使って次のようにコンパイルすると思います。 gcc -I../userheader sample.c しかしこの例の場合はこの方法は上手く行きません。 <>で囲った場合も"“で囲った場合も、カレントディレクトリにはstdio.hは見つからないので、 先の優先順位に従って次のような順番で検索を行います。 userheader 標準ヘッダstdio.hが入ったディレクトリ どちらの書き方でもuserheader内のstdio.hを先に発見してしまうので、 標準ヘッダのstdio.hにはどう頑張ってもアクセスすることができません。 解決策 iquoteオプションを使うと、""で囲った場合のみuserheaderを見に行くようになります。 gcc -iquote../userheader sample.c TinySVMの場合 TinySVM0.09(現時点での最新版)は一部環境でgetoptの違うというエラーが発生するようです。 これは-Iオプションを使ってしまったため、標準ヘッダのgetopt.hと、自前で用意したgetopt.hの使い分けができていないのが原因です。 TinySVMに同梱されたgetopt関数の引数を書き換えることで対処している例がほとんど (himorogiの日記, RとLinuxと…,etc) ですが、大抵の環境にgetoptはあると思うのでgetopt.hを削除してしまったほうがいいかもしれません。 (TinySVM最近更新されていないのでgetoptが古いし) 参考 C言語のヘッダ読み込み順について Directory Options - Using the GNU Compiler Collection (GCC) The C Preprocessor pp.

Apr 20, 2012 - 1 minute read - 勉強会 意味知識勉強会

第1回 意味知識勉強会

なんだか誘われたので、行ってきた。 メモメモ。 紹介された論文とか、スライドは自然言語処理研究室の意味知識勉強会のページからどうぞ。 関連学会 ACL AAAI IJCNLP Coling JIST 人工知能学会誌 自然言語処理(学会誌) 背景 人工知能の目指すところ 常識知識(common-sense knowledge)が必要 知識表現 オントロジー(ontology) 上位オントロジー 具体的な事象を対象としないオントロジー 常識オントロジー(Common-Sence Ontology) OpenCyc 語彙オントロジー(e.g. WordNet) 形式オントロジー OpenCyc 常識知識をデータベース化するCyc Project の一部。 専門家の手によって、手作業で構築されているオントロジー。 Open Mind Common Sense(OMCS) 機械的な常識知識獲得プロジェクト。 獲得した知識は ConceptNet というデータベースに取り込まれる。 GithubにデータベースアクセスのためのAPIが上がってるよ。 Recognizing Textual Entailment(RTE) テキスト含意関係認識 テキスト(Text)に対する仮定(Hypothesis)が含意している・矛盾している・Uknownであるかを判定するタスク RTEの初期のデータセットは無料で公開されている 論文紹介:Types of Common-Sense Knowledge Needed for Recognizing Texual Entailment RTE-5データセットから常識知識がなければ解けないものを「人手」で選択 単語の単純な言い換えなどで解決できないもの 600あるデータセットから108個見つけた 仮説が含意していると判定されるために必要な根拠を考える 分類して整理したよ! 必要とされる回数が多いカテゴリは重要だよね!(ホント?元のデータセットに偏りない?) 言語処理でよく使うpart-of, is-a の様な関係が使われるのは、全体の40%でしかない 分類が正しさを表す指標としてκ値(Fleiss’s κ)を使って評価 20のカテゴリは大きく3つ分けられる Form-based Categories 因果関係とか Content-based Categories 計算しないといけない奴とか 地理関係とか Miscellaneous Categories みんなやっているから、この人もやっているはず!みたいな根拠のない関係 Omniscience(全知)

Apr 9, 2012 - 1 minute read - Linux

Linuxでプロキシの除外設定

僕の学校では、学校のネットワークから外へ出ていくためにはプロキシと通す必要があります。 しかし、学内にあるサーバへは直接接続しなければなりません。 これを行うには no_proxy という環境変数を設定すればよいようです。 # Proxy 設定 export http_proxy=http://example.com:port/ export ftp_proxy=http://example.com:port/ export HTTP_PROXY=http://example.com:port/ export FTP_PROXY=http://example.com:port/ # 除外したいドメイン export no_proxy=localhost,.example.com no_proxyにカンマ区切りで除外したいホストを列挙します。 この設定を .bash_profile などに書いておけば、起動時に反映されるようになります。 全く・・・プロキシ面倒・・・。

Apr 2, 2012 - 1 minute read - NDS

NDS25に参加してきた

第25回NDS(長岡技術者勉強会)に参加してきました。 どこかの誰かが、ブログを書くまでが勉強会だ、と言っていた気がするので簡単に書いてみます。 Togetterまとめ 負荷テストことはじめ(JMeterハック) (@nemuzuka) JMeterはサーバにたくさんリクエストを送って、その時の挙動を見るためのJava製ツール サーバ-クライアント間の通信を読み取ってそのまま再現したり、CSVからデータを吸いだしてリクエストに埋め込んだり、レスポンスからデータを吸い出したり、JavaScriptで挙動をカスタマイズできたりするらしい slideshare「負荷テストことはじめ」 ust「負荷テストことはじめ」 雪のシミュレーション(一部ハッキングが入ります) (@piras4) 気象庁が提供しているアメダスのデータなどから、雪の状態(温度とか密度)を計算するお話 熱伝導方程式とか微分とか忘れました ust「雪のシミュレーション」 Remember the MilkでGTD(RTMハック) (@masaru_b_cl) LT Remember the Milk は ToDo 管理のための Web サービス Webフォームからはもちろん、メールやTwitterからもToDoを作成できる slideshare「GTD on RTM」 ust「Remember the MilkでGTD」 JavaerがiPhoneアプリ開発入門してミタ(Objective-Cハック) (@makomegane) Keynote はアイコンを作るためのツール App Store のアプリのスクリーンショットは、自分の子供の可愛さを伝える場 Java と Objective-C の比較(メモリ管理の仕方とか) [ust「JavaerがiPhoneアプリ開発入門してミタ」]http://www.ustream.tv/recorded/21483875 「やったーGAでDTMできたよー\(^o^)/」 (@neko_gata_s) 遺伝的アルゴリズムで簡単な作曲をやってみようというお話 メロディを機械的にどう評価するかが難しい 評価関数が解析的に簡単に解けてしまって面白くないな・・・今後の検討課題ですね スライド ust「やったーGAでDTMできたよー\(^o^)/」 ブログ CSharperがWindows Phoneアプリ開発入門してミタ(C#ハック) (@ailight) C# はモテ言語 LT1 花火アプリを作りたい 作る前からパクられた LT2 HTMLからePub(@civic) 数あるHTMLで書かれたWebページをePubにして、iPadとかで見やすくしよう!というライブラリ 残念ながら、相手方にDOS攻撃を仕掛ける危険なプログラムのため、公開はできないとのこと

Mar 28, 2012 - 1 minute read - Javascript AjaxIME Igo

JavascriptでIME

この前いじったChrome17対応版AjaxIMEは 実際の変換を行うのに本家AjaxIMEが提供している変換サーバをそのまま使用しています。 そのため、すべての入力内容は本家サーバに送信されてしまいます。 どんな入力をしたのか作者さんにバレバレです。 この送信内容、暗号化すらされていないので、作者以外の人に見られる可能性もあります。 自分の書いた文章が勝手にインターネットに送信されているっていうのはあんまり嬉しくないですね。 ローカルのみで完結するのが理想です。 本家サーバはどうやらmecab-skkservと同じエンジンを使っているようです。 このバックエンドで動いているのは実はMeCab。 ということは、MeCabと互換性のあるigo-javascriptでも同じことができるはず・・・! これはならブラウザ上ですべてが完結する! はい、そういうことで作ってみました。 IgoIME 使い方は本家と一緒です。Alt-o (Ctrl-9)でモード切替。 ローマ字で日本語を入力することができます。 日本語入力をするためには変換候補をいくつか出力する必要がありますが、 本来Igoにはその機能はありません。 そのため、複数候補を出す部分だけ独自実装してあります。 しかし、まだなんか変換候補が怪しいですね・・・。 長い文章を入力したのに一文字しか結果が帰ってこないことがあります。 なんでだろう・・・・ まだまだ改良が必要なようです。

Mar 23, 2012 - 1 minute read - javascript AjaxIME

Javascriptでの関数宣言

Chrome17対応版AjaxIME Ajaxを使ってIMEを実現したAjaxIMEがFireFoxでは動くのに最新版のChromeで動かない。 動くように少しいじってみた。 Chrome17対応版AjaxIME 原因 Chromeで動かなかった原因はここ。 if(typeof getComputedStyle == 'undefined') { function getComputedStyle() { //中身は省略 } } FireFoxやChromeには getComputedStyle という関数が定義されているけど、 IEには定義されていない。 if文で有無を判定して、無い場合は動作をエミュレートする関数を定義している。 実行の様子をデバッガで追って見ると、Chromeではエミュレートする必要が無いのになぜか自前で定義した関数が呼び出されていた。 どうやら、Chromeでは 自作 getComputedStyle 関数が if文の中にあったとしてもコード読み込み時に作成されてしまうみたい。 FireFox だと if文の中が実行されない場合には作成されない。 結果だけ書くと、次のように書きなおしたら動いた。 if(typeof getComputedStyle == 'undefined') { getComputedStyle = function() { //中身は省略 } } あと Chrome だと、Input要素にフォーカスがあたった時に余計な装飾がついてしまうので、CSS上書きして抑制。 IE8でTextRangeが使えない問題は「IE8でのTextRange.moveToPoint()」を参考にして解決。 IE7のエミュレートモードにしているだけで、根本的な解決にはなってないけど、まあIEだしいいでしょ。 どっちが正しいの? とりあえず問題は解決したんだけど、FireFoxとChromeで動作が違うけど、どちらの動作が正しいの? 気になったので調べてみた。 「mixi Engineers’ Blog » 詳細 ECMA-262-3 第5章 関数」に関数の定義法についてわかりやすい解説が載っていた。 結論からいうと、一番初めの書き方は「誤り」で実際の動作は実装依存、つまり FireFox の動作も Chrome の動作も正しいとのこと。 関数定義と関数式 関数の定義法は大きく分けて、次のような関数定義と関数式に分かれている。 関数式は更に名前なしと名前付きがある。 //関数定義 function foo() { } //名前なしの関数式 var foo = function() { }; //名前付きの関数式 var foo = function _foo() { }; 普通の関数定義と無名関数があるのは知っててけど、単なるシュガーシンタックスみたいなものかと思った。 mixiのブログによると全くの別物。 関数定義と関数式の大きな違いは、実行時に呼び出し可能になっているかどうか。 関数定義は実行時に呼び出し可能になっているから、定義と呼び出しの順番は関係ない。

Mar 21, 2012 - 2 minute read - Octopress GitHub

GitHubにブログを設置してみたよ

TLにGitHubでブログのホスティングしている人がいたので、 「githubとjekyllとoctopressで作る簡単でモダンなブログ」 を参考に作ってみましたよ。 RVM のインストール 自分の環境には Ruby 1.9.2.2 が入っているんだけど、Ocropressでは Ruby 1.9.2 が必要らしい。 そのままでもいけるかと思ったけど、怒られた。 rake コマンドを全部 bundle exec rake に置き換えると一応実行はできるけど、なんだか警告がでる。 こういう時は複数のバージョンの Ruby を切り替えて管理できる、 rvm というのを使うといいらしい。 公式サイトの「Installing RVM」通りにコマンドを打てばOK。 bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile source ~/.bash_profile rvm install 1.9.2 && rvm use 1.9.2 rvm rubygems latest Octopress のインストール あとはgitでクローンして、インストールコマンドを叩くだけ。 git clone git://github.com/imathis/octopress.git octopress cd octopress gem install bundler bundle install rake install rake setup_github_pages 最後のコマンドは GitHub Pages に公開するためのもの。公開用のレポジトリを聞いてくるので予め登録しておこう。