さとやn Blog

試合はRuby,勝負はC#!

今更ですが Memcachedを使ってみる

ずっと業務系ばかりだったので、今更ですが Memcachedを使ってみることに。

とりあえずhttp://memcached.org/からソースを落としてインストール。

wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
tar xzvf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure 
./configureすると
onfigure: error: libevent is required.  You can get it from http://www.monkey.org/~provos/libevent/
とエラーになるので、指示通り http://www.monkey.org/~provos/libevent/からlibeventなるもののソースを落としてインストールしてみる。
wget http://www.monkey.org/~provos/libevent-2.0.12-stable.tar.gz
tar xzvf libevent-2.0.12-stable.tar.gz 
cd libevent-2.0.12-stable
./configure
make
sudo make install

無事にインストールされたようなので気を取り直してmemcacheのインストールにリトライ。

./configure
make
sudo make install

インストールは無事に済んだようなので
memcached
で実行しようとするとまたエラー。

memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory

実際には/usr/local/lib/にファイルは存在するのだけど、見つけてくれない。このページを参考に設定を変更。

再度

memcached -vv
で起動。 telnetで接続。
telnet localhost 11211

なんか適当にデータを登録してみる.

set myname 0 0 7  #最初の0は圧縮するかしないか / 次が有効期間(0だと無期限) / 登録するデータの総バイト数
satoyan
STORED
get myname
VALUE myname 0 7
satoyan
END
とりあえず動きました。

次はこれをRubyから扱ってみることにしよう。

Rails3でActiveScaffold

ActiveScaffoldはいつになったらRails3に対応するのかなー? なんてずーっと思ってたら、とっくにForkされたプロジェクトがあって、そちらがRails3に対応してました。

https://github.com/vhochstein/active_scaffold

動作確認のため簡単なアプリを作ってみる。

#railsプロジェクトを作成
rails new active_scaffold_test
cd  active_scaffold_test
bundle install

#ActiveScaffoldプラグインをインストール
  rails plugin install git://github.com/vhochstein/active_scaffold.git -r 'rails-3.0'

#gemでインストールしたい場合は
gem "active_scaffold_vho" 

#ActiveScaffoldのセットアップ 
rails g active_scaffold_setup jquery  #標準のPrototypeを使いたい場合は最後のjqueryの指定は無し

#バンドとバンドメンバーを管理するようなものを作ってみる
rails g active_scaffolf BandGroup name:string
rails g active_scaffolf BandMember name:string instrument:name band_group:references
rake db:migrate

#サーバー実行
rails s

こんな感じでできます

水サーバー 富士の湧水 レンタルしてみました

震災の水不足も解消して、スーパーには大量のペットボトルの水が並ぶようになりましたが、買いだめって運ぶのが結構面倒だったりします(よね?)
不精な一人暮らしの男の場合は、更に冷蔵庫でちゃんと冷やしたりするのすら面倒だったりします。
というわけで、水サーバー、やってみるか、という運びになりました。

アクアクララが有名らしいのですが、あれは人工水だとのことで却下。 
やっぱり飲み水は天然水のほうが良いに決まってます。なので、今回は富士の湧水のしてみました。

  • サーバーのレンタルが800円/月
  • 水1パック(12リットル)が1600円(133円/1リットル)
  • 水は注文すればヤマトの宅配で2〜3日で配送。
  • 冷水(普通に冷たくて美味い)、温水(というか熱湯)両方使える。

スーパーなどで格安で販売しているペットボトルの水と比較するとちょっと割高感は否めませんが、味と安全と購入の手間が省けるという面を考慮すれば、まあまあ、ってな感じで決断しました。

実際1週間ほど使ってみましたが、これは予想以上に快適!
風呂上りや寝起きなど、特に暑いこの時期に、さっと冷たい(これが本当に冷たい)、かつ美味い水が飲めるとういことが、こんなに良いものか、と初めて実感しました。

更にお湯のほうもそのままカップ麺に使える程熱い (営業担当者)ので、お茶やコーヒーにも使えます。カップ麺自体は個人的に滅多に食わないのですが、お茶やカップの味噌汁で使ったところこれまた非常に便利なのを実感。

水自体は、今話題のバナジウムを豊富に含んでいる、とのことです。バナジウムが何なのかは知りませんが、多分良いものなんでしょう、きっと。



私は千葉県は松戸市在住なので、近くのFujioxというガス会社(ガス会社は何故水を売っているところが多いのだろう?)代理店経由で申込みましたが、設置から何まで営業担当者が直接色々やってくれたり、説明もしてくれたので、かなり安心でした。

※私は関連企業のまわし者ではありません。念のため。

静岡駅前 活造り 河太郎がかなり良い

この土日に、大学時代からの友人の結婚式に招待され、東京周辺の仲間6人ほどで静岡まで行ってまいりました。
初めて見る奥さんはとても美しい方で正直びっくり。
式の料理も美味しくて、全部残さず平らげました。
で、今日は帰りに静岡駅のすぐ前にある活造り居酒屋「河太郎」で「海鮮ひつまぶし」「鰻のひつまぶし」「静岡おでん」を頼んだのですが、これが、どれもすべて大当たり!

  • 海鮮ひつまぶし
    うにがドカン、とのってます。そのままでもお茶漬けでもかなり美味い。
  • 鰻のひつまぶし
    石焼なのが特徴。おこげがチョー美味い。これもそのままでもお茶漬けでもOK。お茶漬けに関しては出汁が効いてて出し汁だけ飲んでも美味かった。
  • お新香
    付け合わせで出てきたお新香がかなり美味かったので別で単品で注文することに。
    香り、歯ごたえ共にGood。
  • 静岡おでん
    こんにゃくにまで味が染み込んでる。静岡おでんは牛筋を食べなければ静岡おでんではない、と女将さんに言われたのですが、個人的にはこんにゃくが良かった。もちろん牛筋もよかったけど。
 お店の雰囲気も、サービスも一流です。
安いお店ではないですが、静岡に行った際にはぜひ寄ってみて欲しいお店です。

C#でiPhone - キーボードの有無によってテキスト編集エリアのサイズを変更する

テキストエリアのフォーカスが移ると自動的にキーボードが表示されるようになっていますが、テキストエリアを画面いっぱいに表示してたりすると、表示されたキーボードがテキストエリアの一部を隠してしまう場合があります。
そのような画面レイアウトの場合は、キーボードの表示・非表示に応じてテキストエリアのサイズを変更する必要が出てきます。
というわけでやってみました。
ポイントは
  • NSNotificationCenter.DefaultCenter.AddObserver − キーボードの表示・非表示の通知を受けるようにする
  • ResignFirstResponder - コントロールからフォーカスを外す - .NETで言うところのLostFocus
ってところでしょうか。

using System;
using System.Collections.Generic;
using System.Linq;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Drawing;

namespace HelloIPhoneTextView
{
	public class Application
	{
		static void Main (string[] args)
		{
			UIApplication.Main (args);
		}
	}
	
	// The name AppDelegate is referenced in the MainWindow.xib file.
	public partial class AppDelegate : UIApplicationDelegate
	{
		
		NSObject kbdShow, kbdHide;
		
		// This method is invoked when the application has loaded its UI and its ready to run
		public override bool FinishedLaunching (UIApplication app, NSDictionary options)
		{
			doneButton.Enabled = false;
			
			kbdShow = NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillShowNotification, delegate(NSNotification n) {
				var kbdFrame = UIKeyboard.BoundsFromNotification (n);
				var frame = textView.Frame;
				frame.Height -= kbdFrame.Height;
				textView.Frame = frame;
				doneButton.Enabled = true;
			});
			
			kbdHide = NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillHideNotification, delegate(NSNotification n) {
				var kbdFrame = UIKeyboard.BoundsFromNotification (n);
				var frame = textView.Frame;
				frame.Height += kbdFrame.Height;
				textView.Frame = frame;
				doneButton.Enabled = false;
			});
			
			doneButton.TouchDown += (sender, e) => {
				textView.ResignFirstResponder ();
			};
			
			
			window.MakeKeyAndVisible ();
	
			return true;
		}
	
		// This method is required in iPhoneOS 3.0
		public override void OnActivated (UIApplication application)
		{
		}
		
		public override void WillTerminate (UIApplication application)
		{
			NSNotificationCenter.DefaultCenter.RemoveObserver (kbdShow);
			NSNotificationCenter.DefaultCenter.RemoveObserver (kbdHide);
		}
		
	}
}



C#でiPhone - UiWebViewでWebブラウザを実装してみる

要素のクリックイベントとかフォーム送信イベントとかキャッチできて対象のDOM要素とかも判定出来ればいいんだけど、、方法を知らないだけ?

オープニング用にメンデルスゾーンの結婚行進曲をギターで作ってみました。うるさいし、何がしたいのかよくわからなくなってきた、、、。

パート1

パート2
using System;
using System.Collections.Generic;
using System.Linq;
using MonoTouch.Foundation;
using MonoTouch.UIKit;

namespace HelloIPhoneWebBrowser
{
	public class Application
	{
		static void Main (string[] args)
		{
			UIApplication.Main (args);
		}
	}
	
	// The name AppDelegate is referenced in the MainWindow.xib file.
	public partial class AppDelegate : UIApplicationDelegate
	{
		// This method is invoked when the application has loaded its UI and its ready to run
		public override bool FinishedLaunching (UIApplication app, NSDictionary options)
		{
		
			myWebBrowser.ShouldStartLoad = delegate(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType) {
				if (navigationType == UIWebViewNavigationType.LinkClicked) {
					UIApplication.SharedApplication.OpenUrl (request.Url);
					return false;
				}
				return true;
			};
			
			goButton.TouchDown += (sender, e) => {
				myWebBrowser.LoadRequest (new NSUrlRequest (new NSUrl (myUrlText.Text)));
			};
			
			myWebBrowser.LoadStarted += (sender, e) => {
				UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
				myUrlText.Text = myWebBrowser.Request.Url.AbsoluteString;
			};
			
			myWebBrowser.LoadFinished += (sender, e) => {
				UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
				myUrlText.Text = myWebBrowser.Request.Url.AbsoluteString;
				this.updateNavigateButtonEnabled ();
			};
			
			
			myWebBrowser.LoadError += (object sender, UIWebErrorArgs e) => {
				UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
				using (var alert = new UIAlertView("Error!!", e.Error.LocalizedDescription, null, "OK", null)) {
					alert.Show ();
				}
				this.updateNavigateButtonEnabled ();
			};
			
			backButton.TouchDown += (sender, e) => {
				myWebBrowser.GoBack ();
			};
			
			forwardButton.TouchDown += (sender, e) => {
				myWebBrowser.GoForward ();
			};
			

			window.MakeKeyAndVisible ();
	
			return true;
		}
		
		void updateNavigateButtonEnabled ()
		{ 
			backButton.Enabled = myWebBrowser.CanGoBack;
			forwardButton.Enabled = myWebBrowser.CanGoForward;
		}
		
	
		// This method is required in iPhoneOS 3.0
		public override void OnActivated (UIApplication application)
		{
		}
	}
}


C#でiPhone - UiScrollViewを使ってページめくりしてみる

KindleアプリやStanzaアプリなどページめくりのできるアプリがありますが、実際に紙がめくれるような視覚効果を使用しないのであれば結構簡単にできてしまうようです。


C# で iPhone - UiBuilderを使わずにUIを使ってみる

以前トライしてみた時はボタントラベルの配置にUiBuilderを使ってやってみたのですが、まあそれが正当なやり方なのでしょうけど、ただ実際ちょっとこったアプリを作ろうとすれば動的にUIを構築する必要が出てくると思われるので、試してみました。
また超簡単なHelloWorld的なものですが、基本的にその辺はWindowsアプリやってる時と変わらないんだなーって感じでした。

Rails3でRaisl2.x風にコントローラに名前空間を付ける

Rails2.x の頃はよく管理系のページは
admin/users
とか
admin/products
みたいにコントローラに自由に名前空間をつけてやってたんだけど、
Rails3で同じことをやろうとしたらルーティングエラーで怒られる。

Routes.rbを開いてみると

namespace :admin do
  resources :products
end


みたいな書き方がのサンプルがある。
でもこれっていわゆるRESTFULな使い方しかできない。
Action名とか自由につけたい場合はどうすればいいのだろう?

名前空間なしで以前のRaisl2.xふうにする場合は、単純にデフォルトでコメントアウトされている
#match ':controller(/:action(/:id(.:format)))'
この行を復活させればよかったんだけど、じゃあ同様にこれを上記の書き方で名前空間でくくってやればいいのかな?

namespace :admin do
  match ':controller(/:action(/:id(.:format)))'
end


う〜ん、だめだ、、、。

で、結局

match ':controller(/:action(/:id(.:format)))', :controller => /admin\/[^\/]+/

正規表現で対応することに、、、。

他に方法ないのか?
っていうかRESTFulってそんなにいいもの?
いちいちカスタム命名したアクション追加するたびに
Routes.rbに記述加えるのってすごく面倒だと思うのは私だけなんでしょうか?
new,create,edit,update,destroy以外のアクションって欲しくなるとき多々あるんだけど。。。

なんかめんどーだー、、。 
本気でRailsやめてASP.Net MVC で作りたくなってきた。
 

Kindleに朝日・日経・読売の社説&コラムを自動配信

丁度2年くらい前にRubyを使って自分宛にメール配信するそんなスクリプトを作ったのですが、Kindle購入時に割り当てられた専用のメールアドレス宛に配信すればよくない? ってことでちょっと改修。
Kindleの場合はメールに添付ファイルとしてKindleに取り込むデータを送らなければならないので、そこだけちょっといじって、あとはcronで毎日7:10(※7:00だとたまに更新されてない場合がある)に起動するように設定。

新松戸〜亀有あたりまで時間潰せます、、、。

興味のある方は自作してみるといいと思います。
産経、毎日も対応しようかな、、、。 

 IMG_0481
プロフィール

さとやn

C#が好きだけど仕事はRubyばかりな開発者。
最近はDockerとか関数型言語とかAngularJSにハマっている。
武蔵小杉とか田町とか柏とかに出没。

QRコード
QRコード
  • ライブドアブログ