プロフィール

Author:島田圭二
Follow shimanp on Twitter

カレンダー
07 | 2016/08 | 09
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
読断と変見内検索
訪問ありがとうございます
最近のコメント
最近のトラックバック
関連リンク
カテゴリー
月別アーカイブ


スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)
武道のすすめ - 美と健康の実践武術合気サンボ

武道を学ぶ理由


合気サンボという武道をやっているのですが、
なぜ武道を始めたのか?という質問をされることがあります。
いつもうまく答えられなかったのですが、
ドラゴンボール3巻を再読して以来、亀仙人のじっちゃんのセリフを言うようにしています。
悟空とクリリンの修行の前に言ったセリフです。
「武道を習得するのはケンカに勝つためではなく
ギャルに「あらん♥あなたとってもつよいのね~ウッフーン」といわれるためでもない!
武道を学ぶことによって心身ともに健康となりそれによって生まれた余裕で
人生をおもしろおかしくはりきって過ごしてしまおうというものじゃ!」


合気サンボは仲間を募集しております!


合気サンボとは日本の護身術である合気道とロシアの軍隊格闘術サンボを合わせた武術です。
合気サンボは新しくまだまだ知名度も低いので、うさんくさく思われるかもしれません。
しかし打撃あり投げ技あり関節技ありのとても実践的な武道です。
しかもただいま入会費・月会費すべて100%オフです!
大事なことなのでもう一度いいますが、入るときも月々のお金も一切かからないです。

↓こちらから募集しております
合気サンボ仲間募集!

なぜ無料なのか?


無料だというと変な宗教ではとか、ちゃんと稽古しないのでは?
と疑問に思う方もいるかもしれませんが無料なのには理由があります。
まず中学校の柔道室を無料で借りているのでお金がかかっていないというのがあります。
次にこれがとても重要なのですが、武道とは弱者のためにあります。
弱者にはお金がなく孤独で心身ともに疲弊しています。
しかしお金がないため何もできずどんどん悪循環にはまってしまいます。
そこで合気サンボです。
合気サンボはこの悪循環を断ち切るための突破口になればいいと思っています。

みなさんも合気サンボをはじめて心身ともに健康になり
人生を面白おかしくはりきって過ごしませんか。



スポンサーサイト
健康 | 【2011-11-06(Sun) 23:42:42】 | Trackback:(0) | Comments:(9)
そんなお寺で大丈夫か? > ワッパーラックローイ < あいつは人の話しを聞かないからな
ちょっと変わった珍寺タイのお寺ワッパーラックローイ(Wat Pa Lak Roi)に行ってきた。

まず行き方



1.空港→バンコク市内へ
スワンナプーム空港に着いたらバンコク市内に向かう。
(もしくはここからモーチットマイまで直で行ってもいい)
行き方はいくつかあるけど、オレは電車で行った。たぶん電車が一番早くて安い気がする。
いろんなとこにto Trainって書いてあるから、そこの方角に行けばいいと思う。
改札に着いたら切符を買う。自動販売機があるから、英語モードにして、目的地を選択して
表示された、バーツを入れればおk。
分からない場合は、近くに教えてくれる駅員がいたし、自動販売機じゃなくても買えるから大丈夫だ。
オレはとりあえずごはん食べたかったからアソーク駅ってところまで行った。
35バーツだった。時間30分くらいかな。

2.バンコク市内→北バスターミナル「モーチット・マイ」へ
おなかがいっぱいになったら、ナコンラチャシーマ行きのバスが出てる
北バスターミナル「モーチット・マイ」に行く。
行き方はトゥクトゥクとかバイクとかタクシーとか電車とかバスとかあるけど、オレはタクシーで行った。
ただタクシーの運転手は基本英語が通じない人が多いから、
北バスターミナルのモーチットマイに行ってくれと行ってもなかなか通じなかった。
いろいろ学習した結果、「モーチット・マイ」と一言だけ言って、
バスの絵を見せたら、いい感じで通じた。
一番いいのはモーチットマイのタイ語を印刷したものを持っていって見せるのがいいと思う。
トゥクトゥクとかバイクだと英語を話せる人が多いから、不安がある場合はそっちの方がいいかも。
でも基本タクシーの方が安いし快適、時間は少しかかるけど。
ちなみにサヤーム・スクエアのあたりからモーチットマイまで93バーツで30分くらいかかったかな。

3.「モーチット・マイ」→ナコンラチャシーマへ
モーチットマイに無事に着けたら、ナコンラチャシーマ行きのバスの切符を買う。
3階の49か50番窓口でナコンラチャシーマって言えば買える。
切符は198バーツで74番から出発するバスだった。結構いいバスでお菓子とコーラと毛布が出てきた。
だいたい3時間くらいで着いた。
だいたい4時~22時30のあいだで20分くらいの間隔で出てるらしい。

参考URL:
ナコンラチャシーマ(コラート)の行き方
ナコンラチャシーマ県基本情報

4.ナコンラチャシーマのバスターミナル2→ナコンラチャシーマ市内へ
気をつけなければならないのは、ナコンラチャシーマにはバス停が2つあって、
バス会社によってどっちに着くか分からないこと。
それかモーチットマイで49、50って二つ窓口があったから49はバスターミナル2に着くのかも。
窓口でどっちに着くか聞いてから行けばいいのかもしれない。
ちなみにオレは49番窓口で買ってバスターミナル2に着いた。
バスターミナル2は大きい道路沿いにあってすぐとなりに病院があるし、
看板にターミナル2って書いてあるから2だってことがすぐわかると思う。

ワッパーラックローイがあるノーンタイまではこのバスターミナル2から行くことになるので、
2に着いてすぐにワッパーラックローイに行く人はここで切符かって行けばいい。
オレの場合は、深夜0時30分くらいに着いたから市内でホテルに泊まろうと思って、市内に向かった。
バスターミナル2から市内へは目の前の大きな道路を病院がある方角とは反対方向に20分くらい歩くと
大きな交差点があって、右側にホテルっぽいのがあったから交差点を右に曲がった。
でもそこのホテルはスルーして、ちょっと歩いたところのV-ONEホテルって所に泊まった。
で朝起きて、バスターミナル2に向かった。
でもよくよく考えると、バスターミナル2から市内は病院と反対の方じゃなくて、
病院の方角だったっぽい。
行く前にこの地図をひとつひとつクリックして拡大して印刷してつなげたのを持っていくといいと思う。

バスターミナル1に着いた人は、この地図見ながらバスターミナル2まで歩くか
トゥクトゥクとかで行けばいいと思う。

5.ナコンラチャシーマ→ノーンタイ
バスターミナル2に着いたら、ノーンタイ、ワッパーラックローイと言って
タイ語で書かれたものを見せれば、ワッパーラックローイの近くまで、乗せていってくれる。
だいたい45kmくらいあって20バーツだった。
近づくとバスガイドのおっさんが呼んでくれる。

6.ノーンタイ→ワッパーラックローイ
着いたら↓みたいな案内があるから、バスで来た道からみて左方向に道なりに行く。
toWatPa.jpg
だいたいここから2kmくらいあるらしい。
で少し歩いたらすぐにバイクに乗った人が来て乗ってけよ。って言ってくれた。ホントありがたい。感謝。
で↓の門みたいのが見えてきたらワッパーラックローイに到着
watGate.jpg

ヾ(@^▽^@)ノ ワーイ

ワッパーラックローイを少しだけ紹介


先ほどの門からまっすぐに少し歩くとゴリラの門がみえてくる
goriGate.jpg

でゴリ門をくぐるとでっかいガイコツがある
ketuGaikotu.jpg


でこのガイコツ威風堂々立ってるよう見えるけど・・・
ketusasi.jpg
実はケツを刺されてる><

でケツを刺していい気になってるこいつはというと・・・
ketusasi_kakudai.jpg
玉袋を犬に噛まれてる><

でさらにでっかいガイコツの股下をよく見ると・・・
chiWare.jpg
うわーんもっと大変なことが起こってるよー><

てかしょっぱなからこれだからね。
あ、忘れてるかもしれないけど、ここ寺だから。

途中なんか胸を指さしてるやつがいて
yubisasi.jpg
これってもしかして、お金入れてみろってことなのかな?と思って入れたら

danceSing.jpg
歌って踊りはじめたヾ(@^▽^@)ノ ワーイ

なるほど、お金入れると動くやつがあるのか、とここで学習していろいろ入れて遊んでみた。
でもどうやら5バーツコインじゃないと動かないみたい。てかよく見ると5って書いてある。
ですぐに5バーツなくなっちゃってどうしようと思ってたら、
ちゃんと両替えしてるところがいくつかあった。そっか寺に入るのは無料でこれで稼いでるのか、と思った。
でオレ20バーツ札を5回両替えしに行ったんだけど、
はじめ仏頂面だった両替所のおばちゃんが行くたびに笑顔になっていった。
最後らへん声出して笑ってたからね。

結局100バーツくらい使っちゃった。
てか5バーツ入れると動くっぽいと思っても、動かないやつがあるからまじ注意が必要。
オレは30バーツくらい無反応で終わったからね。

中には池があって、がいこつが浮かんでるんだけど、こいつもコインでうごく
gaikotuChari1.jpg

でこのがいこつの横にも同じようなやつがいるんだけど・・・
gaikotuChari2.jpg
こいつは5バーツいれたけど動かなかった。。。

てかこのがいこつ、がいこつのくせになぜかよくみると・・・
gaikotuChariChinko.jpg
ちんこだけはあって、しかも全体重のほとんどをこれで支えてる。基本こんなんばっか。

こんなんばっかだから
suberi.jpg taihou.jpg
普通のすべり台とか大砲までなんだかひわいなものに見えてくるから不思議。

まだまだ、オレのワッパーラックローイフォルダは火を吹きたりないけど、
ブログにアップロードするの面倒だから今日はこれくらいにしとこう。
てかフェースブックには90枚くらいアップした。

帰り方


結局半日くらいいた。ひと通り見るだけだったら2時間くらいあればいけると思う。
だから、バンコクからの日帰りも十分可能だと思う。

で帰るときになって気がついたんだけど、どうやって帰るんだろうってなった。
よくよく考えたら、来るときに降ろしてもらった場所ってバス停でも何でもない場所だし。。。
とりあえず、降ろしてもらった場所に向かうことにした。
てか帰り道もちょっと歩いたら、またバイクの人が来て乗ってきなよって言ってくれた。もはや涙。
しかも女の子。日本だったら100パーないって断言できる。

でとりあえず、降ろしてもらった場所に着いた。
しょうがないからヒッチハイクでもしようと思って、歩きながら手振ったりしてた。ノシ
でもなかななか止まってくれない><
でしばらくしたらバスが止まってくれたヾ(@^▽^@)ノ ワーイ
そっか、ここの道はナコンラチャシーマまで1本道だから、
基本この道を通るバスはナコンラチャシーマまで行くんだ。
だから、帰りは降ろしてもらった場所でバスが通るのを待つといいと思う。
もちろん来たら手を振らないと止まらないけど。
値段は行きと同じで20バーツだった。

*1ナコンラチャシーマからトゥクトゥクで行って、
帰りの時間を決めて迎えに来てもらうっていう手もある。
ただナコンラチャシーマからはオレが交渉したときは行きだけで300バーツしたから
迎えに来てもらったら、最低でも600バーツくらいはかかるような気がする

*2ナコンラチャシーマのレンタルバイクでバイクをレンタルするっていう手もある。
道も単純だから迷わないと思う。行き方の所で写真載せたけど、曲がるところに案内あるし。
免許がなくても借りられるみたいだけど、事故とかあったら大変だから
国際免許をとってから行くといいみたい。

でこの寺大丈夫か?


とりあえず、ここの住職は生きてる次元が違うと思った。
マルチバース間旅行とか脳内で実現しちゃってるんじゃないかな。

てかここって奇界遺産なんだね。早速奇界遺産買った。面白い。全部行ってみたくなった。

奇界遺産
奇界遺産
posted with amazlet at 11.01.20
佐藤 健寿
エクスナレッジ
売り上げランキング: 11088




| 【2011-01-17(Mon) 02:45:59】 | Trackback:(0) | Comments:(0)
投資のその先へ
そんなに投資経験豊富なわけじゃないんだけど、今までに学んだことをまとめる。

まず投資で一番重要なことは自分をコントロールする力


ファンダメンタルズとかテクニカル分析とか政治の動向とかよりも、
あらゆる勝負事に大事なのは感情に振り回されずに、
自分で作ったルールを守る、自分をコントロールできる力だと思う。

9勝1敗で破産する人、1勝9敗で儲ける人


勝った数の方が多いのに破産する人は、
負けてる時にもう少ししたらプラスに転じるかもしれないから、
待ってみようとルールを無視してしまう、心が弱いタイプ。
負けた数の方が多いのに儲けてる人は、
負けてる時にちゃんとルールにしたがって、
損切りできる自分をコントロールできる心が強いタイプ。

なんでルールを守れなくなっちゃうの?


プロスペクト理論っていう有名な理論がある。
これはリスクを伴うときの選択を人はどう決定するのか、
についての理論なんだけど、とりあえず人は得る喜びよりも
失う悲しみを極端に嫌う傾向があるらしい。
だから9勝1敗でも破産してしまう人というのは、
特にこの失う悲しみを嫌ってるんだと思う。

プロスペクト理論は遺伝子レベルで染み込んでいるらしい


猿で実験したら猿も失う悲しみを重視するっていう結果が出たらしい。
だから、投資で勝つためには遺伝子を超えなければならないんだよ!
ちなみにこの実験を続けたところ、あるオスとメスの猿が売春を始めたらしい。。。
人間ってさ思ったより猿から進化してないのかも。

投資とギャンブル


ギャンブルをどう定義するのかにもよるけど、
ぶっちゃけ、投資はギャンブル。
というかギャンブルをリスクとリターンがあるものだとすると、
投資=ギャンブルになって銀行にお金を預けることもギャンブルになっちゃう。
ただ銀行に預けるのと株に投資するのではリスクとリターンの変動率が違うけど。
銀行よりも株の方がリスクとリターンの変動が高い。
ちなみにその変動率のことをボラティリティっていう。

で株とかってやるべきなの?


勝間さんとか、経済の評論家の人たちは株はやったほうがいいっていう。
その理由は今や銀行も安全じゃないし、株はインフレにも強いし
なによりリスクが分散されるからって事だと思う。
オレも基本的にはこの意見には賛成なんだけど、
ただ、株はボラティリティが高い。
ボラティリティが高いものというのはプロスペクト理論が発動しやすいから、
自分をコントロール出来ない人にはおすすめが出来ない気がする。
投資信託とかインデックス系なら割とリスクも少ないからいいんじゃないかという意見もあるけど、
自分をコントロール出来ない人はたぶん徐々にリスクの高い商品に手を出していしまう気がする。

投資のその先へ


てか結局、人生は時間を消費して未来に投資するギャンブル。
その時間に何をするかでリターンが変わってくる。
だから、株とかFXに投資するよりも、英語とか技術とか学ぶために
金を投資した方が最終的なリターンを大きくなると思う。
だって、金なんて所詮信用で成り立ってるものだからある日無価値になる可能性もあるし。
英語とか技術とかを学んでおけば世界中どこ行っても、貯金0円でやっていける。
もちろん英語も技術も学ぶにはそれなりのリスクがあるけど、廃れた技術になったりとか。
でも株とかFXよりは確実性が高いんじゃないかな。





投資 | 【2010-12-23(Thu) 17:50:39】 | Trackback:(0) | Comments:(0)
GAEでカーソルを使用する - Java
最近google app engineを使用した仕事をしてる。
そこでカーソルを使うことがあったのでメモ。

Low Level APIを使用したときのカーソル


とりあえずソース。
DatastoreService service = DatastoreServiceFactory.getDatastoreService();
Query query = new Query("Hoge");
PreparedQuery pq = service.prepare(query);
FetchOptions fo = FetchOptions.Builder.withOffset(0).limit(2);
//データを取得。0番目から2つデータが取得
QueryResultList qr = pq.asQueryResultList(fo);
//カーソルの取得
Cursor c = qr.getCursor();
//取得したカーソルを指定
fo = FetchOptions.Builder.withLimit(2).cursor(c);
//データを取得。3番目から2つのデータが取得
qr = pq.asQueryResultList(fo);

カーソルを一度文字列として保存しておくには
//カーソルを取得
Cursor c = qr.getCursor();
//カーソルをBase64エンコードした文字列を取得。これを文字列をどこかに保存しておく。
String cur = c.toWebSafeString();
//カーソルを復元するには
c = Cursor.fromWebSafeString(cur);


slim3を使用したとき


ソース
HogeMeta meta = HogeMeta.get();
S3QueryResultList resList =
Datastore.query(meta)
.filter(meta.foo.equal("foo"))
.limit(2)
.asQueryResultList();
//カーソル情報を取得
cursor = resList.getEncodedCursor();
//検索時の条件を取得
filter = resList.getEncodedFilters();
//検索時のソート条件を取得
sort = resList.getEncodedSorts();
//まだデータが存在するか?
if (resList.hasNext()) {
S3QueryResultList resList2=
Datastore.query(meta)
.encodedCursor(cursor)
.encodedFilters(filter)
.encodedSorts(sort)
.limit(2).asQueryResultList();
}

slim3の例だとlimitが書かれていなくて、ちょっとはまった。
limitを指定しないと以下のようなエラーが発生する。
java.lang.IllegalArgumentException: fromIndex(2) > toIndex(-2147483647)

カーソルの制限


slim3のページにも書いてあるけど、IN や != が使用できないので、
notEqualとか使うとnullが返ってくる。
また、検索条件や、ソート条件も一致していないとダメなので、
low level apiよりslim3を使用した方が確実かも。





gae | 【2010-05-22(Sat) 20:57:22】 | Trackback:(1) | Comments:(0)
twitterにOAuth認証を使用して投稿する - java
今回は自分が登録したアプリケーションから投稿することのみを目的としている。
なのであらかじめアクセストークンが分かっているので、OAuthの仕組み自体を利用しているわけではない。

1.Twitterアプリケーションの登録


登録の条件として、twitterのアカウントを持っている必要がある。
アプリケーション登録申請にアクセスして登録する。
各入力項目の説明
・アプリケーション名:
アプリケーションの名前。投稿したとき~からの部分に使用される。
・アプリケーションの説明:
適当に説明する。
・アプリケーションのウェブサイトURL:
botなどアプリケーションがあるサーバーのURL。
特にない場合は自分のTwitterページのURLでOK。
・所属会社/団体:
空でもいけた気がしたが適当に入力。
・サイト:
自分のブログとか適当に入力。特にない場合は自分のTwitterページのURLでOK
・アプリケーションの種類:
ブラウザアプリケーションでOK
・コールバックURL:
本来はリクエストが承認されたときTwitterからコールバックされるURLを入力するが、
今回は自分のアプリケーションのみのアクセスなので適当に自分のTwitterページのURLを入力しておく。
・Default Access type:
Read & Write を選択する
・Twitterでログインする:
一応チェックしておく

2.コンシューマキー・コンシューマシークレットの確認


アプリケーションの登録が済んだらコンシューマキーとコンシューマシークレットの確認をする。
http://twitter.com/oauth_clients
にアクセスして登録したアプリケーション名のリンクを開く。
そこにConsumer keyとConsumer secretがある。
この二つは自分のアプリケーションを特定するためのものでプログラムで使用する。

3.アクセストークン・アクセストークンシークレットの確認


アクセス承認用のトークンを確認する。
http://dev.twitter.com/apps/
にアクセスして、登録したアプリケーション名のリンクを開く。
リンクを開くと、左の方に「My Access Token」というリンクがあるのでクリックする。
そこにAccess TokenとAccess Token Secretがある。
この二つはアクセス承認用のトークン。プログラムで使用する。
他ユーザにアクセスする場合はこの部分が分からないので、OAuthの仕組みを使用して取得する必要がある。

4.JAVAのTwitter用ライブラリをダウンロード


今回はTwiter4Jを使用する。
Twitter4Jよりダウンロード
ダウンロードしたら解凍して、twitter4j-core-X.X.X-SNAPSHOT.jarを、
今回作成するプログラムのパスに追加する。

5.OAuth認証でTwitterに投稿する


コードサンプルがあるのでこれの通り実装


private void tweet() throws TwitterException {
TwitterFactory factory = new TwitterFactory();
Twitter twitter = factory.getInstance();
twitter.setOAuthConsumer("Consumer key","Consumer secret");
AccessToken accessToken = new AccessToken("Access Token", "Access Token Secret");
twitter.setOAuthAccessToken(accessToken);
Status status = twitter.updateStatus("Message");
System.out.println("Successfully updated the status to [" + status.getText() + "].");
}

Consumer key, Consumer secret, Access Token, Access Token Secretの部分を
自分のアプリケーション情報を入力する。
あとMessageの部分に自分がつぶやきたいことを入力する。

今回はアクセストークンがすでに分かっているのでこれだけ。


Twitter API プログラミング
辻村 浩
ワークスコーポレーション
売り上げランキング: 1217



java | 【2010-05-16(Sun) 16:09:18】 | Trackback:(0) | Comments:(0)
vi 文字補完メモ - PHP
viには文字の補完がいくつかあるけど、オムニ補完と辞書補完のメモ。主にPHP。

まずはオムニ補完


オムニ補完はインテリセンス的なやつ。
PHPの場合vim7以降はオムニ補完に対応しているので、
autocmd FileType php set omnifunc=phpcomplete#CompletePHP

をvimrcに追加するだけでOK。
あとctagsで生成されたデータベースもオムニ補完の対象となるらしい。
ちなみにctagsはフォルダ内にあるファイルを読み込んで、
クラス名や関数名などをインデックス化してくれるツールのこと。
windowsの場合はctagsが入ってないので、インストールする必要がある。
ここからダウンロード
ダウンロードして解凍したら、中のexeをパスの通っているフォルダにおく。
僕はvimの直下に置いたけど、system32とかでもいいと思う。
あとはプロンプトでタグりたいディレクトリに移動して
ctags -R

を実行もしくはvimを開いて、カレントをタグりたいディレクトリに移動して、ツールからタグを作成する。

参考URL
http://nanasi.jp/articles/others/ctags.html

設定が完了したら、エディタを開いて、補完したいときにCtrl + X, Ctrl + o を入力する。
ちなみにvimrcでautocmd FileType phpと指定しているので拡張子がphpのファイルでしか補完されない。

次は辞書補完


オムニ補完と似てるけど、自前で辞書を用意してその辞書を参照して補完するのが辞書補完。
まず辞書を用意する。方法は二つある。
まず古いけどvimのサーバーからダウンロードする。
vim online
もう一つはインストールしたPHPのライブラリから自分で作成する。
linux、macなら
php -r '$f=get_defined_functions();echo join("\n",$f["internal"]);'|sort > PHP.dict

windowsだとたぶんエラーになる。少し変えればできるようになるかも。

辞書ファイルを作成したら、適当なとこにおく。
一般的にはたぶん
windowsならホーム/vimfiles/dictionary/
macならホーム/.vim/dictionary/
あたりだと思うdictionaryディレクトリがなければ作成する。
配置したら、vimが辞書ファイルを認識するよう設定擦る必要がある。
vimrcに以下を追加
windows
autocmd FileType php set dictionary=%homepath%/vimfiles/dictionary/PHP.dict

mac
autocmd FileType php set dictionary=~/.vim/dictionary/PHP.dict

別の場所に置いた場合は適宜変更。てかフルパスでないと認識しなかった。

これで設定は完了。
phpファイルを開いて、Ctrl + x, Ctrl + k で文字補完ができる。
ちなみになぜかWindowsでKaoriyaさんからダウンロードしたやつだとコマンドを入力しなくても
自動で補完されたなんでだろう?
通常自動補完したい場合は、ここからダウンロードして、
そのフォルダ構成のままvimのruntimeに置く。
そしてvimrcに
autocmd Filetype php let g:AutoComplPop_CompleteOption='.,w,b,u,t,i,k~/.vim/dictionay/PHP.dict

を設定する必要があると思う。

vi | 【2010-04-21(Wed) 11:30:35】 | Trackback:(0) | Comments:(0)
Java - 迷路の最短距離を求める
プログラマーとしての技量を測るという問題があったので挑戦してみた。
人材獲得作戦・4 試験問題ほか - 人生を書き換える者すらいた。
壁とスペースで構成された迷路が与えられたとき、スタート地点からゴール地点に至る最短経路を求めよ
三時間以内にできれば優秀かもしれないらしい。
とりあえずソース
package src;

import java.awt.Point;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class Shortest {
private static final char WAY = '$';
private static final char S = 'S';
private static final char G = 'G';

private Stack st = new Stack();
private int goalCnt = 0;
Stack shortest = null;

public static void main(String[] args) {
Shortest sht = new Shortest();
sht.way(args[0]);
}

private void way(String inputPath) {
try {
// char配列に読み込む
char[][] inpMap = inputFile2char2D(inputPath);
Point s = getPoint(inpMap, S);

gotoGoal(s.x, s.y, mapCopy(inpMap));
System.out.println("経路数:" + goalCnt);

if (shortest != null) {
//経路を記述
for(int[] yx : shortest){
inpMap[yx[0]][yx[1]] = WAY;
}
}
print2DChar(inpMap);
outputFile4char2D("output.txt", inpMap);
} catch (Exception ex) {
ex.printStackTrace();
}
}

private void gotoGoal(int x, int y, char[][] map) {
// ゴールだったら終了
if (map[y][x] == G) {
if(shortest == null)shortest = copyStack(st);
if(shortest.size() > st.size())shortest = copyStack(st);
goalCnt++;
return;
}
if (map[y][x] != S) map[y][x] = WAY;
int[] yx = {y,x};
//スタックにつむ
st.push(yx);
// System.out.println("x=" + x + ",y=" + y);
if (map[y-1][x] == ' ' || map[y-1][x] == G) gotoGoal(x, y-1, map);
if (map[y+1][x] == ' ' || map[y+1][x] == G) gotoGoal(x, y+1, map);
if (map[y][x-1] == ' ' || map[y][x-1] == G) gotoGoal(x-1, y, map);
if (map[y][x+1] == ' ' || map[y][x+1] == G) gotoGoal(x+1, y, map);
//全方向だめな場合は終了
map[y][x] = ' ';
//スタックから出す
st.pop();
return;
}

private Point getPoint(char[][] arg2D, char c) {
Point p = new Point(-1, -1);
int len1D = arg2D.length;
for (int i = 0; i < len1D; i++) {
int len2D = arg2D[i].length;
for (int j = 0; j < len2D; j++) {
if (arg2D[i][j] == c) {
p.y = i;
p.x = j;
return p;
}
}
}
return p;
}

private char[][] inputFile2char2D(final String path) throws Exception {
char[][] arg = null;
try {

FileInputStream fi = new FileInputStream(path);
InputStreamReader ir = new InputStreamReader(fi);
BufferedReader br = new BufferedReader(ir);

String line;
List lines = new ArrayList();
int row = 0;
while ((line = br.readLine()) != null) {
lines.add(line);
row++;
}
arg = new char[row][];
int r = 0;
for (String l : lines) {
arg[r++] = l.toCharArray();
}
fi.close();
ir.close();
br.close();
} catch (Exception ex) {
throw ex;
}
return arg;
}

private char[][] mapCopy(char[][] map) {
int map2Dlen = map.length;
char[][] copy = new char[map2Dlen][];

for (int i = 0; i < map2Dlen; i++) {
copy[i] = new char[map[i].length];
System.arraycopy(map[i], 0, copy[i], 0, map[i].length);
}
return copy;
}

private Stack copyStack(Stack s){
Stack copy = new Stack();
for(int[] xy : s){
int[] c = new int[2];
c[0] = xy[0];
c[1] = xy[1];
copy.push(c);
}
return copy;
}

private void outputFile4char2D(final String path, final char[][] arg2D)
throws Exception {
FileOutputStream fo = new FileOutputStream(path);
OutputStreamWriter ow = new OutputStreamWriter(fo);
BufferedWriter bw = new BufferedWriter(ow);
int len1D = arg2D.length;
for (int i = 0; i < len1D; i++) {
bw.write(arg2D[i]);
bw.newLine();
}
bw.close();
}

private void print2DChar(final char[][] arg2D) {
int len1D = arg2D.length;
for (int i = 0; i < len1D; i++) {
System.out.println(arg2D[i]);
}
}

}


一応書いてみたけど、どうやらこれだと、全経路を通ってからチェックするので、
不完全な最短チェックらしく、レベル3ということみたい。。。
まだまだだな・・・。
っていうか、全経路を通らずにどうやってチェックするんだろう?
後でググってみよう。

アルゴリズム | 【2010-04-09(Fri) 14:08:49】 | Trackback:(0) | Comments:(1)
java - ループを使わずに配列の順序を逆にする。
何週間か前にループを使わずに配列の順序を逆にするには?っていう問題があった。
プログラマーの力量を見極める--面接官になったら尋ねるべき質問実例集
このときはそんなの無理とすぐにあきらめたのだけど、
昨日お風呂に入っているときにふとこの問題を思い出し、
あっ再帰か、と浮かんだのでJAVAで書いてみた。

    private void reverseArg(int[] arg,int n){
int len = arg.length;
int d = len - n;
if((len / 2) < (d + 1)) return;
int tmp = arg[d];
arg[d] = arg[n-1];
arg[n-1] = tmp;
reverseArg(arg,n-1);
}



java | 【2010-03-30(Tue) 11:21:26】 | Trackback:(0) | Comments:(0)
bookmarklet - サイトを見やすく改行する
ネットしてるとき、改行が少なくて見づらい思いをしたことはありませんか?
僕はしょっちゅうです。
なのでbookmarkletを作ってみました。

見づらいわ!

ソースは以下になります。
javascript:(function(e){e.innerHTML=e.innerHTML.replace(/(、|。)/g,'$1<br />')})(document.body)
ただ「、」「。」があったら改行を入れているだです。
なので逆に見づらくなる可能性もあります。たとえばこの記事で実行したりすると。。。

javascript | 【2010-03-29(Mon) 13:25:46】 | Trackback:(0) | Comments:(0)
iPhoneでUstream試してみた
前々から気になっていたUstreamを試してみた。

ちなみにUstreamとは、簡単に自分の放送局が持てるサービスのこと。
ライブカメラとネットにつながる環境があれば誰でも映像を世界に配信することができる。

iPhoneのカメラからでも配信出来るみたいなので試してみた。

1.iPhoneにUstreamのアプリを入れる


AppStoreからUstream Live BroadCasterをダウンロード

2.Ustreamのアカウント作成


アカウントの作成はiPhoneに入れたアプリからでもできるし、以下のUstreamのサイトからでもできる
Ustream

3.放送局作成


アカウントが作成できたら放送局を作成する。
iPhoneからだとcreate new showとかだったと思う
サイトからだとname your showで設定する

4.放送する


放送局が作成されるとiPhoneだとカメラが立ち上がる。
で、右下にあるGo Liveってボタンを押す。
これで放送される。

5.自分の放送を見る


http://www.ustream.tv/channel/自分の放送局名
にアクセスすると見れる
もしくはiPhoneに表示されているURLに接続しても見れる。

また放送後、保存するといつでも見ることができる。

こんな簡単に放送できるなんてすごい時代だなー。


レビュー | 【2010-03-18(Thu) 14:03:53】 | Trackback:(0) | Comments:(0)
vimでZen-Coding - HTML入力を効率化する
zen-codingなるものを知った。
マークアップ効率化 - zen-codingでコーディングを倍速に

これはHTMLの入力を簡単にするものらしい。
viでもこの入力方式に準拠したプラグインがあるみたいなので、入れてみた。

1.プラグインダウンロード


以下よりzencoding.vimをダウンロード
ZenCoding.vim

2.ダウンロードしたファイルをプラグインフォルダに配置


ダウンロードしたzencoding.vimを以下に置く
・windows:ホームディレクトリ/vimfiles/plugin
・mac:ホームディレクトリ/.vim/plugin

3.プラグインが認識されてるかチェック


vimを起動して
:scriptnames
を入力してちゃんとzencoding.vimが認識されているかチェック

4.試す


div
とvim上で入力し、<C-y>,(Ctrl + y の後にカンマ)を入力する
<div></div>
となれば成功
このバージョンから補完時の入力が<C-z>から<C-y>,に変更したらしい。
てかはじめカンマを入力し忘れて、ちょっと悩んだ。。。

てかすごい便利!これは効率が上がる。

vi | 【2010-03-17(Wed) 15:46:08】 | Trackback:(0) | Comments:(2)
Yahoo! JAPAN - インターネット クリエイティブアワード
Yahoo! JAPAN - インターネット クリエイティブアワード に応募してみた。

応募した作品は、速読をするWEBツール↓。
速読
たいした作品ではないけどなんとなく出品してみたくなった。

作成の意図は、読む速度が早くなれば、仕事の書類を読む時間や
プライベートでの読書の時間が節約でき、人生を有意義に過ごせるのでは
と思ったから。

実はまだまだ未完成なんだけど、今日までだから時間がなかった。
追加したかった機能は
・ブログだと、広告などの不要な文字も入ってしまうので内容のみを取得して表示。
・表示する文字数変更
・形態素解析をして区切りのいいところで切る。
・表示する行数を変更できる。
・英語対応。単語ごとに区切る。

苦労したのがie対応。もともとFirefoxで作ってたから大変だった。
早くブラウザの標準化して欲しいな。
IEがHTML5対応しなかったら、Windows使うのやめようかなと本気でおもった。
それくらいIEむかつた。
てかブラウザ間の仕様の違いによる経済的損失っていくらあるんだろう。
結構あると思うんだが、IEは対応すべきだろJK。

でも出品するとなると、モチベーションが上がるからいいかも。
今後も敷居が低そうなのが、あったら応募してみようかな。


自己サービス | 【2009-08-17(Mon) 15:31:03】 | Trackback:(0) | Comments:(0)
PHPでtwitterに投稿
いまさら感がありますが、TwitterのBotを作ろうと思って、まずは投稿してみた。言語はPHP。

とりあえずソース


<?php
$url = "http://twitter.com/statuses/update.xml?";
$username = "ユーザ";
$password = "パス";
$params = "status=". rawurlencode("投稿するメッセージ");

$result = file_get_contents($url.$params , false, stream_context_create(array(
"http" => array(
"method" => "POST",
"header" => "Authorization: Basic ". base64_encode($username. ":". $password)
)
)));
?>

たったこれだけ。

まずTwitterのAPIの説明


TwitterAPIのドキュメントを開く。
この中に「statuses update」がある。これが投稿に関するAPIなので開いて読む。

読むと以下のことがわかった。ような気がする。
・URLは「http://twitter.com/statuses/update.[format]。
 formatの部分はレスポンスの形式を入力する。
・形式はxml, json, rss, atom がある。
・HTTPのメソッドはPOST。
・認証が必要
・負荷制限なし?1時間に150回までしかリクエストしちゃダメってのがないらしい。
・POST時のパラメーターは二つで、statusとin_reply_to_status_id。
 statusは投稿するメッセージなので必須。
 in_reply_to_status_idは別のTwitterユーザに対する返答の場合指定するオプションパラメータ。

ソースの説明


たいしたソースではないので説明というほどでもないけど、一応。

PHPにはfile_get_contentsという便利な関数がある。
この関数にHTTPのURLを指定すると、指定したURLにHTTPリクエストを発行して、
HTTPレスポンスを文字列で返してくれる。
なので、今回はこの関数を利用してTwitterに接続を試みる。
$result = file_get_contents($url.$params , false, stream_context_create(array(

第一引数に$URL+$paramsを指定している。
URLにはAPIにあったURLを指定し(formatはxmlにした)、パラメータにAPIで必須のstatusを指定。
第二引数はレスポンスを読み込むときエンコードするかとかバイナリとかなので、
とりあえず、falseにする。
このAPIでは認証を使用するため独自のコンテキストを作成するので第三引数に
stream_context_createを指定。
認証にはいくつか方法があるみたいだけど、今回はBasic認証を使用した。

以上説明終わり。

*参考URLっていうかもろぱくリ
HIRACCHI H.D.:PHPでTwitterに投稿

php | 【2009-08-08(Sat) 18:41:34】 | Trackback:(0) | Comments:(2)
viでホームポジションを死守するためのショートカットメモ
エディタで文章やプログラムを書いているときに一番嫌なのがホームポジションを
乱されることだ。
個人的にEnterやバックスペースは遠いので極力打ちたくない。。。
ってことで、いくつショートカットをメモしておく

・Ctrl+m 文字確定、改行、てかほとんどEnter代わり
・Ctrl+h 文字削除
・Ctrl+c,Ctrl+[ 挿入モード解除。
・Ctrl+^ 日本語入力ON/OFF。

ただ日本語入力の切り替えは普通に切り替えキーを押したほうがいいような気がするので
独自で割り当てたほうがいい気がする。
_vimrcを開いて適当なところに以下を追加
inoremap <silent> <C-j> <C-^>

とりあえずCtrl+jに割り振ってみた。
一応Ctrl+jは挿入モードで改行みたいな動作するけど、Ctrl+mがあるからいらいない
ということで割り振った。

あと挿入モードでノーマル時のhjklで上下左右移動したいけど、
割り当てる場合、Ctrl+hは削除でよく使うからな。。。
やっぱりある程度独自の設定にしないと気分よく使えないのかも。
挿入モードで矢印を割り当てる設定
inoremap <C-j> <DOWN>
inoremap <C-k> <UP>
inoremap <C-l> <RIGHT>
inoremap <C-h> <LEFT>


追記:
結局vimrcは以下のようにした
"キーマップ
"入力モード
inoremap <C-a> <Home>
inoremap <C-e> <End>
inoremap <C-d> <DEL>
inoremap <C-b> <BS>
inoremap <C-q> <C-^>
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
"日付挿入
inoremap <C-d>d <C-R>=strftime('%Y/%m/%d (%a)')<CR>
"括弧入力補助
inoremap { {}<LEFT>
inoremap [ []<LEFT>
inoremap ( ()<LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>
inoremap < <><LEFT>

"コマンドモード
cnoremap <C-a> <Home>
cnoremap <C-e> <End>
cnoremap <C-d> <DEL>
cnoremap <C-b> <BS>
cnoremap <C-q> <C-^>
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>

"ヴィジュアルモード
vmap <Tab> :s/^/\t/<CR>gv
vmap <S-Tab> :s/^\t//<CR>gv
vmap / :s/^/\/\//<CR>


vi | 【2009-08-02(Sun) 20:03:47】 | Trackback:(0) | Comments:(0)
書評 - 女たちのジハード
女たちのジハード (集英社文庫)5人のOLの五者五様の物語。
一見どこにでもありそうな題材だけど、
読み始めたらとまらない、かっぱえびせんタイプだ。
みんな仕事や恋愛そして結婚に悩み苦しみ、一喜一憂しながら、
小気味よくストーリーが進んでいくのだが、読み終わったあとの爽快感がはんぱない。
読む前は女たちのどろどろな世界を想像していたのだけど、
読み終わって見ると、腫れ物がおちたようなすっきり感がある。
老若男女問わず読んで欲しい。でもどちらかというと20代から30前半くらいの人が
読むといいかも。

実は著者の篠田節子さんの本は初めて読んだのだけど、
めっちゃ面白かったので、アマゾンで早速別のを注文した。
ちなみに弟117回の直木賞受賞作品。
ほんとオススメです。

書評 | 【2009-07-29(Wed) 00:15:37】 | Trackback:(0) | Comments:(0)
次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。